Numeryczne metody odwracania transformat całkowych?


11

Próbuję odwrócić liczbowo następującą transformację całkowitą:

F(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)f(x)dx

Więc dla danego F(y) muszę aproksymować f(x) gdzie:

  • f(x) iF(y) są rzeczywiste i dodatnie(są to ciągłe rozkłady prawdopodobieństwa)
  • x,y są rzeczywiste i dodatnie(są wielkościami)

W tej chwili mam bardzo niechlujną i brutalną metodę:

Definiuję f(x) i splajn na szeregu punktów, wartości punktów splajnu są „zgadywane” przez losowe próbkowanie, co daje przewidywaną F(y) . Podstawowy algorytm genetyczny, który napisałem, minimalizuje różnicę między przewidywaną a zmierzoną tablicą F(y) . Następnie biorę f(x) którego algorytm zbiega się, jako moją odpowiedź na inwersję.

Podejście to działa dość dobrze w niektórych prostych przypadkach, ale wydaje mi się, że jest nieuporządkowane i niezbyt solidne.

Czy ktoś może udzielić mi wskazówek na temat lepszych sposobów rozwiązania tego problemu?

Dzięki za poświęcony czas i pomoc!

[opublikowano na komputery stacjonarne]

Odpowiedzi:


13

Dość prostą metodą byłoby wybranie podstawy w przestrzeni funkcji i przekształcenie transformacji całkowej w macierz. Następnie możesz po prostu odwrócić macierz.

Matematycznie oto, jak to działa: potrzebujesz zestawu ortonormalnych funkcji bazowych . (Można uciec bez nich są znormalizowane też, ale łatwiej jest wytłumaczyć w ten sposób.) Oznacza, że produkt ortonormalne wewnętrzna ⟨ T I , T j ⟩ = δ I j , gdzieTi(x)⟨Ti,Tj⟩=δij

(1)⟨Ti,Tj⟩≡∫abW(x)Ti(x)Tj(x)dx=δij

Tutaj jest jakąś funkcją wagi. To i limity A i B są przywiązane do wyboru T í . Po wybraniu zestawu podstawowych funkcji, które chcesz użyć, możesz na stałe zakodować ograniczenia i funkcję wagi w swoim programie.W(x)abTi

Korzystając z ortonormalności, możesz wyrazić dowolną funkcję, taką jak i F ( y ) , jako liniowe kombinacje tych funkcji podstawowych:f(x)F(y)

(2)f(x)=∑iciTi(x)F(y)=∑jCjTj(y)

gdzie współczynniki są obliczane jako

(3)ci=⟨f,Ti⟩=∫abW(x)f(x)Ti(x)dx(4)Cj=⟨F,Tj⟩=∫abW(y)F(y)Tj(y)dy

Możesz sprawdzić, czy te wyrażenia są zgodne z definicjami współczynników, np. (2) i ortonormalność, równ. (1).

Teraz obliczyć transformację każdej z funkcji podstawowych; nazwijmy to .T~i(y)

T~i(y)≡∫0∞yexp⁡[−12(y2+x2)]I0(xy)Ti(x)dx

jest funkcją, więc możesz wyrazić ją jako liniową kombinację funkcji podstawowych, tak jak to zrobiliśmy zf(x)iF(y):T~i(y)f(x)F(y)

T~i(y)=∑kAikTk(y)

gdzie elementy macierzy i K są określane w ten sam sposób okazało c I a C j powyżej:AikciCj

(5)Aik=⟨T~i,Tk⟩=∫abW(y)T~i(y)Tk(y)dy

W praktyce jest to dość obrzydliwa podwójna całka, ale musisz to zrobić tylko raz (zawsze) dla każdej kombinacji i k . Możesz wykonać całki numerycznie, a następnie na stałe zapisać wynikowe wartości w swoim programie. (Uwaga dodatkowa: Mądry wybór T i ( x ) i W ( x ) może sprawić, że całka może być wykonana symbolicznie. To, czy jest to możliwe, zależy od transformacji. Możesz to zrobić za pomocą Transformacja Fouriera, ale jestem skłonny sądzić, że transformacja, o którą tutaj pytasz, nie jest możliwa.)ikTi(x)W(x)

Jeśli chodzi o elementy macierzy oraz współczynniki c i i C j , relacja między f ( x ) i F ( y ) sprowadza się do układu liniowegoAikciCjf(x)F(y)

∑jCjTj(y)⏞F(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)∑iciTi(x)⏞f(x)dx=∑ici∫0∞yexp⁡[−12(y2+x2)]I0(xy)Ti(x)dx=∑ici∑kAikTk(y)

Biorąc pod uwagę ortogonalność funkcji bazowych, można wyodrębnić dowolny konkretny współczynnik , przyjmując iloczyn wewnętrzny obu stron za pomocą T ℓ :CℓTℓ

⟨(∑jCjTj),Tℓ⟩=⟨(∑ici∑kAikTk),Tℓ⟩∫abW(y)∑jCjTj(y)Tℓ(y)dy=∫abW(y)∑ici∑jAikTk(y)Tℓ(y)dy∑jCj∫abW(y)Tj(y)Tℓ(y)dy=∑ici∑kAik∫abW(y)Tk(y)Tℓ(y)dy∑jCjδjℓ=∑ici∑kAikδkℓCℓ=∑iciAiℓ

Oczywiście to tylko fikcyjny indeks, więc wrócę do nazywania go C j .ℓCj

To tylko problem algebry liniowej. jest składową wektora, jak to jest C I i i J są składnikami matrycy. Możesz obliczyć c i na podstawie funkcji, którą próbujesz przekształcić za pomocą eq. (3), a znasz A i j z jednorazowego obliczenia wykonanego dla tej konkretnej transformacji całkowej, równ. (5), aby uzyskać C js , wykonując mnożenie macierzy (w których komputery są bardzo dobre), a następnie zrekonstruuj funkcję F ( y ) z tych, które używają eq. (2).CjciAijciAijCjF(y)

I odwrotnie, aby wykonać odwrotną transformację, zaczynasz od funkcji , oblicz z niej C js za pomocą eq. (4), a następnie musisz rozwiązać układ liniowyF(y)Cj

Cj=∑iciAij

Można tego dokonać mnożąc obie strony przez odwrotność macierzy , ale w praktyce istnieją bardziej wydajne sposoby na to. Użyj solvera systemu liniowego dowolnej biblioteki algebry liniowej, którą masz pod ręką.A

ij1NNf(x)T1(x),…,TN(x)1MF(y)T1(y),…,TM(y)M=NMNNciAM×NA11ANM

[−1,1]TiW(x)=11−x2a=−1b=1⟨Ti,Tj⟩=δijπ/2i=j≠0⟨T0,T0⟩=π

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.