Довольно простым методом было бы выбрать базис в функциональном пространстве и преобразовать интегральное преобразование в матрицу. Тогда вы можете просто инвертировать матрицу.
Математически, вот как это работает: вам нужен некоторый набор ортонормированных базисных функций . (Вы можете обойтись без их нормализации, но это проще объяснить таким образом.) Ортонормальный означает, что внутренний продукт , где⟨ Т я , Т J ⟩ = δ я JTя( х )⟨ Тя, ТJ⟩ = Δя ж
⟨ Тя, ТJ⟩ ≡ ∫бaW( х ) Тя( х ) ТJ( х )д х= δя ж(1)
Здесь - некоторая весовая функция. Это и пределы и привязаны к вашему выбору . После того, как вы выберите, какой набор базовых функций использовать, вы можете жестко запрограммировать ограничения и весовые функции в вашей программе.a b T iW(x)abTi
Используя ортонормированность, вы можете выразить любую функцию, такую как и , как линейные комбинации этих базовых функций:F ( y )f(x)F(y)
f(x)=∑iciTi(x)F(y)=∑jCjTj(y)(2)
где коэффициенты рассчитываются как
ciCj=⟨f,Ti⟩=∫baW(x)f(x)Ti(x)dx=⟨F,Tj⟩=∫baW(y)F(y)Tj(y)dy(3)(4)
Вы можете проверить, что эти выражения согласуются с определениями коэффициентов, экв. (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
Aik=⟨T~i,Tk⟩=∫baW(y)T~i(y)Tk(y)dy(5)
На практике это довольно странный двойной интеграл, но вы должны сделать это только один раз (когда-либо) для каждой комбинации и . Вы можете делать интегралы численно, а затем жестко кодировать полученные значения в вашей программе. (Примечание: с умным выбором и , вы могли бы сделать это так, чтобы интеграл мог быть сделан символически. Будет ли это возможно, зависит от вашего преобразования. Вы можете сделать это с помощью Фурье преобразование, но я склонен думать, что это невозможно для преобразования, о котором вы спрашиваете здесь.)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=∑ici∫∞0yexp[−12(y2+x2)]I0(xy)Ti(x)dx=∑ici∑kAikTk(y)
Учитывая ортогональность базисных функций, вы можете выделить любой конкретный коэффициент , взяв внутреннее произведение обеих сторон с помощью : T ℓCℓTℓ
⟨(∑jCjTj),Tℓ⟩∫baW(y)∑jCjTj(y)Tℓ(y)dy∑jCj∫baW(y)Tj(y)Tℓ(y)dy∑jCjδjℓCℓ=⟨(∑ici∑kAikTk),Tℓ⟩=∫baW(y)∑ici∑jAikTk(y)Tℓ(y)dy=∑ici∑kAik∫baW(y)Tk(y)Tℓ(y)dy=∑ici∑kAikδkℓ=∑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я=J≠0⟨Т0,Т0⟩=πW(x)=11−x2√a=−1b=1⟨Ti,Tj⟩=δijπ/2для и , поэтому вам, возможно, придется учитывать это в своем коде.)i=j≠0⟨T0,T0⟩=π