【问题标题】:Non changing vector components within a For Loop [closed]For循环中不变的向量分量[关闭]
【发布时间】:2013-11-30 18:29:25
【问题描述】:

给定以下代码:

t = -5:.1:5;
w = pi;
x = zeros(101,1);
Xt = zeros(101,1);

for i = 1 : 101;
   x = exp((-3*t)+(-1i*w*t));
   Xt = trapz(t, x);
end

disp (length(x))
disp (length(Xt))
disp (Xt)

Xt 的值不会改变,这是个问题。 应该如何编码以便在 x 改变时改变 Xt?

旁注:

Xt(i) = trapz(t,x);

将向量从长度 101 减少到长度 1,因此不能使用。

【问题讨论】:

  • for 循环正在遍历变量 i = 1:101,但您永远不会在 exp 表达式中使用变量 i。相反,您使用的是虚数 -1i(也许这是故意的),但表达式永远不会改变,因为不依赖于循环变量 i。
  • 澄清:我正在尝试将-1i 用作虚数。应该改变的变量是t。我使用i 的原因是在引用集合中间的零值时发生错误。 Xt(abs(i)) 会很棒,但我还不知道如何避免出现在零处的错误。
  • 为了避免索引 i 和 j,通常使用 ii 和 jj 来代替。事实上,有些人总是只为他们的循环变量使用双字母名称,例如aa, bb, ii, jj, ..

标签: matlab for-loop vector indexing


【解决方案1】:

我不确定这是否是您想要的。无论如何,在处理虚数时,最好不要将 i 和 j 用作公共变量,以避免混淆(IMO)

xt = zeros(101,1);
x = exp((-3.*t)+(-1i*w.*t));

for k=2:101
    xt(k)=trapz(t(1:k),x(1:k));
end

【讨论】:

  • 效果很好,你能解释一下为什么 k 从 2 开始吗?
  • 这是因为我们在这里对定义在有限区间或有限点数上的函数进行数值积分。考虑一条由 3 个点定义的曲线 - f0,f1,f2 在时间 t0,t1,t2。当我们进行数值积分时,曲线下的面积由两个段(t0,f0 和 t1,f1)和(t1,f1 和 t2,f2)下的 2 个小区域离散定义。类似地,对于微分,它是 2 个段(t0,f0 和 t1,f1)和(t1,f1 和 t2,f2)之间的两个斜率。无论哪种方式,我们都失去了一分,因为积分和微分现在理想地定义为 (t0+t1)/2 和 (t1+t2)/2。
  • 所以如果网格步长 (dt) 很小,人们通常会假设第一个点为零(我已经这样做了)。
  • 或者,这是真实的 - 对于 k=2:101 xt(k)=xt(k-1) + 0.5*dt*(x(k)+x(k-1) ); end % 我认为这是实际的梯形规则
猜你喜欢
  • 2015-07-18
  • 2021-09-10
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多