【问题标题】:Matrix indexing error in MATLABMATLAB中的矩阵索引错误
【发布时间】:2010-03-23 02:41:18
【问题描述】:

我在 Matlab 中不断收到此错误:

试图访问 r(0,0); index 必须是正整数或 合乎逻辑。

错误 ==> 15 岁的 Romberg

我用Romberg(1.3, 2.19,8)运行它

我认为问题在于该陈述不合逻辑,因为我将其设为正数,但仍然遇到相同的错误。有人知道我能做什么吗?

function Romberg(a, b, n)
    h = b - a;
    r = zeros(n,n);
    for i = 1:n
        h = h/2;
        sum1 = 0;

        for k = 1:2:2^(i)
            sum1 = sum1 + f(a + k*h);
        end

        r(i,0) = (1/2)*r(i-1,0) + (sum1)*h;

        for j = 1:i
            r(i,j) = r(i,j-1) + (r(i,j-1) - r(i-1,j-1))/((4^j) - 1);
        end
    end
    disp(r);
end

function f_of_x = f(x)
    f_of_x = sin(x)/x;
end

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    有两行你使用 0 来索引,而你不能在 Matlab 中:

    r(i,0) = (1/2)*r(i-1,0) + (sum1)*h;
    

    r(i,j) = r(i,j-1) + (r(i,j-1) - r(i-1,j-1))/((4^j) - 1);
    

    当 j==1 或 i==1 时。

    我建议您从 2 开始运行循环,并将指数 i 和 j 分别替换为 (i-1) 和 (j-1)。

    顺便说一句:你可以写循环

    for k = 1:2:2^(i)
    
       sum1 = sum1 + f(a + k*h);
    
    end
    

    作为

    k = 1:2:2^i;
    tmp = f(a + k*h);
    sum1 = sum(tmp);
    

    如果你把 f_of_x 写成

    sin(x)./x
    

    【讨论】:

    • 如果a 是负数,您可能希望将f(x) 定义为f_of_x = sin(x)./x; f_of_x(isnan(f_of_x)) = 1;sinc(x/pi) 也可以。
    【解决方案2】:

    在 MATLAB 中,向量和矩阵的索引从 1 开始。因此,代码的第一行无效,因为 r 上的索引为 0。

    【讨论】:

    • 抱歉打错了,我不是故意把第一行代码放在那里的。
    • 尽管如此,同一行存在于代码块的中间。它试图分配给r(i, 0),这是非法的,因为 0 是矩阵的非法索引。
    【解决方案3】:

    你有零下标

    r(i,0) = (1/2)*r(i-1,0) + (sum1)*h;
    

    这在 MATLAB 中是不可能的——所有索引都从 1 开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2011-12-24
      • 1970-01-01
      • 2014-05-12
      • 2013-09-13
      • 2014-06-08
      相关资源
      最近更新 更多