人人终身学习知识网~是各类综合知识资源信息分享,提升综合素质与提高知识技能的终身学习网络平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程

[复制链接]

问题:MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程

答案:↓↓↓

网友采纳  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')
回复

使用道具 举报

小黑屋/人人终身学习知识网~是各类综合知识资源信息分享,提升综合素质与提高知识技能的终身学习网络平台

Powered by 5wangxiao

© 2007-2021 5wangxiao.Com Inc.

快速回复 返回顶部 返回列表