超级大玉米 2021-11-29 19:12 采纳率: 73.7%
浏览 21
已结题

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

img

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

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-11-29 20:44
    关注

    大玉米你好,这个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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)