我有一个正常工作的代码,我正在尝试从trapz
函数切换到sum
函数。我很确定这会提高代码输出的准确性。
原始代码是:
W = -3:.1:3;
W_for_X = -30:30;
H = zeros(size(W));
H(23:37) = 4;
N = 4;
n = -30:30;
xn = zeros(size(n));
remB = rem(n,N)==0;
xn(remB) = cos(.1*pi*n(remB))-(4*sin(.2*pi*n(remB)));
w = 1;
for k = 1:length(W_for_X)
EXP = exp(-1i*w*W*W_for_X(k));
Xw(k)=trapz(W,xn.*EXP);
end
在以下尝试中,我没有更改代码中的任何内容,除了我在此处粘贴的内容。我正在尝试切换功能,但我无法弄清楚细节。我试图在sum函数中直接替换并为W
更改k
,但这不起作用。
for k = 1:length(W_for_X)
EXP = exp(-1i*w*W*W_for_X(k));
Xw(k)=sum(xn.*EXP,k);
end
此代码产生此错误:在作业A(I)= B中,B和I中的元素数必须相同。
在更好地了解sum
函数的语法后,我尝试这样做:
for k = 1:length(W_for_X)
EXP = exp(-1i*w*W*W_for_X(k));
Xw(k)=sum(xn.*EXP,L = 1..61);
end
产生了以下错误: Xw(k)= sum(xn。* EXP,L = 1..61);
错误:等号左侧的表达式不是作业的有效目标。
然后我尝试删除循环以查看是否有助于解决问题:
k = 1:length(W_for_X);
EXP = exp(-1i*w*W*W_for_X(k));
Xw(k)=sum(xn.*EXP, L = 1..61);
使用*
时出错内部矩阵维度必须一致。
我的语法错误,我该如何解决?
编辑/添加 - 1
正确进行求和的代码就是这个(代码的其余部分保持不变):
Xw = zeros(1,61);
for k = length(W);
EXP = exp(-1i*w.*W(k).*W_for_X);
Xw(k)=sum(xn.*EXP);
end
唯一的问题是当我disp (Xw)
时,只有向量中的最后一个值是非零。有人可以解释为什么会这样吗?我目前正在试图弄清楚如何填充整个矩阵,而不仅仅是最后一个值,但我不确定如何。
答案 0 :(得分:1)
首先:你将循环概念与Matlab的矢量能力混合在一起。开始删除 k = ... 的东西:
EXP = exp(-1i*w*W*W_for_X);
其次,我不知道是什么
L = 1..61
应该是指。我假设,一旦你解决了内部维度问题,这将导致另一个错误。这应该有效:
Xw=sum(xn.*EXP);
其中Xw将包含总和。
然后,您再次说明了一个积分(基于trapz函数),它将 W 视为您整合的网格。因此,我认为,你在寻找的是
Xw = W.*sum(xn.*EXP,1);
由于我没有看到任何复杂程序的原因,您可以立即检索总额
Xw_sum = sum(W.*xn.*EXP);