??? Ошибка при использовании ==> plot - преобразование в double из sym невозможно - PullRequest
1 голос
/ 23 апреля 2011

У меня проблемы с кодом. Вот оно:

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)

Когда я пытаюсь построить лямбду против P, я получаю сообщение об ошибке «преобразование в удвоение из sym невозможно». Я не особенно хорош в Matlab, поэтому любая помощь будет с благодарностью получена!

1 Ответ

1 голос
/ 22 мая 2013

Функция plot работает только для числовых входов.И lambda, и P являются символическими выражениями (по крайней мере, до перезаписи P, установив его равным вектору после интегрирования), которые нельзя напрямую преобразовать в плавающую точку.Вы получите ту же ошибку, если попытаетесь что-то вроде double(sym('exp(x)')).У вас есть два варианта.Первая - это функция ezplot в Symbolic Toolbox:

...
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...