Saya ingin mengintegrasikan secara numerik dengan boost::math::quadrature::trapezoidal(g, a, b, 1e-6);
Di sini saya mengintegrasikan fungsi g(x). Masalahnya adalah saya harus melakukan integral ganda. Selain itu, saya memiliki 4 variabel dalam fungsi yang ingin saya integrasikan. 2 di antaranya saya lewati saat mengintegrasikan (m,n) dan 2 lainnya adalah variabel integrasi (r,z). Ini adalah integral yang ingin saya hitung:
$$ \int_0^b\int_0^af(r,z)\sin{(\frac{n\pi}{a}z)}J_0(\frac{\alpha_{ 0,m}}{b}r)dzdr $$
Saya melihat contoh ini Melakukan integrasi numerik 2d dengan Boost Cpp dan memperhatikan bahwa dia menggunakan fungsi lambda untuk membagi integran utama menjadi 2. sejauh ini saya telah berhasil
double integrate(int m, int n)
{
auto f1 = [](double r, double z, int m, int n) { return integrand(r,z,m,n); };
auto f = [&](double r, m) {
auto g = [&](double z, n) {
return f1(r, z);
};
//return gauss_kronrod<double, 61>::integrate(g, 0, a, 5);
return boost::math::quadrature::trapezoidal(g, 0, a, 1e-6);
};
double error;
//double Q = gauss_kronrod<double, 15>::integrate(f, 0, b, 5, 1e-9, &error);
double Q = boost::math::quadrature::trapezoidal(f, 0, b, 1e-6);
//std::cout << Q << ", error estimated at " << error <<std::endl;
return Q;
}
Implementasi fungsi $f(r,z)$ dan integral lainnya adalah sebagai berikut
double initial(double r, double z, int m, int n)
{
return std::sin(M_PI*n*z/a)*std::cyl_bessel_j(0, boost::math::cyl_bessel_j_zero(0,m)*r/b);
}
double integrand(double r,double z,int n,int m)
{
return initial(r,z,m,n)*std::sin(M_PI*n*z/a)*std::cyl_bessel_j(0, boost::math::cyl_bessel_j_zero(0,m)*r/b);
}
Biasanya Inisial tidak memerlukannya dan n variabel tetapi dalam kasus ini, saya perlu melakukan beberapa tes.
Masalahnya adalah saya benar-benar tidak mengerti cara membagi fungsi saya seperti pada contoh masalah saya dan melakukan integrasi karena boost hanya menerima 1 fungsi variabel.
Tolong bantu