MATLAB ODE45迭代问题



我正在尝试使用ode45函数求解微分方程。

其中参数C1,C2,C3和C4的列是1:1001的列矢量。我想做的是,我需要将它们放入ode45的函数中,将其引用(fun.m(将它们用于方程式,但我希望每次迭代后的值更改。因此,例如,我想要的C1值是C1(1(,下一个迭代是C1(2(,下一个迭代是C1(3(等。

我的代码:

[t1,X2]=deal(cell(numel(C1),1));
[t1,X2]=deal(cell(numel(C2),1));
[t1,X2]=deal(cell(numel(C3),1));
[t1,X2]=deal(cell(numel(C4),1));
for k = 1:numel(C1)
    [t1{k},X2{k}] = ode45(@(t,x)fun(t,x,C1(k),C2(k),C3(k),C4(k)),t0,X01);
end

代码开始给我1001x1个单元格,它只有括号,例如" []",每个支架内部为空。每个C为1x1001 double,其中有值。

C1C4是单元格不是矩阵。因此,如果您以这种方式访问:

C1(k)

结果将是:

ans =
  1×1 cell array
    {value}

,但是您需要直接此值,所以简单的调用:

C1{k}

得到此答案:

ans =
    value

这是您的求解器呼叫,并进行了更改:

[t1{k},X2{k}] = ode45(@(t,x)fun(t,x,C1{k},C2{k},C3{k},C4{k}),t0,X01);