matlab ode45函数_用Matlab ode45函数解常微分方程

本文介绍了如何利用Matlab的ode45函数解决含有参数的二阶常微分方程。通过将二阶方程转化为一阶微分方程组,然后设置初始条件,借助ode45进行数值求解。文中提供了相关代码示例,展示了如何在ode45中传递额外参数。
摘要由CSDN通过智能技术生成

ea7068323f8bcbdd7e54db81505e157b.png

最近因科研工作需求,要用到Runge-Kutta Method解二阶ODE,自己也懒得造轮子了,所以干脆就直接使用Matlab的内置函数ode45来解决(该内置函数基于Explicit Runge-Kutta Method)。于此处记录一下ode45的一些比较有效的使用方法(主要是关于如何传入额外参数)。

现用ode45求以下初始值问题的数值解,注意该方程组含有一个参数a(该参数a需要提前计算好,然后才能求解此方程组),

equation?tex=y%27%27%2Bayy%27t%3D0%5C%5C+y%280%29%3D1%2Cy%27%280%29%3D2

首先转化成一阶微分方程组,令

equation?tex=y_1+%3D+y%5C%5C+y_2+%3D+y%27

便得到

equation?tex=y_1%27%3Dy_2%5C%5C+y_2%27%3D-ay_1y_2t

初始条件为

equation?tex=y_1%280%29%3D1%5C%5C+y_2%280%29%3D2

相应的Matlab代码如下:

sysODE.m - 该文件用来描述需要求解的一阶微分方程组。

function [dydt] = sysODE(t,y,a)

dydt = [y(2); -a*y(1)*y(2)*t];
end

demo.m - 该文件为主脚本,负责调用ode45以及sysODE这两个函数

a = 10;
[t,y] = ode45(@(t,y) sysODE(t,y,a), [0,1],[1,2]);

plot(t,y(:,1))

注意这里为了使表述简洁,直接给a赋值了,在许多实际问题中像a这样的参数可能需要经过很多计算步骤才能得到,这也是为什么需要这种传入参数的方法。

运行demo.m得到该方程组的数值解:

0905da4758eaf40a1cd6bad3cad67ddc.png
数值解

Reference

[1] Differential Equations An Introduction to Modern Methods and Applications by James R. Brannan, William E. Boyce.

[2] Matlab Help Center - ode45: https://www.mathworks.com/help/matlab/ref/ode45.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值