Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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)
Pages : 1







