Численные методы инвертирования интегральных преобразований?

11

Я пытаюсь численно инвертировать следующее интегральное преобразование:

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

Так что для данного мне нужно приблизить где:f ( x )F(y)f(x)

  • f(x) и - действительные и положительныеF(y) (это непрерывные распределения вероятностей)
  • x,y действительны и положительны (они величины)

У меня есть очень грязный и грубый метод для этого:

Я определяю и сплайн по ряду точек, значения расщепленных точек «угадываются» случайной выборкой, что дает прогнозируемое . Базовый генетический алгоритм, который я написал, минимизирует разницу между предсказанным и измеренным массивом . Затем я беру которому сходится алгоритм, в качестве ответа для обращения.F ( y ) F ( y ) f ( x )f(x)F(y)F(y)f(x)

Этот подход работает довольно хорошо для некоторых простых случаев, но он кажется мне грязным и не особенно надежным.

Кто-нибудь может дать мне руководство по лучшим способам решения этой проблемы?

Спасибо за ваше время и помощь!

[x-отправлено в компьютерных науках]

CBowman
источник

Ответы:

13

Довольно простым методом было бы выбрать базис в функциональном пространстве и преобразовать интегральное преобразование в матрицу. Тогда вы можете просто инвертировать матрицу.

Математически, вот как это работает: вам нужен некоторый набор ортонормированных базисных функций . (Вы можете обойтись без их нормализации, но это проще объяснить таким образом.) Ортонормальный означает, что внутренний продукт , гдеТ я , Т J= δ я JTi(x)Ti,Tj=δij

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

Здесь - некоторая весовая функция. Это и пределы и привязаны к вашему выбору . После того, как вы выберите, какой набор базовых функций использовать, вы можете жестко запрограммировать ограничения и весовые функции в вашей программе.a b T iW(x)abTi

Используя ортонормированность, вы можете выразить любую функцию, такую ​​как и , как линейные комбинации этих базовых функций:F ( y )f(x)F(y)

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

где коэффициенты рассчитываются как

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

Вы можете проверить, что эти выражения согласуются с определениями коэффициентов, экв. (2) и ортонормированность, ур. (1).

Теперь вычислите преобразование каждой из базовых функций; давайте назовем это .T~i(y)

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

е(х)Р(у)T~i(y) - это функция, и вы можете выразить ее как линейную комбинацию базисных функций, как мы это делали с и :f(x)F(y)

T~i(y)=kAikTk(y)

где матричные элементы определяются так же, как мы нашли и выше: c i C jAikciCj

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

На практике это довольно странный двойной интеграл, но вы должны сделать это только один раз (когда-либо) для каждой комбинации и . Вы можете делать интегралы численно, а затем жестко кодировать полученные значения в вашей программе. (Примечание: с умным выбором и , вы могли бы сделать это так, чтобы интеграл мог быть сделан символически. Будет ли это возможно, зависит от вашего преобразования. Вы можете сделать это с помощью Фурье преобразование, но я склонен думать, что это невозможно для преобразования, о котором вы спрашиваете здесь.)k T i ( x ) W ( x )ikTi(x)W(x)

В терминах матричных элементов и коэффициентов и соотношение между и сводится к линейной системе c i C j f ( x ) F ( y )AikciCjf(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)

Учитывая ортогональность базисных функций, вы можете выделить любой конкретный коэффициент , взяв внутреннее произведение обеих сторон с помощью : 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

Конечно, - просто фиктивный индекс, поэтому я вернусь к тому, чтобы называть его .Cj

Это просто задача линейной алгебры. является компонентом вектора, как и , а являются компонентами матрицы. Вы можете вычислить из функции, которую вы пытаетесь преобразовать, используя eq. (3), и вы знаете из единовременного вычисления, которое вы сделали для этого конкретного интегрального преобразования, уравнение (5), так что вы можете получить , выполнив умножение матриц (что очень хорошо умеют компьютеры), а затем восстановить функцию из тех, которые используют eq. (2).CjciAijciAijCjF(y)

И наоборот, чтобы выполнить обратное преобразование, вы начинаете с функции , вычисляете из используя eq. (4), и тогда вам нужно будет решить линейную системуF(y)Cj

Cj=iciAij

Это можно сделать, умножив обе стороны на обратную матрицу , но на практике существуют более эффективные способы сделать это. Используйте решатель линейной системы любой библиотеки линейной алгебры, которая у вас есть.A

Обратите внимание, что все, что я написал до сих пор, оставило пределы сумм по , и т. Д. Неопределенными На практике вам нужно будет выбрать некоторые ограничения, скажем, от до (вы выбираете ), так что любой вы можете столкнуться, может быть достаточно хорошо аппроксимирован линейной комбинацией , а также диапазон от до , так что любой может быть достаточно хорошо аппроксимирован линейной комбинацией . Вероятно, проще всего выбратьij1NNf(x)T1(x),,TN(x)1MF(y)T1(y),,TM(y)M=N, Здесь то, что означает «достаточно хорошо», зависит от вас. Как правило, чем больше вы сделаете и , тем лучше будет ваше приближение, но чем больше памяти (и времени) вам понадобится для расчета. Помните, что вам нужно вычислить коэффициентов , а для матрицы вам нужно рассчитать коэффициентов, от до .MNNciAM×NA11ANM

Для функций, определенных на конечном интервале, который может быть линейно изменен на , полиномы Чебышева являются обычным выбором для . В некотором смысле полиномы Чебышева дают наиболее точную аппроксимацию заданной функции, используя фиксированное число членов, что делает их особенно хорошо подходящими для такого рода приложений. Если вы можете усечь область ваших вероятностных распределений, вы можете использовать их. Они связаны с весом и пределами и . (Обратите внимание, что в форме, которую они часто задают, нормализация такова, чтоT i W ( x ) = 1[1,1]Ti =-1б=1Тя,ТJ=δяJπ/2я=J0Т0,Т0=πW(x)=11x2a=1b=1Ti,Tj=δijπ/2для и , поэтому вам, возможно, придется учитывать это в своем коде.)i=j0T0,T0=π

Дэвид З
источник