Matlab-ODE45:求解状态变量(微分方程组)

ode45函数

ode45实际上是数值分析中数值求解微分方程组的一种方法,4阶五级Runge-Kutta算法。

调用方法

[t,x]=ode45(Fun,tspan,x0 ,options,pars)

其实这种方程的每一个状态变量都是t 的函数,我们可以从现代控制理论的状态空间来想。因此返回[ t , x ],其中t是一个列向量,x是n × n的矩阵,它的每一列就是其中一个状态变量随t的变化值。

Fun就是你要求解的微分方程组,微分方程组必须化成现代控制理论中的一阶微分方程组形式,之后定义。m函数亦或是匿名函数f = @ ( t , x )来描述微分方程组的右边部分,并且是列向量。(注意匿名函数一定是先t后x并且一定有t占位)

tspan就是你要求解的t区间,x 0 就是初始状态。options是一些选项。

例子

Rossler微分方程组

f = @(t,x)[-x(2)-x(3);x(1)+0.2*x(2);0.2+(x(1)-5.7)*x(3)];
[t,y] = ode45(f,[0,100],[0;0;0]);
plot(t,y);
figure;
plot3(y(:,1),y(:,2),y(:,3))


Riccati 微分方程

P1 = [1 0 0;0 3 0;0 0 5];
[t,p] = ode45(@riccati,[0.5,0],P1(:));
plot(t,p)

function U=riccati(t,x)
A = [6 6 17;1 0 -1;-1 0 0];
B = [0 0 0;0 4 2;0 2 1];
C = [1 2 0;2 8 0;0 0 4];
p = [x(1),x(2),x(3);x(4),x(5),x(6);x(7),x(8),x(9)];
K = A'*p+p*A+p*B*p+C;
U=[K(1,:)';K(2,:)';K(3,:)'];
end

注意这个地方给的是t=0.5s时的状态值,但是Runge-Kutta算法可以倒着算,因此tspan写成[0.5,0],这个时候的初始值就是P1(0.5)。

设置ode45精度

主要是绝对精度和相对精度,设置方式如下:

clc;clear;close all;
f = @(t,x)[x(1)*(x(1)^2+x(2)^2-2)-4*x(1)*x(2)^2;4*x(1)^2*x(2)+x(2)*(x(1)^2+x(2)^2-2)];
option = odeset('RelTol',1e-8,'AbsTol',[1e-8;1e-8]);
[t,y] = ode45(f,[0,10],[0.5;0.5],option);
plot(t,y(:,1),t,y(:,2))

RelTol为相对精度,一维数据,AbsTol相对精度,要给符合状态变量的维数。之后把option传入ode45即可。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: matlab打靶法是一种数值方法,用于求解微分方程的近似解。常微分方程是描述自然现象中变化的数学模型,求解这些方程能够帮助我们预测和理解物理、工程、生物等领域的现象。 matlab是一种高级数值计算软件,它提供了各种工具和函数来求解微分方程。打靶法是其中一种常用的数值方法,也被称为射击法。它的基本思想是将常微分方程转化为一个求方程根的问题,并利用数值方法逐步逼近这些根,从而得到常微分方程的近似解。 使用matlab进行打靶法求解微分方程的步骤如下: 1. 将常微分方程转化为一个方程根的问题。通常可以通过将方程变换为标准形式或者引入新的变量来实现。 2. 在matlab中定义目标函数。这个函数就是我们需要求解的方程根。将方程根的表达式写成一个函数,并输入到matlab中。 3. 在matlab中选择适当的数值方法。根据方程的特性和求解需求,选择合适的数值方法,如欧拉法、改进欧拉法、四阶龙格-库塔法等。 4. 在matlab中编写求解算法。根据选择的数值方法,编写相应的算法来逼近方程根。这通常涉及到逐步迭代计算和更新变量的过程。 5. 设置初始条件和精度要求。确定方程的初始条件(例如, 初始时刻和初始值)和求解的精度要求。 6. 运行matlab程序并获取结果。运行程序,matlab会根据设置的初始条件和精度要求进行计算,并输出方程的近似解。 需要注意的是,matlab打靶法求解微分方程是一种数值逼近的方法,得到的解是近似解,并不一定完全准确。因此,在实际应用中,需要对结果进行验证和评估,确保解的可靠性和准确性。 ### 回答2: Matlab打靶法也被称为射线法或射线算法,是一种用于求解微分方程ODE)数值解的方法。该方法是通过将ODE转化为一系列初始值问题(IVP),然后使用数值积分方法逐步逼近解。 具体步骤如下: 1. 将ODE转化为一系列初始值问题,即设定不同的初始条件。 2. 选择一个适当的数值积分方法,如欧拉法或龙格-库塔法等,在各个初始值点上进行数值积分。 3. 在每个初始值点上计算数值解,并将其与所需的目标值进行比较。 4. 根据比较结果,调整初始条件并进行下一次数值积分,直到达到所需的精度或满足停止准则。 5. 最终得到的数值解即为所求的常微分方程的解。 Matlab提供了一系列函数和工具箱来实现打靶法求解微分方程。使用Matlab编程语言编写代码,可以轻松地实现打靶法的步骤。例如,可以使用“ode45”函数来进行数值积分,并在循环中不断调整初始条件,直到满足停止准则。 通过Matlab打靶法求解微分方程不仅能高效地得到数值解,还可以通过调整初始条件的方式探索不同的解情况。此外,Matlab还提供了丰富的可视化工具,可以直观地展示求解过程和结果,有助于理解和分析问题。 总之,使用Matlab打靶法求解微分方程是一种灵活、高效且可视化的方法,通过数值积分和初始条件不断调整,可以得到满足精度要求的数值解,并进一步分析和研究微分方程的性质。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值