超级大玉米 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日

悬赏问题

  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题