MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程
<p>问题:MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程<p>答案:↓↓↓<p class="nav-title mt10" style="border-top:1px solid #ccc;padding-top: 10px;">李建湘的回答:<div class="content-b">网友采纳 functionEuler %欧拉法和龙格库塔算法解一阶常微分方程源代码 %例子dy/dx=-y+x+1 f=inline('-y+x+1','x','y');%微分方程的右边项 dx=0.5;%x方向步长 xleft=0;%区域的左边界 xright=10;%区域的右边界 xx=xleft:dx:xright;%一系列离散的点 n=length(xx);%点的个数 y0=1; %%(1)欧拉法 Euler=y0; fori=2:n Euler(i)=Euler(i-1)+dx*f(xx(i-1),Euler(i-1)); end %%(2)龙格库塔法 RK=y0; fori=2:n k1=f(xx(i-1),RK(i-1)); k2=f(xx(i-1)+dx/2,RK(i-1)+k1*dx/2); k3=f(xx(i-1)+dx/2,RK(i-1)+k2*dx/2); k4=f(xx(i-1)+dx,RK(i-1)+k3*dx); RK(i)=RK(i-1)+dx*(k1+2*k2+2*k3+k4)/6; end %%Euler和Rk法结果比较 plot(xx,Euler,xx,RK) holdon %精确解用作图 symsx rightsolve=dsolve('Dy=-y+x+1','y(0)=1','x');%求出解析解 rightdata=subs(rightsolve,xx);%将xx代入解析解,得到解析解对应的数值 plot(xx,rightdata,'r*') legend('Euler','Runge-Kutta','analytic')
页:
[1]