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

matlab - 为什么绘制这个方程不能生成正确的曲线?-LMLPHP

但是,从以下代码:

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')

我目前得到的是:

matlab - 为什么绘制这个方程不能生成正确的曲线?-LMLPHP

我在这里做错了什么?

我在 Windows 10 上,Octave-4.2.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')

matlab - 为什么绘制这个方程不能生成正确的曲线?-LMLPHP

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

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

关于matlab - 为什么绘制这个方程不能生成正确的曲线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52315501/

10-13 09:21