我的代码遇到了一些问题。这是:
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)
当我尝试将lambda映射到P时,我得到“从sym转换为double是不可能的”错误消息。我在Matlab上并不是特别精彩,所以任何帮助都会感激不尽!
答案 0 :(得分:1)
plot
功能仅适用于数字输入。 lambda
和P
都是符号表达式(至少在覆盖P
之前,通过将其设置为等于集成后的向量),无法直接转换为浮点数。如果尝试使用double(sym('exp(x)'))
之类的内容,则会出现相同的错误。你有两个选择。第一个是符号工具箱中的ezplot
函数:
...
P = int(x,lambda);
ezplot(P,[-5 5]); % Plot's P from lambda = -5 to lambda = 5
或者您可以使用subs
功能:
...
P = int(x,lambda);
lambda = -5:0.01:5;
plot(lambda,real(subs(P,'lambda',lambda)))
axis([lambda(1) lambda(end) -1e15 1e15])
我使用real
来抑制lambda
的负值警告。