Zie*_*ezi 4 matlab trigonometry octave
目的是绘制以下等式:P*sin(x)/ x + cos(x),对于P = 1.6和x在[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')
Run Code Online (Sandbox Code Playgroud)
我目前得到的是:
我在这做错了什么?
我在Windows 10,Octave-4.2.1上
MATLAB的定义sinc是sinc(t) = sin(pi t)/(pi t),即你不能pi在rhs定义中乘以:
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')
Run Code Online (Sandbox Code Playgroud)
还要注意的是对t=0 sinc(t)=1的,而你rhs2有sin(x pi)/(x pi),这对于x=0回报NaN,因此作为第二个在两个信号的差异,是一个纯粹的余弦值.
在OP的sinc实现中,我错过了元素明智的划分和缺少括号,请参阅am304的答案.请注意,即使使用元素明智的除法和括号,您仍然会忽略这一点x=0,因为这会导致NaN.
您的代码中有两个错误:
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')
Run Code Online (Sandbox Code Playgroud)
结果图是: