Числове оцінювання сильно коливального інтеграла


11

У цьому вдосконаленому курсі із застосування складної теорії функцій в один момент вправляють високо коливальний інтеграл

Я(λ)=-cos(λcosх)гріхххгх

має бути наближеним для великих значень використовуючи метод точки сідла в складній площині.λ

Зважаючи на сильно коливальний характер, цей інтеграл дуже важко оцінити, використовуючи більшість інших методів. Це два фрагменти графіка інтеграду для в різних масштабах:λ=10

cos (10 cos (x)) sin (x) / x

Асимптотичне наближення провідного порядку

Я1(λ)=cos(λ-14π)2πλ

і подальше (набагато менше) уточнення додає цей термін

Я2(λ)=18гріх(λ-14π)2πλ3

Графік наближених значень як функції виглядає так:λ

I (лямбда) бл

Тепер виникає моє запитання: щоб візуально побачити, наскільки гарне наближення, я хотів би порівняти його з "реальним значенням" інтеграла, а точніше з хорошим наближенням до того ж інтегралу за допомогою незалежного алгоритму. Через невелику корекцію субелінгу, я б очікував, що це дійсно близько.

Я намагався оцінити інтеграл для деяких використовуючи інші алгоритми, але з дуже невеликим успіхом: Mathematica і Matlab, використовуючи цифровий інтегратор за замовчуванням, не вдається створити значуще значення (і повідомити про це явно), mpmath, використовуючи обидва подвійні експоненціальні Заміна та метод Гаусса-Леандра дає дуже галасливі результати, хоча він має незначну тенденцію коливатися навколо значень, що дає метод сідлових точок, як показує цей графік:λтан(гріх)

mpmath прибл

Нарешті, я спробував свою удачу з інтегратором Монте-Карло, використовуючи зразок важливості, який я реалізував, але мені також не вдалося отримати стабільних результатів.

Хтось має уявлення про те, як цей інтеграл можна незалежно оцінити для будь-якого фіксованого значення або близько того?λ>1


Чи функція рівна?
nicoguaro

Так, це навіть
doetoe

Ви намагалися перетворити свій інтеграл в ODE?
nicoguaro

1
Ні, диференціювання wrt а потім розв'язати диференціальне рівняння чисельно. х
nicoguaro

1
Здається, ваш перший сюжет демонструє іншу функцію, ніж ваш інтегрант. А саме, здається, замінили на λ x . Тобто сюжет функціонує x ( cos ( λ x cos x ) sinc x )λλхх(cos(λхcosх)sincх)
Руслан

Відповіді:


12

Використовуйте теорему Планчереля для оцінки цього інтеграла.

Основна ідея полягає у тому, що для двох функцій f,г ,

Я=-f(х)г(х)гх=-Ж(к)Г(к)гк

де Ж,Г - перетворення Фур'є у f,г . Ваші функції мають відносно невелику підтримку в спектральній області. Тут гріхх/хпрямої(к) і cos(λcosх) повинні мати аналітичне перетворення Фур'є (або ряд), як розширення Якобі-Анже . Ви можете обрізати нескінченний ряд приблизно за λ за рахунок суперекспоненціального розпаду функції Бесселя |Jн(х)|для н>|х|. Сподіваюсь, це допомагає.

Редагувати : Насправді вам слід використовувати представлення серії Фур'є замість перетворень. Шлях перетворення призводить до отримання асимптотичного представлення, яке ви вже маєте (виявляється, це просто πJ0(λ) ). Викладена вище теорема Планчерела також працює для рядів Фур'є з областю інтеграції [0,2π] на останньому інтегралі.


Дякую, це дуже гарна ідея!
doetoe

7

Ключовим моментом для оцінки коливальних інтегралів є урізання інтегралу в потрібній точці. Для цього прикладу потрібно вибрати верхню межу форми

πN+π2
Перш ніж пояснити, чому це має працювати, дозвольте мені спочатку показати, що це насправді дає хороші результати.

Асимптотика

Неважко здогадатися, що асимптотичний ряд має вигляд

Я(λ)2πλ[cos(λ-π4)+c1гріх(λ-π4)λ+c2cos(λ-π4)λ2+c3гріх(λ-π4)λ3+]
c1=18

int := NIntegrate[Cos[l*Cos[x]]*Sinc[x], {x, 0, 20.5*Pi}]; 
Plot[{l*(Sqrt[2*l/Pi]*int - Cos[l-Pi/4]), Sin[l-Pi/4]/8}, {l, Pi/4, 20}]

Як результат ви отримуєте досить приємний синус, який збігається з тим, який ви отримали вище.

18

Якщо ви хочете знайти наступні коефіцієнти, трохи більш досконалий фрагмент коду, якщо це потрібно. Ідея коду, наведеного нижче, полягає у тому, щоб взяти декілька високих верхніх граничних значень та "оцінити" їх результати.

