Автоматическое дифференцирование с помощью сферических гармонических преобразований
В этом примере выполняется поиск положительного значения в:
для некоторого , так что . Для этого мы используем производные данные:
using FastTransforms, LinearAlgebra
Меридиональная сетка (по модулю ):
N = 15
θ = (0.5:N-0.5)/N
0.03333333333333333:0.06666666666666667:0.9666666666666667
Продольная сетка (по модулю ):
M = 2*N-1
φ = (0:M-1)*2/M
0.0:0.06896551724137931:1.9310344827586206
Предварительно вычислим план сферической гармоники Фурье:
P = plan_sph2fourier(Float64, N)
FastTransforms Spherical harmonic--Fourier plan for 15×29-element array of Float64
И план анализа Фурье FFTW в :
PA = plan_sph_analysis(Float64, N, M)
FastTransforms plan for FFTW Fourier analysis on the sphere for 15×29-element array of Float64
Наш выбор и угловая параметризация :
k = [2/7, 3/7, 6/7]
r = (θ,φ) -> [sinpi(θ)*cospi(φ), sinpi(θ)*sinpi(φ), cospi(θ)]
#1 (generic function with 1 method)
Наше начальное предположение для :
λ = 1.0
1.0
Затем запускаем итерацию Ньютона и ждем:
for _ in 1:7
F = [sin(λ*(k⋅r(θ,φ))) for θ in θ, φ in φ]
Fλ = [(k⋅r(θ,φ))*cos(λ*(k⋅r(θ,φ))) for θ in θ, φ in φ]
U = P\(PA*F)
Uλ = P\(PA*Fλ)
global λ = λ - (norm(U)^2-1)/(2*sum(U.*Uλ))
println("λ: $(rpad(λ, 18)) and the 2-norm: $(rpad(norm(U), 18))")
end
λ: 0.5565017029393282 and the 2-norm: 1.8510924318185522
λ: 0.5031571262839712 and the 2-norm: 1.104184591487036
λ: 0.5010418434316171 and the 2-norm: 1.0040147091934828
λ: 0.5010383094266805 and the 2-norm: 1.0000066984258862
λ: 0.5010383094167955 and the 2-norm: 1.0000000000187361
λ: 0.5010383094167953 and the 2-norm: 1.0000000000000004
λ: 0.5010383094167954 and the 2-norm: 0.9999999999999999