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