Numeryczne metody odwracania transformat całkowych?

11

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

F(y)=0yexp[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]

CBowman
źródło

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,TjabW(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)0yexp[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)=0yexp[12(y2+x2)]I0(xy)iciTi(x)f(x)dx=ici0yexp[12(y2+x2)]I0(xy)Ti(x)dx=icikAikTk(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 :CT

(jCjTj),T=(icikAikTk),TabW(y)jCjTj(y)T(y)dy=abW(y)icijAikTk(y)T(y)dyjCjabW(y)Tj(y)T(y)dy=icikAikabW(y)Tk(y)T(y)dyjCjδj=icikAikδkC=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)=11x2a=1b=1Ti,Tj=δijπ/2i=j0T0,T0=π

David Z
źródło