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 Programmation » Racine nième de la fonction de Bessel » 12-03-2022 18:17:23

Thomas20
Réponses : 1

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.

Pied de page des forums