## Copyright 2021-2023 Ian Jauslin ## ## Licensed under the Apache License, Version 2.0 (the "License"); ## you may not use this file except in compliance with the License. ## You may obtain a copy of the License at ## ## http://www.apache.org/licenses/LICENSE-2.0 ## ## Unless required by applicable law or agreed to in writing, software ## distributed under the License is distributed on an "AS IS" BASIS, ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ## See the License for the specific language governing permissions and ## limitations under the License. # approximate \int_a^b f using Gauss-Legendre quadratures @everywhere function integrate_legendre( f::Function, a::Float64, b::Float64, weights::Tuple{Array{Float64,1},Array{Float64,1}} ) out=0 for i in 1:length(weights[1]) out+=(b-a)/2*weights[2][i]*f((b-a)/2*weights[1][i]+(b+a)/2) end return out end # \int f*g where g is sampled at the Legendre nodes @everywhere function integrate_legendre_sampled( f::Function, g::Array{Float64,1}, a::Float64, b::Float64, weights::Tuple{Array{Float64,1},Array{Float64,1}} ) out=0 for i in 1:length(weights[1]) out+=(b-a)/2*weights[2][i]*f((b-a)/2*weights[1][i]+(b+a)/2)*g[i] end return out end # approximate \int_a^b f/sqrt((b-x)(x-a)) using Gauss-Chebyshev quadratures @everywhere function integrate_chebyshev( f::Function, a::Float64, b::Float64, N::Int64 ) out=0 for i in 1:N out=out+pi/N*f((b-a)/2*cos((2*i-1)/(2*N)*pi)+(b+a)/2) end return out end # approximate \int_0^\infty dr f(r)*exp(-a*r) using Gauss-Chebyshev quadratures @everywhere function integrate_laguerre( f::Function, a::Float64, weights_gL::Tuple{Array{Float64,1},Array{Float64,1}} ) out=0. for i in 1:length(weights_gL[1]) out+=1/a*f(weights_gL[1][i]/a)*weights_gL[2][i] end return out end # Hann window @everywhere function hann( x::Float64, L::Float64 ) if abs(x)