Почему построение этого уравнения не дает правильную кривую? - PullRequest
0 голосов
/ 13 сентября 2018

Намерение состоит в том, чтобы построить следующее уравнение: P * sin (x) / x + cos (x), для P = 1.6 и x в [0, 5], которое, игнорируя заполненные зеленым цветом области, должно выглядеть что-то вроде:

enter image description here

Однако из следующего кода:

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

что я сейчас получаю:

enter image description here

Что я здесь не так делаю?


Я на Windows 10, Octave-4.2.1

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

В вашем коде есть две ошибки:

  • первая, как указал Адриан, неверное использование функции 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')

и получившийся результатУчасток:

enter image description here

0 голосов
/ 13 сентября 2018

Определение 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')

enter image description here

Также обратите внимание, что для t=0 sinc(t)=1, тогда как у вашего rhs2 есть sin(x pi)/(x pi), что для x=0 возвращает NaN, следовательно, разница в двух сигналах, поскольку второй является чистым косинусом.


Я пропустил поэлементное деление и отсутствие скобок в реализации sinc ОП, см. ответ am304 . Обратите внимание, что даже при использовании поэлементного деления и скобок вы все равно пропустите точку на x=0, поскольку это приведет к NaN.

...