【问题标题】:Why does MATLAB say that my array index must either be a positive integer or a logical value?为什么 MATLAB 说我的数组索引必须是正整数或逻辑值?
【发布时间】:2021-02-26 09:52:04
【问题描述】:

这是我遇到问题的代码部分:

function coeff(p, I) %linear coefficients for the adam-moulton method
    beta = [];
    syms u;
    B = 1;
    
    for j = 0 : (p-1)
        for i = 0 : (p-1)
            if ~(i == j)
                B = B * (u + i);
            end
        end
        beta = [beta, ((-1).^j)./( factorial(j) * factorial(p - j - 1) ) * integral(@(u) B(u), I(1), I(2))];
    end 
end

MATLAB 在这里告诉我:

beta = [beta, ((-1).^j)./( factorial(j) * factorial(p - j - 1) ) * integral(@(u) B(u), I(1), I(2))];

我的数组索引必须是正整数或逻辑值,但我不明白为什么这应该是一个问题,因为我只是想附加到预先存在的数组 beta。我怎样才能做到这一点?

【问题讨论】:

  • 在 Matlab 中索引从 1 开始而不是 0。由于您的循环变量从零开始,Matlab 会抛出此异常。您的循环应该从 1 开始,然后转到 p 而不是 p-1
  • @Till,我不认为这是问题所在,因为从来没有人打电话给array(i)array(j);如果你不这样做,你可以用 0、负整数或任何你想要的整数开始你的循环。问题可能在于u 是一个符号变量,因此您不能拥有B(u),但我无法确定从未使用过符号工具箱。
  • @MatteoV 你有什么办法可以修复我的代码,这样就不需要符号变量了吗?
  • @SardarUsama $p$ 与 $p$-step 方法中的一样。 $I$ 是我的时间参数 $t$ 范围的时间间隔。为了视觉方便,我将 $I$ 作为数组 [a, b],然后从中提取 I(1)I(2)

标签: arrays matlab


【解决方案1】:

积分函数需要有函数句柄的函数,可以对B进行变换,调整积分语句;

for j = 0 : (p-1)
    for i = 0 : (p-1)
        if ~(i == j)
            B = B * (u + i);
        end
    end
    B = matlabFunction(B);
    beta = [beta, ((-1).^j)./( factorial(j) * factorial(p - j - 1) ) * integral(B, I(1), I(2))];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2012-11-27
    • 2013-12-04
    • 2016-06-12
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多