Matlab 如何用求和函数替换trapz函数?

Matlab 如何用求和函数替换trapz函数?,matlab,function,syntax,sum,syntax-error,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

我有一个工作代码,我正在尝试从使用
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)=和(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

正确求和的代码如下(其余代码保持不变):


唯一的问题是,当I
disp(Xw)
时,向量中只有最后一个值是非零的。有人能解释一下为什么会这样吗?我目前正试图找出如何填充整个矩阵,而不仅仅是最后一个值,但我不确定如何填充。

首先:您将循环概念与Matlab的向量功能混合在一起。开始删除k=。。。材料:

第二,我不知道是什么

L = 1..61
应该是指。我想,一旦你解决了内部尺寸问题,这将导致另一个错误。这应该起作用:

Xw=sum(xn.*EXP);
其中Xw将包含总和

同样,您之前已经说明了一个积分(基于trapz函数),该积分将W视为沿其积分的网格。因此,我想,你要找的是

Xw = W.*sum(xn.*EXP,1);
由于我看不出有任何理由需要如此复杂的过程,您可以通过

Xw_sum = sum(W.*xn.*EXP);

我之所以使用
L
,是因为似乎在
sum(函数,I=a..b)
中暗示了一个由两部分组成的表达式,我觉得这是不正确的。由于
Xw
导致的错误正在滚雪球,因此
Xw\u和
也不起作用。同样在使用简化代码
Xw=sum(xn.*EXP)之后我遇到了以下错误:使用*内部矩阵维数的错误必须一致。我不知道求和(函数,I=a..b)的来源,但我在官方的Matlab文档中没有看到任何结果。我假设W、xn和EXP的内部矩阵维数(它们应该是一样的!)。。如果不是这种情况,请检查使用size()命令(例如,size(W)、size(xn)、size(EXP))导致问题的原因-是否为所有这些命令生成相同的输出?是否正在查看?这是MuPAD的
sum
函数的文档–请参见页面顶部。除非你在做符号计算,否则你不想使用它。如果你想在Matlab中使用它,你需要特别地调用它。@horchler这正是我所看到的。我没有意识到它与
sum
不同。虽然在上次编辑时我没有尝试这样编码。也许:
对于k=1:length(W)
?@horchler这是正确的。
Xw = W.*sum(xn.*EXP,1);
Xw_sum = sum(W.*xn.*EXP);