J[l_?NumericQ] := Block[{n=500},
  f[k_] := NIntegrate[Cos[l*Cos[x]]*Sinc[x], {x,0,(n+k)*Pi+Pi/2},
  Method->{"DoubleExponential"}, AccuracyGoal->14, MaxRecursion->100];
  1/2*((f[0]+f[1])/2+(f[1]+f[2])/2)
]
t = Table[{l, l^2*(Sqrt[2*l/Pi]*J[l] - Cos[l-Pi/4] - 1/8*Sin[l-Pi/4]/l)}, 
    {l, 4*Pi+Pi/4, 12*Pi+Pi/4, Pi/36}];
Fit[t, Table[Cos[l-Pi/4+Pi/2*n]/l^n, {n, 0, 10}], l]

c2=-9128,c3=-751024 рік,c4=367532768,

Пояснення

Простий приклад

S(х)=0хгріх(у)угу.
S()=π2

синус

S(х)

SN=н=1N(-1)нн.
SSN+12(-1)N+1N+1.
S(х)0πN+π2гріхххгх
макс|S'(х)|

Твоя проблема

Ях0(λ)=20х0cos(λcos(х))sinc(х)гх
х0=πN+π2λ=12π

tab = Table[{x0, 2*NIntegrate[Cos[12*Pi*Cos[x]]*Sinc[x], {x, 0, x0}, 
     Method->{"DoubleExponential"}, AccuracyGoal->12, MaxRecursion->100]},
    {x0, 10*Pi+Pi/2, 30*Pi+Pi/2, Pi}];
tab1 = Table[(tab[[i]] + tab[[i+1]])/2, {i,1,Length[tab]-1}];
ListPlot[{tab, tab1}]

відповідно

SN'=12(SN+SN+1)
SN'


Приємно! Чи є викладачі курсу вашими реальними професорами? Їхній курс є фантастичним, хоча дуже жорстким і швидким темпом
doetoe

@doetoe так, я студент Костянтина. Він поділився зі мною посиланням на ваше запитання.
Девід Сайкін

6

Тут працює метод Оура для синусових інтегралів Фур'є, див.

Оура, Такуя та Масатаке Морі, міцна подвійна експоненціальна формула інтегралів типу Фур'є. Журнал обчислювальної та прикладної математики 112.1-2 (1999): 229-241.

Я написав реалізацію цього алгоритму, але ніколи не вкладав у роботу, щоб його швидко (як, скажімо, кешування вузлів / ваг), але, тим не менш, я отримую стійкі результати у всьому, що перевищує точну точність:

float     = 0.0154244
double    = 0.943661538060268
long dbl  = 0.943661538066058702
quad      = 0.943661538066060288748574485677942
oct       = 0.943661538066060288748574485680878906503533004997613278231689169604876
asymptotic= 0.944029734

Ось код:

#include <iostream>
#include <boost/math/quadrature/ooura_fourier_integrals.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/multiprecision/float128.hpp>
#include <boost/multiprecision/cpp_bin_float.hpp>

template<class Real>
Real asymptotic(Real lambda) {
    using std::sin;
    using std::cos;
    using boost::math::constants::pi;
    Real I1 = cos(lambda - pi<Real>()/4)*sqrt(2*pi<Real>()/lambda);
    Real I2 = sin(lambda - pi<Real>()/4)*sqrt(2*pi<Real>()/(lambda*lambda*lambda))/8;
    return I1 + I2;
}

template<class Real>
Real osc(Real lambda) {
    using std::cos;
    using boost::math::quadrature::ooura_fourier_sin;
    auto f = [&lambda](Real x)->Real { return cos(lambda*cos(x))/x; };
    Real omega = 1;
    Real Is = ooura_fourier_sin<decltype(f), Real>(f, omega);
    return 2*Is;
}

template<class Real>
void print(Real val) {
   std::cout << std::defaultfloat;
   std::cout << std::setprecision(std::numeric_limits<Real>::digits10);
   std::cout <<  val <<  " = " << std::hexfloat << val;
}

int main() {
    using boost::multiprecision::float128;
    float128  s = 7;
    std::cout << "Asymptotic = " << std::setprecision(std::numeric_limits<float128>::digits10) << asymptotic(s) << "\n";
    std::cout << "float precision = ";
    print(osc(7.0f));
    std::cout << "\n";
    std::cout << "double precision= ";
    print(osc(7.0));
    std::cout << "\n";
    std::cout << "long double     = ";
    print(osc(7.0L));
    std::cout << "\n";
    print(osc(s));

    print(osc(boost::multiprecision::cpp_bin_float_oct(7)));
    std::cout << "\n";
}

λ0введіть тут опис зображення


Дякую, це справді приємно! Я ще не змусив його працювати, моя інсталяція підвищення не сумісна, але зараз я завантажую останню версію.
doetoe

Просто для впевненості: у 23 у вас є cos (лямбда * cos (x)) / x, без коефіцієнта sin (x) від інтеграду. Чи припускає цей ooura_fourier_sin цей чинник sin (x) для помноження переданого йому інтегранта?
doetoe

Я працював. Схоже, це лише всі заголовки, тому мені навіть не довелося встановлювати або компілювати (крім виконуваного файлу). Я сподіваюся, що він включиться до підвищення!
doetoe

гріх(х)

@doetoe: Він об'єднаний у Boost 1,71. API дещо відрізняється, ніж дає ця відповідь.
користувач14717
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.