【问题标题】:Weird behavior when accessing matrix during loop在循环期间访问矩阵时的奇怪行为
【发布时间】:2017-04-30 10:06:05
【问题描述】:

我想把一些代码变成循环,但是结果是正确的。

这是原始代码。

f 只是我要索引的一些系数的列矩阵。

x = 0:pi/100:2*pi;

a1 = f(1) * sin(x);
a2 = a1 + f(2) * sin(3*x);
a3 = a2 + f(3) * sin(5*x);
a4 = a3 + f(4) * sin(7*x);
a5 = a4 + f(5) * sin(9*x);
a6 = a5 + f(6) * sin(11*x);
a7 = a6 + f(7) * sin(13*x);
a8 = a7 + f(8) * sin(15*x);
a9 = a8 + f(9) * sin(17*x);
a10 = a9 + f(10) * sin(19*x);

我有以下代码,但它没有产生相同的结果。

x = 0:pi/100:2*pi;
a = [f(1) * sin(x)];
for n = 2:10
    a = [a; a(n-1) + f(n) * sin((2*n-1) * x)];
end

我怀疑在创建新数组时对数组的索引会导致问题,但我不完全确定。

任何调试这种混乱的技巧都会很棒。

【问题讨论】:

  • 将其引用为a(n-1,:) 能解决您的问题吗?

标签: matlab


【解决方案1】:

您写了a = [a; a(n-1) + f(n) * sin((2*n-1) * x)];a(n-1) 只从a 中取一个值而不是一行。因此,修复方法是将a(n-1) 替换为a(n-1,:)

x = 0:pi/100:2*pi;
a = [f(1) * sin(x)];
for n = 2:10
    a = [a; a(n-1,:) + f(n) * sin((2*n-1) * x)];
end

产量

0.00    0.03    0.06    0.09    0.13    0.16    0.19 ....
0.00    0.22    0.44    0.65    0.86    1.06    1.26 ....
0.00    0.69    1.36    2.01    2.62    3.19    3.69 ....
0.00    1.56    3.07    4.47    5.71    6.75    7.56 ....
0.00    2.96    5.75    8.22    10.23   11.69   12.52 ....
0.00    4.99    9.57    13.38   16.12   17.61   17.78 ....
0.00    7.77    14.67   19.97   23.11   23.85   22.24 ....
0.00    11.40   21.15   27.87   30.72   29.51   24.71 ....
0.00    15.98   29.03   36.86   38.32   33.59   24.15 ....
0.00    21.60   38.33   46.62   45.16   35.16   19.89 ....

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2014-11-23
    • 2012-01-01
    • 2019-02-11
    相关资源
    最近更新 更多