matlab 用ode45函数算离散迭代的微分方程组

想要实现的功能

针对分段常微分方程,希望实现离散采样,即从0开始,给定状态变量的初值,每隔T时间进行计算并采样一次。

实现

ode45的功能简单介绍:

用ode45算法求解微分方程(组)。模板为

[s,x]=ode45(@func1,[startt endd],[x1;x2]);

其中startt为开始时间,endd为结束时间,x1和x2分别是想要求解的状态变量。数量更多或更少都可以。

具体用法:

%% 参数初始化
startt=0;endd=10;      %区间开始和结束
x1=10;x2=3 %变量初值

%% ode45方法求解数值解
[t,x]=ode45(@func,[startt endd],[x1;x2]);

这样得到的就是两个向量,t和x,其中x包括x1和x2

分段

因为我想要给一个初值,然后算出T时间后的终值,以便进行下一轮的计算,所以不需要ode45中间的计算值,也就是取上述向量的最后一行就行了。

x1(t+nT)=x(end,1);
x2(t+nT)=x(end,2);

然后把这个值作为下一个周期的初值,用别的func进行计算。

用例

startt=0;endd=delta_t;      %delta_t就是设置的采样周期
iL=zeros(len,1); %len是整个周期共需要采样的次数
uo=zeros(len,1);

iL(1)=0;uo(1)=0; %变量初值
flag=zeros(len,1);

for t = 1:(len-1)
    if 条件a
        [s,x]=ode45(@func1,[startt endd],[iL(t);uo(t)]);
        iL(t+1)=x(end,1);
        uo(t+1)=x(end,2);
    elseif 条件b
        [s,x]=ode45(@func2,[startt endd],[iL(t);uo(t)]);
        iL(t+1)=x(end,1);
        uo(t+1)=x(end,2);
    else
        warndlg('第'+string(t)+'个点计算错误','Warning'); % 非a即b,如果都不是则报错
    end
end


你可能感兴趣的:(matlab,电力电子,电力电子仿真,matlab,算法,开发语言)