在循环期间访问矩阵时的奇怪行为

时间:2017-04-30 01:55:56

标签: matlab

我想将一些代码转换为循环,但结果是正确的。

这是原始代码。

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

我怀疑在我创建一个新阵列时索引到阵列会引起问题,但我并不完全确定。

调试此混乱的任何提示都会很棒。

1 个答案:

答案 0 :(得分:2)

你写了a = [a; a(n-1) + f(n) * sin((2*n-1) * x)];a(n-1)只从一行中取一个值。因此,此修复程序正在将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 ....