estándar::cyl_bessel_i en C++17

En Matemáticas, la ecuación diferencial,

x^{2}\frac{d^{2}y}{dx^{2}} + x\frac{dy}{dx} + (x^{2} - v^{2})y = 0

es de particular importancia. La solución de la ecuación es una función del parámetro v. Para los valores integrales y semiintegrales de v, las soluciones de particular interés se denominan funciones cilíndricas de Bessel, en honor al famoso matemático alemán Friedrich Wilhelm Bessel. La razón del requisito de vser integral o semiintegral quedará clara en la explicación que se da a continuación.

Dado que esta es una ecuación diferencial de segundo orden, debe haber dos soluciones linealmente independientes, llamadas de primera clase y de segunda clase. Por lo tanto, la ecuación diferencial se puede resolver a mano utilizando el método de Frobenius . Las funciones de Bessel de primera clase, para argumentos complejos x, se denominan funciones de Bessel modificadas de primera clase y se denotan por I_{v}(x). La aplicación del método produce una serie infinita que contiene los términos de xy v, dada por,

 I_{v}(x) = \sum_{k = 0}^{\infty} \frac{1}{k!\Gamma (k+v+1)}\left(\frac{x}{2}\right)^{2k+v}

Dado que la expresión contiene la función Gamma, que solo se puede calcular para valores integrales y semiintegrales, el parámetro vdebe ser integral o semiintegral.

La biblioteca estándar de C++17 (GCC 7.1) cmathbrinda funciones que calculan el valor de la función de Bessel cilíndrica de primer tipo (std::cyl_bessel_j)(no discutida aquí, pero es muy similar a lo que hemos discutido) y el valor de las funciones de Bessel modificadas regulares (std::cyl_bessel_i). Ambos tienen una precisión apreciable para entradas pequeñas y se pueden usar en varias aplicaciones de ingeniería.

Ejemplos:

Entrada: x = 2,798465, v = 0
Salida: 4,152234090041574

Entrada: x = 3,04513, v = 0,5
Salida: 4,792979684692604

Nota: El siguiente código fuente solo debe ejecutarse en C++17 y superior. La muestra en ejecución del código dado se puede comprobar aquí . Para postularse para una entrada diferente, visite el enlace y haga clic en «Editar» en la esquina inferior derecha.

// C++17 code for bessel function
#include <bits/stdc++.h>
using namespace std;
  
// Compute the answer from the formulae for first 10 terms
long double answer(long double x, long double v)
{
  
    long double ans_by_expansion = 0;
    long double fact = 1;
  
    for (int k = 0; k < 10; fact = fact * (++k)) {
        ans_by_expansion += pow((x / 2), (2 * k)) / pow(fact, 2);
        cout << "ans_by_expansion till term k = ";
        cout << k << " is " << ans_by_expansion << "\n";
    }
  
  return ans_by_expansion;
}
  
// Driver code
int main()
{
    long double x = 2.798465;
    long double v = 0;
  
    // Compute the Regular Modified Bessel Function
    // for v = 0, x = 2.798465
    long double ans_by_function = cyl_bessel_i(v, x);
  
    cout << setprecision(15) << fixed;
    cout << "The answer by function for "
         << "Regular_Modified_Bessel_Function" << endl
         << "(" << v << ", " << x << ") = "
         << ans_by_function << "\n";
  
    // calculate answer by expansion
    long double ans_by_expansion = answer(x, v);
  
    cout << "Absolute Error in answer by both the methods is = ";
    cout << abs(ans_by_expansion - ans_by_function) << "\n";
  
    return 0;
}

Producción:

The answer by function for Regular_Modified_Bessel_Function
(0.000000000000000, 2.798465000000000) = 4.152234090041574
ans_by_expansion till term k = 0 is 1.000000000000000
ans_by_expansion till term k = 1 is 2.957851589056250
ans_by_expansion till term k = 2 is 3.916147300248771
ans_by_expansion till term k = 3 is 4.124614053687001
ans_by_expansion till term k = 4 is 4.150123238967278
ans_by_expansion till term k = 5 is 4.152120966924739
ans_by_expansion till term k = 6 is 4.152229612892962
ans_by_expansion till term k = 7 is 4.152233953968095
ans_by_expansion till term k = 8 is 4.152234086767796
ans_by_expansion till term k = 9 is 4.152234089977698
Absolute Error in answer by both the methods is = 0.000000000063876

Publicación traducida automáticamente

Artículo escrito por AayushChaturvedi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *