如何使用fprintf解决错误无法将'sym'值转换为'double'。

时间:2019-04-07 16:07:07

标签: matlab double

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 :(得分:0)

y1y2是符号变量(请检查为什么键入whos y1 y2class(y1))并且不加倍。您正在尝试使用fprintf将它们显示为浮点数,但是在显示之前,应将符号表达式转换为double:

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

或者,仅将y1y2转换为仅用于显示的双精度,并在下一次迭代中将它们保持象征性。

fprintf('%d\t %f\t %f\t %f\n',n,x,yn,double(y1),double(y2));
相关问题