【问题标题】:Index out of bounds in for cycle (MATLAB)循环中的索引超出范围(MATLAB)
【发布时间】:2011-11-29 21:46:09
【问题描述】:

好的,我遇到了一个问题(可能是新手问题),但问题是这样的:

for i=1:1:16;
    h=10^(-i);
    yDFC2(i)=(1/(2*1*h(i)))*(-1*valX+valX);
end
err2=abs(fDX(x1)-yDFC2);
loglog(h,err2,'b-');

每次我运行这段代码时,都会出现以下错误:

尝试访问 h(2);索引超出范围,因为 numel(h)=1

valX是通过确定用户输入的函数的图像来计算的变量; fDX 是该函数的导数(两者都运行良好)。

这是为了绘制间距 (h) 与中心有限差分 (CFD) 中的误差。 for循环内的公式是CFD为n=2计算的一阶导数。

间距需要以10^(-i)为增量。

如果有人能帮我解决这个问题,我将非常感激。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果你这样做了

    h = 10.^(-(1:1:16)); 
    

    在 for 循环之外,您可以在内部正确访问 h(i)。问题是您为每个通道创建一个标量 h。

    【讨论】:

    • 或者,您可以将 for 循环的第一行更改为 h(i)=10^(-i)。我相信这有点低效,但对于 16 次迭代,这应该没关系。
    • 没错,但由于他想使用 h 向量稍后进行绘图,所以最好有它。
    • 该向量将在之后可用,我认为每次迭代都向向量添加一个元素是低效的。
    • 啊,当然可以; h 可能在循环中增长。考虑预分配速度:)
    • 好吧,我照你说的做了,现在我得到一个空白图表。我将 h = 10.^(-(1:1:16)); 放在 for 循环之外,除此之外我保持一切平等。有谁知道怎么回事?我完全迷失在这里了。
    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2017-08-09
    • 2019-04-17
    • 2013-11-25
    • 2016-10-03
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多