Sto avendo alcuni problemi con il mio codice. Ecco qui:
lambdaz = 1.2;
n = 24;
mu = 0.00055e9;
lambda = sym("lambda","clear");
W = (((2.*mu)./n.^2)).*((lambda.^n)+(lambdaz.^n)+((lambda.^-n).*(lambdaz.^-n))-3);
dW_dlambda = diff(W, lambda);
W2=(((2.*mu)./n.^2).*(lambda.^n))+(((2.*mu)./n.^2).*(lambdaz.^n))+(((2.*mu)./n.^2).*((lambda.^-n).*(lambdaz.^-n)))-(3.*((2.*mu)./n.^2))
dW2_dlambda=diff(W2,lambda)
x=((((lambda.^2).*(lambdaz))-1).^-1).*(dW_dlambda);
x2=((((lambda.^2).*(lambdaz))-1).^-1).*(dW2_dlambda)
P2 = int(x2,lambda)
P=int(x,lambda);
P=(0:1000:26700)
plot(lambda,P)
Quando provo a tracciare lambda rispetto a P ottengo il messaggio di errore "conversione da raddoppiare da sym non possibile". Non sono particolarmente bravo in Matlab, quindi qualsiasi aiuto sarebbe accolto con gratitudine!
risposte:
1 per risposta № 1Il plot
la funzione funziona solo per gli input numerici. Tutti e due lambda
e P
sono espressioni simboliche (almeno prima sovrascritte P
impostandolo uguale a un vettore dopo l'integrazione) che non può essere convertito direttamente in virgola mobile. Hai lo stesso errore se provi qualcosa di simile double(sym("exp(x)"))
. Hai due opzioni. Il primo è il ezplot
funzione in Symbolic Toolbox:
...
P = int(x,lambda);
ezplot(P,[-5 5]); % Plot"s P from lambda = -5 to lambda = 5
O puoi usare il subs
funzione:
...
P = int(x,lambda);
lambda = -5:0.01:5;
plot(lambda,real(subs(P,"lambda",lambda)))
axis([lambda(1) lambda(end) -1e15 1e15])
ero solito real
sopprimere un avviso per valori negativi di lambda
.