Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 12-03-2022 18:17:23

Thomas20
Membre
Inscription : 12-03-2022
Messages : 1

Racine nième de la fonction de Bessel

Bonjour,
Je voudrais trouver les racines nième de la fonction zéro de Bessel. pour cela je voudrai écrire un programme en matlab ou python mais sauf que je suis débutant dans ces deux langages.
Si quelqu'un a déjà fait ça ou pourrait m'aider.
Merci

J_n (x)=∑_(p=0)^∞▒〖〖(-1)〗^p/p!(n+p)!(〖x/2)〗^(2p+n) 〗

j'ai trouvé ça mais il ne marche que pour les 13 premieres racines et moi et jeux aller plus loin.
#Fonction de Bessel Calcul des racines
from math import *
def jnx(n,x):
    j=(x/2)**n/factorial(n) #premier terme p=0 ; note : ** pour puissance
    u,xcarré=j,(x/2)**2
    umémorisé,stop=j,0
    for p in range(1,pmax):
        u*=-xcarré/(p*(p+n))
        j+=u
    return j
def signe(v):
    if v>=0:
        return 1
    else:
        return -1
def trouverracine(x1,x2,j1,j2):
    while abs(x2-x1)>10**(-9): #limite de précision
        x=(x1+x2)/2 #approche par dichotomie
        j=jnx(n,x)
        if signe(j)==signe(j1):
            x1,j1=x,j
        else:
            x2,j2=x,j
    return x

pmax=31 #limite de p dans la formule de Bessel
#Note valeur de pmax pour obtenir 4 chiffres significatifs quand n=5
#mais calcul et régulation d'erreur non fait, devrait faire partie du programme....
max=30 #limite de x dans l'encadrement des racines   
n=0 #valeur de n dans la formule de Bessel
while n<6: # n de la foction de Bessel
    print("n =",n,"****************")
    x1,j1=1,jnx(n,1) #racines encadrées entre x1 et x2
    x2,j2=2,jnx(n,2)
    nombreracines=1
    while nombreracines<6: #recherhe de l'encadrement d'une racine
        while signe(j1)==signe(j2):
            x1,j1=x2,j2
            x2+=1
            j2=jnx(n,x2)
        print(format(trouverracine(x1,x2,j1,j2),".4f"))
        nombreracines+=1
        x1,j1=x2,j2 #itération pour les 5 premières racines
        if x1>max: # Si les 5 premières racines n'étaient pas trouvées...
            break
    n+=1
# Fin du programme qui imprime en moins d'une seconde.

Hors ligne

#2 06-01-2023 19:56:58

Mazer666
Invité

Re : Racine nième de la fonction de Bessel

Il existe de nombreuses manières de trouver les racines de la fonction de Bessel, mais une façon simple d'aborder le problème consiste à utiliser l'algorithme de Newton. Voici comment cela fonctionne:

    Choisissez une valeur de départ pour la racine que vous voulez trouver (par exemple, x0 = 1).

    Utilisez la formule de Bessel pour calculer la valeur de la fonction de Bessel en x0 (appelons cela f(x0)).

    Utilisez la dérivée de la formule de Bessel pour calculer la dérivée de la fonction de Bessel en x0 (appelons cela f'(x0)).

    Calculez la nouvelle approximation de la racine en utilisant la formule suivante: x1 = x0 - f(x0) / f'(x0)

    Répétez les étapes 2 à 4 jusqu'à ce que la précision souhaitée soit atteinte.

Voici comment cela pourrait être implémenté en Python:

from math import *

def jn(n, x):
    # calcul de la fonction de Bessel en x
    return sum((-1)**p / factorial(p) / factorial(n + p) * (x/2)**(2*p + n) for p in range(100))

def jn_deriv(n, x):
    # calcul de la dérivée de la fonction de Bessel en x
    return sum((-1)**p / factorial(p) / factorial(n + p) * (2*p + n) * (x/2)**(2*p + n - 1) for p in range(100))

def find_root(n, x0, precision):
    # trouve une racine de la fonction de Bessel avec l'algorithme de Newton
    x1 = x0 - jn(n, x0) / jn_deriv(n, x0)
    while abs(x1 - x0) > precision:
        x0, x1 = x1, x1 - jn(n, x1) / jn_deriv(n, x1)
    return x1

root = find_root(0, 1, 1e-9)  # trouve une racine de la fonction de Bessel J0
print(root)

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt neuf moins soixante huit
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums