如何使用fprintf修复错误无法将“sym”值转换为“double”。

问题描述 投票:0回答:1
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

我该如何修复程序代码?我需要调整或修复哪些具体代码?

matlab double
1个回答
0
投票

y1y2是符号变量(检查为什么键入whos y1 y2,或class(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));
© www.soinside.com 2019 - 2024. All rights reserved.