这个程序要如何理解?求指导

img

合成这个锯齿波1-2*t(0<=t<=T)/T;的前十位,如果把if mod (n,100)换了或者删了就不是锯齿波了,我现在有点不明白这个是什么作用,这一个函数好像也不需要判断奇数偶数

大玉米你好,这个if mod(n,100),意思很好理解:mod(n,100)是返回n被100整除的余数,那么由于n是从0~max_harmonics(也即0~100)循环取值的,所以就有

mod(0,100)值为0
mod(1,100)值为1
mod(2,100)值为2
……
mod(98,100)值为98
mod(99,100)值为99
mod(100,100)值为0

而if后面是条件,如果条件为非零的数就是真,条件为0就是假;所以当n=0和100时,条件为假,不执行if里面的语句,而1~99都是需要执行if里面的语句的!!
所以得到一个傅里叶级数近似的图。其实你的mod(n,100)的唯一作用就是把n=0n=100筛去(因为n等于0不能做除数,n=100被筛了很冤枉),因为你的max_harmonics取越大,最终就越趋近于三角波形解
所以你可以把max_harmonics改成1000或者10000试一试
直接:

t = linspace(0,1,1000);
s = zeros(size(t));
max_harmonics = 1000; % 我这里改成1000了,发现更加三角锯齿了
for n = 1:max_harmonics % 从1开始,不再需要mod了
    s = s + 1/(n*pi)*sin(2*n*pi*t);
end
plot(t,s)
axis([-0.1,1.1, -inf,inf])

效果:

img