实现Euler求解微分方程的方法

时间:2014-12-06 00:54:56

标签: matlab differential-equations

此代码用于在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未定义。我该怎么办?

1 个答案:

答案 0 :(得分:0)

问题在于:

% Calculate exact solution
g=@(x,y) (1+2*x)*sqrt(y);

精确解是一个变量x的函数。据推测,你应该用纸和铅笔(或与Wolfram Alpha等)找到它:它是

 g=@(x) .25*(x.^2+x+2).^2 

然后代码按预期工作,产生这个简洁的图表:这是欧拉方法的典型代表,数值解决方案落后于确切的方法。

output