作业帮 > 综合 > 作业

matlab 累积求和,求源程序

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/20 03:56:41
matlab 累积求和,求源程序

其中,

N=16,三角f=0.06,L=32
结果的图像为

求源程序
syms n
k=0:31;
x=sin(2*pi*0.135*n)+cos(2*pi*(0.135+0.06)*n);
y=x.*exp(i*(-2*pi*n*k/32));
a=symsum(y,n,0,15);
b=abs(a);
p=(b.^2)/16;
plot(k,p)
运行结果如下:

请问怎么改?这是我写的第一个matlab程序,从十二点一直忙到现在,第一次真正接触matlab,求指教
matlab 累积求和,求源程序
怀疑你给的公式有错,结果与你给的图像不一致.
 
经分析,我认为指数项的系数应该是π而不是2π.把取π和2π的图都画出来作为对比如下:

参考代码:
syms n
N = 16;
L = 32;
k = 0 : L-1;
x = sin(2*pi*0.135*n)+cos(2*pi*(0.135+0.06)*n);

subplot 211
a = @(k)symsum(x.*exp(i*(-2*pi*n*k/L)),n,0,N-1);
p = abs(a(k)).^2 / N;
stem(k,p,'fill')
xlim([0 31])
title('指数项为 e^{-j2\pink/L}')

subplot 212
a = @(k)symsum(x.*exp(i*(-pi*n*k/L)),n,0,N-1);
p = abs(a(k)).^2 / N;
stem(k,p,'fill')
xlim([0 31])
title('指数项为 e^{-j\pink/L}')
再问: 照抄您的代码如下:运行出错,出不来图:   请教如何修改!拜托(我用的是matlab7.0)
再答: 是不是你的MATLAB有问题?
7.0(R14)是一个BUG很多的版本,大约十年前我用过,有很多莫名奇妙的问题,所以后来不长时间就出了R14SP1、SP2、SP3,到SP3算是基本上可以用了。

既然是照抄的代码,代码本身是没什么问题的,也不需要做什么修改。看报错的信息说n未定义,可代码第一句很明确定义了符号变量n,而且假如未定义的话,第5行就应该出错。所以说这个错误很莫名其妙,我觉得可能是当时的版本对匿名函数支持不够好导致的(7.0是引入匿名函数概念的第一个版本,存在问题也不奇怪)。

我现在能给的建议:或者直接使用我给的结果(肯定没问题),或者换一个版本稍高的MATLAB。
再问: 把您的代码第8 9行改成:
a=symsum(x.*exp(i*(-2*pi*n*k/L)),n,0,N-1);
p=abs(eval(a)).^2/N;
就运行正确了,谢谢
再答: 看来就是早期匿名函数的机制还不完善造成的。
你的改动方式相当于对一个sym数组的每一项求符号和,是可行的。
我原本担心k和n都是数组会有问题(如果不是符号求和的方式,而是直接数值求和就会有问题),所以用了匿名函数。