Méthodes numériques pour inverser les transformées intégrales?


11

J'essaie d'inverser numériquement la transformation intégrale suivante:

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

Donc, pour un j'ai besoin d'approximer où:F(y)f(x)

  • f(x) et sont réels et positifsF(y) (ce sont des distributions de probabilité continues)
  • x,y sont réels et positifs (ce sont des grandeurs)

J'ai une méthode très compliquée et brutale pour le faire à la minute:

Je définis et la spline sur une série de points, les valeurs des points splinés sont «devinées» par un échantillonnage aléatoire, ce qui donne un prédit . Un algorithme génétique de base que j'ai rédigé minimise la différence entre le tableau prévu et mesuré . Je prends ensuite le lequel l'algorithme converge comme réponse à l'inversion.f(x)F(y)F(y)f(x)

Cette approche fonctionne assez bien pour certains cas simples, mais elle me semble désordonnée et pas particulièrement robuste.

Quelqu'un peut-il me donner des conseils sur de meilleures façons de résoudre ce problème?

Merci pour votre temps et votre aide!

[x-posté sur computerscience]

Réponses:


13

Une méthode assez simple serait de choisir une base dans l'espace des fonctions et de convertir la transformation intégrale en matrice. Ensuite, vous pouvez simplement inverser la matrice.

Mathématiquement, voici comment cela fonctionne: vous avez besoin d'un ensemble de fonctions de base orthonormées . (Vous pouvez vous en sortir sans qu'ils soient normalisés aussi, mais il est plus facile d'expliquer de cette façon.) Orthonormal signifie que le produit intérieur , oùT i , T j= δ i jTi(x)Ti,Tj=δij

(1)Ti,TjabW(x)Ti(x)Tj(x)dx=δij

Ici est une fonction de poids. Cela et les limites et sont liés à votre choix de . Une fois que vous avez choisi l'ensemble de fonctions de base à utiliser, vous pouvez coder en dur les limites et la fonction de poids dans votre programme.a b T iW(x)abTi

En utilisant l'orthonormalité, vous pouvez exprimer n'importe quelle fonction, comme et , sous forme de combinaisons linéaires de ces fonctions de base:F ( y )f(x)F(y)

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

où les coefficients sont calculés comme

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

Vous pouvez vérifier que ces expressions sont cohérentes avec les définitions des coefficients, eq. (2), et l'orthonormalité, éq. (1).

Maintenant, calculez la transformation de chacune des fonctions de base; appelons-le .T~i(y)

T~i(y)0yexp[12(y2+x2)]I0(xy)Ti(x)dx

f ( x ) F ( y )T~i(y) est une fonction, et vous pouvez donc l'exprimer comme une combinaison linéaire des fonctions de base comme nous l'avons fait avec et :f(x)F(y)

T~i(y)=kAikTk(y)

où les éléments de matrice sont déterminés de la même manière que nous avons trouvé et ci-dessus: c i C jAikciCj

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

Dans la pratique, c'est une double intégrale plutôt épineuse, mais vous ne devez le faire qu'une fois (jamais) pour chaque combinaison de et . Vous pouvez faire les intégrales numériquement puis coder en dur les valeurs résultantes dans votre programme. (Note latérale: avec un choix intelligent de et , vous pourriez être en mesure de le faire pour que l'intégrale puisse être faite symboliquement. La possibilité de cela dépend de votre transformation. Vous pouvez le faire avec le Fourier transformer, mais je suis enclin à penser que ce n'est pas possible pour la transformation dont vous parlez ici.)kikTi(x)W(x)

En termes d'éléments de matrice et de coefficients et , la relation entre et réduit à un système linéaireAikciCjf(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)

Étant donné l'orthogonalité des fonctions de base, vous pouvez isoler n'importe quel coefficient particulier en prenant le produit interne des deux côtés avec :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

Bien sûr, n'est qu'un indice fictif, je vais donc revenir à l'appeler .Cj

Ce n'est qu'un problème d'algèbre linéaire. est un composant d'un vecteur, tout comme , et sont des composants d'une matrice. Vous pouvez calculer partir de la fonction que vous essayez de transformer à l'aide de l'égaliseur. (3), et vous connaissez partir du calcul ponctuel que vous avez fait pour cette transformée intégrale particulière, éq. (5), vous pouvez donc obtenir les en faisant une multiplication matricielle (sur laquelle les ordinateurs sont très bons), puis reconstruire la fonction partir de ceux qui utilisent eq. (2).CjciAijciAijCjF(y)

Inversement, pour faire la transformation inverse, vous commencez avec la fonction , calculez les s à partir de celle-ci en utilisant eq. (4), puis vous devrez résoudre le système linéaireF(y)Cj

Cj=iciAij

Cela peut être fait en multipliant les deux côtés par l'inverse de la matrice , mais en pratique, il existe des moyens plus efficaces de le faire. Utilisez le solveur de système linéaire de la bibliothèque d'algèbre linéaire que vous avez sous la main.A

Notez que tout ce que j'ai écrit jusqu'à présent a laissé les limites des sommes sur , , etc. non spécifiées. En pratique, vous devrez choisir certaines limites, disons à (vous choisissez ), de sorte que tout vous pourriez rencontrer puisse être suffisamment bien approximé par une combinaison linéaire de , et aussi une plage comme à telle que tout peut être suffisamment bien approximé par une combinaison linéaire de . Il est probablement plus facile de choisirj 1 Nij1NNf(x)T1(x),,TN(x)1MF(y)T1(y),,TM(y)M=N. Ici, ce que signifie "suffisamment bien" dépend de vous. Généralement, plus vous faites et , meilleure sera votre approximation, mais plus vous aurez besoin de mémoire (et de temps) pour effectuer le calcul. N'oubliez pas que vous devez calculer coefficients , et pour la matrice vous devez avoir coefficients calculés, de à .MNNciAM×NA11ANM

Pour les fonctions définies sur un intervalle fini pouvant être redimensionné linéairement à , les polynômes de Chebyshev sont un choix courant pour . Il existe un sens dans lequel les polynômes de Chebyshev produisent l'approximation la plus précise d'une fonction donnée en utilisant un nombre fixe de termes, ce qui les rend particulièrement bien adaptés à ce type d'application. Si vous pouvez tronquer le domaine de vos distributions de probabilités, vous pourrez peut-être les utiliser. Ils sont associés au poids et aux limites et . (Notez que sous la forme qui leur est souvent donnée, la normalisation est telle queT i[1,1]Ti a=-1b=1Ti,Tj=δijπ/2i=j0T0,T0=πW(x)=11x2a=1b=1Ti,Tj=δijπ/2pour et , vous devrez peut-être en tenir compte dans votre code.)i=j0T0,T0=π

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.