Как исправить ошибку с помощью fprintf Невозможно преобразовать значение 'sym' в 'double'.? - PullRequest
0 голосов
/ 07 апреля 2019
Error using fprintf
Unable to convert 'sym' value to 'double'.

Это мой ввод

Step size = .2

dy/dt = f(t,y) = exp(-x*y)

y0 = 0

t0 = .1

final t = .5

n       tn          yn          yn+1

0    0.100000    0.000000    Error using fprintf

Unable to convert 'sym' value to 'double'.

Error in FinalEuler (line 17)

fprintf('%d\t %f\t %f\t %f\n',n,x,yn,y1,y2);

Это код, который я использовал.

clc
syms y t x
h=input('Step size = '); 
f_e=input('dy/dt = f(t,y) = ')
f_de=f_e
yn=input('y0 = ')
tn=input('t0 = ')
t_end=input('final t = ')
n=0

%iteration
fprintf('n\t\ttn\t\t\tyn\t\t\tyn+1\n');
for x=tn:h:t_end
y1=yn+subs(f_e,t,x)*h
y2=subs(y1,y,yn)
fprintf('%d\t %f\t %f\t %f\n',n,x,yn,y1,y2);

yn=y2;
 n=n+1
end

Как я могу исправить свой программный код?Какой конкретный код мне нужно исправить или исправить?

1 Ответ

0 голосов
/ 07 апреля 2019

y1 и y2 являются символическими переменными (проверьте, почему тип whos y1 y2 или class(y1)), а не удваивается.Вы пытаетесь отобразить их как числа с плавающей запятой, используя fprintf, но перед отображением следует преобразовать символическое выражение в двойное число:

y1 = double(yn+subs(f_e,t,x)*h);
y2 = double(subs(y1,y,yn))

Или, в качестве альтернативы, конвертировать только y1 и y2 в двойные числа.только для отображения и сохранить их символическими для следующей итерации.

fprintf('%d\t %f\t %f\t %f\n',n,x,yn,double(y1),double(y2));
...