用MATLAB中的ode45函数求解微分方程

     在MATLAB官网ode45函数介绍中有一下四种用法。 [t,y] = ode45(odefun,tspan,y0)icon-default.png?t=L892https://www.mathworks.com/help/releases/R2020b/matlab/ref/ode45.html?doclanguage=zh-CN&nocookie=true&prodfilter=ML%20SL%205G%20AE%20AT%20AA%20AU%20DR%20AS%20BI%20CM%20VP%20CT%20CF%20DA%20DB%20DF%20DH%20NN%20DO%20DS%20ET%20EC%20FH%20IT%20FI%20PO%20FL%20GD%20GC%20HD%20ES%20IE%20IA%20IP%20IC%20LP%20LS%20MG%20ME%20CO%20MJ%20DW%20MR%20MW%20AM%20MP%20MB%20MT%20NV%20OT%20OP%20DM%20PD%20AR%20BD%20BS%20CD%20CS%20PW%20PM%20RA%20RL%20RB%20RF%20RK%20RO%20RC%20RR%20TF%20SX%20SG%20SB%20SE%20SS%20LD%20PS%20SH%20MS%20VR%20VV%20CI%20RT%20SK%20SD%20CV%20SO%20DV%20WT%20PL%20XP%20SR%20RQ%20SZ%20HW%20EL%20SF%20ST%20SM%20ZC%20ID%20TA%20TR%20UV%20VE%20VN%20VT%20WA%20LH%20WL&docviewer=helpbrowser&docrelease=R2020b&s_cid=pl_webdoc&loginurl=https%3A%2F%2Flocalhost%3A31515%2Ftoolbox%2Fmatlab%2Fmatlab_login_framework%2Fweb%2Findex.html%3Fsnc%3DOHKPVM&searchsource=mw&snc=MDGHZE&container=jshelpbrowser#d122e852982

在此处,t,y是最终要通过ode45函数得到的结果。odefun是要求解的函数,英文span是跨度的含义,time是时间的含义。因此,顾名思义,tspan 表示时间的跨度,即时间的范围。而y0则便是要求解y的初值。即计算给定初值的函数在给定时间范围内的值。

如果还不是很清楚,那么,可以看官网给的一个简单的例子。

y'=2t

t=[0 5]

y(0)=0

对于这样的一个一阶导的函数,程序和结果如下:

用MATLAB中的ode45函数求解微分方程_第1张图片

用MATLAB中的ode45函数求解微分方程_第2张图片

  但由于该方程简单,因此也可以直接将2t写入主程序中。即下图所示:

 

 上述是求一阶导的,那么如果相求二阶导的呢。

接下来,这个例子就是二阶微分方程了。方程如下所示:

 y''-(1-y^2)y'+y=0

y(0)=2,y'(0)=0

t=[0 20]

对于该方程,采用ode45求解的思路为:让y=y(1),y'=dy(1)=y(2),y''=ddy(1)=dy(2),即y的自身为y(1),y的一阶导赋值为y(2),y的二阶导赋值为y(3),从而将y的二阶导转化为y(2)的一阶导。

因为龙格库塔法是用来求一阶导的。理论内容可以参考数值分析等的书籍。通过将二阶导降阶成为一阶导,再用龙格库塔法ode45实现求解。

回到例子,则上述方程可表示为

dy(1)=y(2)

dy(2)=(1-y(1)^2)y(2)-y(1)

其求解程序和结果如下图。

 用MATLAB中的ode45函数求解微分方程_第3张图片

用MATLAB中的ode45函数求解微分方程_第4张图片

 那么对于求解方程组即方程中存在分段函数,又该怎么处理呢。这将在后续进行记录。

 

 

你可能感兴趣的:(matlab)