Сначала я скептически считал, что интеграция по функции Бесселя приведет к конечным результатам. Mathematica/Wofram Alpha однако показал, что результат конечен, но это not for the faint of heart.
Однако, тогда я указал на this site где объясняется, как сделать это правильно, и что значение интеграла должно быть 1.
Я экспериментировал немного, чтобы проверить правильность своих утверждений:
F = @(z) arrayfun(@(y) quadgk(@(x)besselj(0,x), 0, y), z);
z = 10:100:1e4;
plot(z, F(z))
который дал:
так ясно, интеграл действительно кажется сходится к 1. Позор на Альфах Вольфрама!
(Обратите внимание, что это своего рода вводящий в заблуждение сюжет, попробуйте сделать это с помощью z = 10:1e4;
, и вы поймете, почему. Но, ну, в любом случае, принцип все равно).
Эта цифра также показывает, какова проблема, с которой вы сталкиваетесь в Matlab; значение интеграла как затухающее колебание около 1 для увеличения x
. Проблема в том, что увлажнение очень слабое - как вы можете видеть, мне нужно было пройти весь путь до 10,000
, чтобы произвести этот график, тогда как амплитуда колебаний уменьшилась только на 0,5.
Когда вы пытаетесь сделать несобственный интеграл от возни с установкой «MaxIntervalCount», вы получите это:
>> quadgk(@(x)besselj(0,x), 0, inf, 'maxintervalcount', 1e4)
Warning: Reached the limit on the maximum number of intervals in use.
Approximate bound on error is 1.2e+009. The integral may not exist, or
it may be difficult to approximate numerically.
Increase MaxIntervalCount to 10396 to enable QUADGK to continue for
another iteration.
> In quadgk>vadapt at 317
In quadgk at 216
Это не имеет значения, как высоко вы установите MaxIntervalCount
; вы будете сталкиваться с этой ошибкой. Подобные вещи также случаются при использовании quad
, quadl
или аналогичных (эти функции R2012 integral
).
Как показано в этом предупреждении и графике, интеграл просто не подходит для точного приближения любым квадратурным методом, реализованным в стандартном MATLAB (по крайней мере, я знаю).
Я считаю, что правильный аналитический вывод, как это делается на физическом форуме, действительно является единственным способом получить результат без необходимости прибегать к специализированным квадратурным методам.
HTTP : //www.physicsforums.com/showthread.php? t = 570379 похоже, что это должно быть 1:/см. сообщение # 9 – Dan
@ Dan: [C heck mathematicas answer] (http://integrals.wolfram.com/index.jsp?expr=BesselJ%5B0%2C+x%5D&random=false); это не похоже на «1» для меня :) (или хорошо, «2», чем, так как это неправильно, но ... то же самое) –
Хммм, не очень хорошо загрузился на моей стороне. У этого есть интеграл от 1: http://www.wolframalpha.com/input/?i=integrate+first+bessel+function+from+0+to+infinity, но он похож на ваше отражение. Может быть, OP интегрирует неправильную функцию бесселя? но это не похоже на результат, на котором 'inf' заменяется на' 1000'. Интересно, начнет ли он сходиться, если вместо '1000' будет' 1000000'. Теперь у меня нет доступа к Matlab для проверки. – Dan