【发布时间】:2015-04-02 01:41:04
【问题描述】:
我有一个解决以下类型的大规模 ODE 系统的 MATLAB 代码
function [F] = myfun(t,C,u)
u 这里是一个时间相关向量,用作函数 myfun 的输入。我当前的代码如下:-
u = zeros(4,1);
u(1) = 0.1;
u(2) = 0.1;
u(3) = 5.01/36;
u(4) = 0.1;
C0 = zeros(15*4*20+12,1);
options = odeset('Mass',Mf,'RelTol',1e-5,'AbsTol',1e-5);
[T,C] = ode15s(@OCFDonecolumnA, [0,5000] ,C0,options,u);
我想将整个时域分成 5 个不同的部分,并让 u 的元素在不同的时间取不同的值(类似于多步函数)。考虑到我以后想解决一个优化问题以确定域 [0,5000] 中每个时间间隔的 u 值,最好的编码方法是什么。
谢谢
【问题讨论】:
-
如果您正在寻找正确和准确的结果,不连续地更改 ODE 的参数通常不是一个好主意(并且违反了 ODE 的数学平滑度要求)——即使使用像
ode15s这样的刚性求解也是如此.做到这一点的方法是及时进行单独的分段积分,停止和启动每个积分器。请参阅my answer here,如果有帮助,请告诉我。还要注意我是如何通过匿名函数传递参数的,而不是在选项输入之后添加参数的弃用方法。