用四阶龙格库塔公式(取h=0.1)解下列微分方程组初值问题:
{
y
1
′
=
120
−
2
y
1
+
2
y
2
(
0
≤
x
≤
1.0
)
,
y
2
′
=
2
y
1
−
5
y
2
,
y
1
(
0
)
=
y
2
(
0
)
=
0
;
\left\{ \begin{aligned} y^{'}_1&=120-2y_1+2y_2 (0 \le x\le1.0), \\ y^{'}_2&=2y_1 -5y_2,\\ y_1&(0)=y_2(0)=0; \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧y1′y2′y1=120−2y1+2y2(0≤x≤1.0),=2y1−5y2,(0)=y2(0)=0;
代码如下:
function odeRk4_(a,b,y0,n)
h = (b-a)/n;x = a:h:b;
y = y0*ones(1,n+1)
for j = 2:n+1
k1 = func(y(:,j-1));
k2 = func(y(:,j-1)+h/2*k1');
k3 = func(y(:,j-1)+h/2*k2');
k4 = func(y(:,j-1)+h*k3');
y(:,j) = y(:,j-1)+h/6*(k1'+k4')+h/3.*(k2'+k3');
end
for k = 1:n+1
fprintf('x[%d]=%f\ty1[%d]=%f\ty2[%d]=%f\n',k-1,x(k),k-1,y(1,k),k-1,y(2,k));
end
定义函数:
function z=func(y)
z(1) = 120-2*y(1)+2*y(2);
z(2) = 2*y(1)- 5*y(2);
end