为什么绘制这个方程式不能生成正确的曲线?
Why does plotting this equation not generate the correct curve?
目的是绘制以下等式:P*sin(x)/x + cos(x),对于 P = 1.6 和 [0, 5] 中的 x,忽略绿色填充区域,应该看起来像:
但是,从下面的代码来看:
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
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
returns NaN
,因此两个信号的差异,因为第二个是纯余弦。
我在 OP 的 sinc
实现中错过了元素明智的划分和缺少括号,请参阅 。请注意,即使使用元素明智的除法和括号,您仍然会错过 x=0
处的点,因为这将导致 NaN
.
你的代码有两个错误:
- 第一个,正如 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')
结果图是:
目的是绘制以下等式:P*sin(x)/x + cos(x),对于 P = 1.6 和 [0, 5] 中的 x,忽略绿色填充区域,应该看起来像:
但是,从下面的代码来看:
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
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
returns NaN
,因此两个信号的差异,因为第二个是纯余弦。
我在 OP 的 sinc
实现中错过了元素明智的划分和缺少括号,请参阅 x=0
处的点,因为这将导致 NaN
.
你的代码有两个错误:
- 第一个,正如 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')
结果图是: