此代码用于在MATLAB上找到Euler方法
function [x,y]=euler_forward(f,xinit,yinit,xfinal,n)
h=(xfinal-xinit)/n;
% Initialization of x and y as column vectors
x=[xinit zeros(1,n)]; y=[yinit zeros(1,n)];
% Calculation of x and y
for i=1:n
x(i+1)=x(i)+h;
y(i+1)=y(i)+h*f(x(i),y(i));
end
end`
'f=@(x,y) (1+2*x)*sqrt(y);
% Calculate exact solution
g=@(x,y) (1+2*x)*sqrt(y);
xe=[0:0.01:1];
ye=g(xe);
[x1,y1]=euler_forward(f,0,1,1,4);
% Plot
plot(xe,ye,'k-',x1,y1,'k-.')
xlabel('x')
ylabel('y')
legend('Analytical','Forward')
% Estimate errors
error1=['Forward error: ' num2str(-100*(ye(end)-y1(end))/ye(end)) '%'];
error={error1}
所以到目前为止我已经解决了这个问题,并且它给出了一个错误,表示y未定义。我该怎么办?
答案 0 :(得分:0)
问题在于:
% Calculate exact solution
g=@(x,y) (1+2*x)*sqrt(y);
精确解是一个变量x的函数。据推测,你应该用纸和铅笔(或与Wolfram Alpha等)找到它:它是
g=@(x) .25*(x.^2+x+2).^2
然后代码按预期工作,产生这个简洁的图表:这是欧拉方法的典型代表,数值解决方案落后于确切的方法。