(a) 考虑以下微分方程
确切的解决方案是
使用欧拉法在matlab的帮助下求解以下微分方程(代码如下),运行程序为和计算错误。然后运行它计算误差并注意它是如何变化的。然后使用理查森外推法来提高准确性。计算误差。
function y=Euler(t,h,y0,t0)
n=floor((t-t0)/h);
y=y0;
for i=1:n
y=y+h*f(t0+h*(i-1),y);
end;
function f=f(t,y)
f=1/(1+t^2)-2*y^2;
return;
(b) 现在使用 Runge-Kutta 方法求解 (a) 部分中的微分方程,运行程序和与(a)部分相比,该误差应减少。解释区别。再次运行它并注意错误是如何改变的。使用 Richardson 外推法来提高准确性并计算误差。
function y=Runge_Kutta(t,h,y0,t0)
n=floor((t-t0)/h);
y=y0;
for i=1:n
t=t0+h*(i-1);
y=y+(h/2)*(f(t,y)+f(t+h,y+h*f(t,y)));
end;
function f=f(t,y)
f=1/(1+t^2)-2*y^2;
return;
我试过的
(a) 当我以步长运行程序时我有一个错误但是当我以步长运行它时,我有一个错误这对我来说很有意义,因为较小的步长应该会产生较小的错误,但在这种情况下它不会出现。(代码没有任何问题,因为它是由我的教授给出的)。谁能给我解释一下。谢谢
(b) 当我再次运行这部分的程序时,我得到了一个错误对于两个步长和这比部分(a)的大,这对我来说是有意义的,因为龙格-库塔方法应该比欧拉方法更准确,因此误差更小,但在这种情况下似乎如此。谁能向我解释这里出了什么问题。谢谢