Matlab ode45迭代问题

时间:2019-05-19 09:09:06

标签: matlab

我正在尝试使用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,并且其中包含值。

1 个答案:

答案 0 :(得分:1)

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);