如何在 matlab 中绘制 "indefite-sum" 函数?

How do I plot an "indefite-sum" function in matlab?

我的函数只是一个从-inf到inf的简单求和:f(x) = sum(pi * exp(-x+2pi*j), j = -inf to in);

我试过这样做,但出现错误 "A numeric or double convertible argument is expected"

x = linspace(-7, 7, 1000);
h = 10; 
syms j; 
v_hat = symsum(pi * exp(x + 2*pi*j),-inf, inf); %v_hat is a function of x: v_hat(x)
plot(x, v_hat);

我看不出你的代码在编程方面有什么问题,但是有一个致命的数学缺陷——每个 x 的总和是无限的。请注意,它只是 exp(2*pi*j) 乘以 pi*exp(x) 的总和。当 j 为正时,值 exp(2*pi*j) 很大,您尝试添加无限多个...

当我将公式更改为实际收敛的级数时,代码有效,尽管需要很长时间。

x = linspace(-7, 7, 1000);
h = 10; 
syms j; 
v_hat = symsum(pi * exp(-abs(x+ 2*pi*j/h) ),-inf, inf);
plot(x, v_hat);

请注意,尽管使用了 1000 个数据点,但质量并不好。通过放弃符号和,您将更快地获得更好的质量 much。 abs(j)>100 的项在这里的贡献很小,所以放弃它们并在其余部分使用数字求和。

h = 10; 
x = linspace(-7,7,10000);
[X,j] = meshgrid(x, -100:100);
v_hat = sum(pi * exp(-abs(X+ 2*pi*j/h) ), 1);
plot(x, v_hat);

另外,认识到函数是周期性的,周期为 2*pi/h。所以你可以绘制 功能的一两个周期,想象一下其余的。

h = 10; 
x = linspace(-2*pi/h, 2*pi/h, 101);
syms j;
v_hat = symsum(pi * exp(-abs(x+ 2*pi*j/h) ),-inf, inf); 
plot(x, v_hat);