gpt4 book ai didi

matlab - 如何用求和函数替换trapz函数?

转载 作者:行者123 更新时间:2023-12-03 08:30:14 25 4
gpt4 key购买 nike

我有一个有效的代码,并且我正尝试从使用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)时, vector 中的最后一个值非零。有人可以解释为什么吗?我目前正在尝试找出如何填充整个矩阵,而不仅仅是最后一个值,但我不确定如何填充。

最佳答案

首先:您正在将循环概念与Matlab的 vector 能力混合在一起。开始删除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);

关于matlab - 如何用求和函数替换trapz函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com