【问题标题】:Matlab ode45 iteration issueMatlab ode45 迭代问题
【发布时间】:2019-05-19 09:09:06
【问题描述】:

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

【问题讨论】:

    标签: matlab


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多