利用ode45求解含控制量并且控制量为离散点的动力学方程

27 篇文章 5 订阅

1、写出微分方程函数2、求解

function dy=rigid(t,y)
dy=zeros(3,1);
dy(1)=y(2)*y(3);
dy(2)=-y(1)*y(3);
dy(3)=-0.51*y(1)*y(2);
end
%将微分方程写成函数形式,待调用
options=odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[T Y]=ode45(@rigid,[0 12],[0 1 1],options);
plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'.');
%[0 12]是时间跨度[0 1 1]是初始值,值得注意的是求出的Y为矩阵,画图调用时要注意

在实际的动力学方程中会涉及控制量,而微分方程只是计算状态量,因此计算时需要输入控制量的时间函数,但另一个问题我们计算得到的优化控制量大多时候是离散点,这些点可以拟合或插值得到随时间的函数。

function dydt = myode(t,y,ft,f,gt,g)
%UNTITLED2 ft是f所对应的时间节点,gt是g对应的时间节点,首先对控制量进行插值
%   此处显示详细说明
f=interp1(ft,f,t);
g=interp1(gt,g,t);
dydt=-f.*y+g;
end
%y是状态量,f和g为两个控制量,微分方程写为函数形式调用
clc;clear;close;
%% 控制量数据点
ft=linspace(0,5,25);
f=ft.^2-ft-3;
gt=linspace(1,6,25);
g=3*sin(gt-0.25);
%%  计算,注意@函数句柄调用形式
Tspan=[1 5];%时间跨度
Iy=1;%初始值
[T,Y]=ode45(@(t,y) myode(t,y,ft,f,gt,g),Tspan,Iy);
plot(T,Y);

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值