如何用sum函数替换trapz函数?

时间:2013-12-02 21:03:51

标签: matlab function syntax sum syntax-error

我有一个正常工作的代码,我正在尝试从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)时,只有向量中的最后一个值是非零。有人可以解释为什么会这样吗?我目前正在试图弄清楚如何填充整个矩阵,而不仅仅是最后一个值,但我不确定如何。

1 个答案:

答案 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);