【问题标题】:Why does plotting this equation not generate the correct curve?为什么绘制这个方程不会产生正确的曲线?
【发布时间】:2018-09-13 14:05:35
【问题描述】:

目的是绘制以下方程:P*sin(x)/x + cos(x),对于 P = 1.6 和 x in [0, 5],忽略绿色填充区域,应该看起来有点像:

但是,从以下代码:

x = 0 : 0.01 : 5;     % ka/pi, where k-wavevector, a-lattice spacing.

P = 1.6;              % 2*m*U_0 / hbar^2.
rhs =  P * sinc(x*pi) + cos(x*pi);
rhs2 = P * ( sin(x*pi) / x*pi) + cos(x*pi);

plot(x, rhs, '--b', x, rhs2, 'b', x, -1*ones(size(x)), 'r', x, 1*ones(size(x)), 'r')
axis([0 5 -3 3])
xlabel('ka/pi')
legend('P*sinc(x) + cos(x)', '(2mU_0b)/(hbar^2) * sin(ka)/ka + cos(ka)', 'y = -1', 'y = 1')

我目前得到的是:

我在这里做错了什么?


我使用的是 Windows 10,Octave-4.2.1

【问题讨论】:

    标签: matlab octave trigonometry


    【解决方案1】:

    sinc 的 MATLAB 定义为 sinc(t) = sin(pi t)/(pi t),即在 rhs 定义中,您不得乘以 pi

    x = 0 : 0.01 : 5;     % ka/pi, where k-wavevector, a-lattice spacing.
    
    P = 1.6;              % 2*m*U_0 / hbar^2.
    rhs =  P * sinc(x)+ cos(x*pi);
    rhs2 = P * (sin(x*pi) / x*pi) + cos(x*pi);
    
    plot(x, rhs, 'b', x, rhs2, '--b', x, -1*ones(size(x)), 'r', x, 1*ones(size(x)), 'r')
    axis([0 5 -3 3])
    xlabel('ka/\pi')
    legend('P*sinc(x) + cos(x)', '(2mU_0b)/(hbar^2) * sin(ka)/ka + cos(ka)', 'y = -1', 'y = 1')
    

    还请注意,对于 t=0 sinc(t)=1,而您的 rhs2 具有 sin(x pi)/(x pi),对于 x=0,它返回 NaN,因此这两个信号存在差异,因为第二个信号是纯余弦。


    我错过了 OP 的 sinc 实现中的元素明智划分和缺少括号,请参阅 am304's answer 。请注意,即使使用元素智能除法和括号,您仍然会错过x=0 的要点,因为这将导致NaN

    【讨论】:

      【解决方案2】:

      你的代码有两个错误:

      • 正如 Adriaan 指出的那样,第一个问题是 sinc 函数的错误使用。
      • 第二个,是您在实现自己的sinc 版本时忘记了按元素划分吗?

      这是更正后的版本 - 请注意./

      x = 0 : 0.01 : 5;     % ka/pi, where k-wavevector, a-lattice spacing.
      
      P = 1.6;              % 2*m*U_0 / hbar^2.
      rhs =  P * sinc(x)+ cos(x*pi);
      rhs2 = P * (sin(x*pi) ./ (x*pi)) + cos(x*pi);
      
      plot(x, rhs, 'b', x, rhs2, '--b', x, -1*ones(size(x)), 'r', x, 1*ones(size(x)), 'r')
      axis([0 5 -3 3])
      xlabel('ka/pi')
      legend('P*sinc(x) + cos(x)', '(2mU_0b)/(hbar^2) * sin(ka)/ka + cos(ka)', 'y = -1', 'y = 1')
      

      结果图是:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-24
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        相关资源
        最近更新 更多