Approche de la fonction d'erreur par une somme fini {avec une erreur <= 10^(-12)}

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 818 fois - Téléchargée 15 fois

Contenu du snippet

La fonction d'erreur peut-être formulé par la somme infini suivante de n = 0 jusqu'à n-> infini:

Erfc(x)=1-(1/sqrt(Pi))*SUM( [ ((-1)^n) * x^(2*n + 1)] / [ (2*n + 1) * n! ] )

mais lorsque x->infini on pourrait avoir une approximation de erfc(x) par :

(1/sqrt(PI))*[e^(-x^2)]*((1/x)-(1/(2*x^3))+(3/(4*x^5))-(15/(8*x^7)))

Source / Exemple :


/**
 *


 *

  • /
public class Approximation_Erfc { public double factorielle(long n){ double fact=1; if(n<0){ fact = 0; }else{ if(n==0){ fact = 1; }else{ fact= factorielle(n-1)*n; } } return fact; } public int signeN(long n){ int signe; if(n%2==0){ signe=1; }else{ signe=-1; } return signe; } public double p(double x,long n){ double pp; pp=Math.pow(x,n); return pp; } public double termeN(double x, long n){ double terme; terme=signeN(n)*p(x,2*n+1)/((2*n + 1)*factorielle(n)); return terme; } public double approximation(double x , long n){ double approx,termen; if(Math.abs(x)<=5){ if(n<0){ approx=0; }else{ if(n==0){ approx = x; }else{ approx = approximation(x,n-1) + termeN(x,n); } } }else{ approx = (1/Math.sqrt(Math.PI))*p(Math.E,-(long)p(x,2))*((1/x)-(1/(2*p(x,3)))+(3/(4*p(x,5)))-(15/(8*p(x,7)))); } return approx; } public double Erfc(double x , long n){ double fact, erfc; fact = approximation(x, n); erfc =(1-(2/(Math.sqrt(Math.PI)))*fact); return erfc; } public long maxExpErfc(double x){ long k; if(Math.abs(x)>=1){ if(Math.abs(x)<=5){ k=(long)(((307/Math.log10(x))-1)/Math.E); }else{ k=30; } } else{ k=14; } return k; } public static void main(String[] args){ long maxExp; double x = 5.1; double fact; Approximation_Erfc obj = new Approximation_Erfc(); maxExp=obj.maxExpErfc(Math.abs(x)); fact = obj.Erfc(x,maxExp); System.out.println("Erfc("+x+") = "+fact); } }

A voir également

Ajouter un commentaire Commentaires
Scupper
Messages postés
28
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
12 décembre 2013

25 févr. 2011 à 17:56
# public static void main(String[] args){
# long maxExp;
# double x = 5.1;
# double fact;
# Approximation_Erfc obj = new Approximation_Erfc();
# maxExp=obj.maxExpErfc(Math.abs(x));
# fact = obj.Erfc(x,maxExp);
# System.out.println("Erfc("+x+") = "+fact);
# }

tu change la valeur de x par une valeur donnée pour avoir la valeur approximative de erfc(x) ...
je n'aime po travailler avec les valeurs entrées comme arguments pour main C tjrs 2 lignes ou plus de code ...
bon si tu veux entré la valeur par les arguments de main
t'as qu'a ajouT le code suivant :

x=Double.parseDouble(args[1]);
à la place de x = 5.1 et fait attention dans main ajoute throws java.lang.NumberFormatException pour éviT les exceptions lorsque tu entre un valeur erronée....
bon, si tu viens de commenC JAVA ceci C comme ".... ;... .... ...." ; C pour cela essaye maintenant de chanG la valeur de x manuellement et si tu veux une amélioration ou t'as une proposition pour modifier le code tu me le dis ... :D
cs_david
Messages postés
23
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
19 mai 2012

25 févr. 2011 à 17:18
EN fait je crois que j'y suis arrivé mais je comprend pas trop en fait il m'écrit: 0,999999....
cs_david
Messages postés
23
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
19 mai 2012

25 févr. 2011 à 15:10
WINDOWS
Scupper
Messages postés
28
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
12 décembre 2013

25 févr. 2011 à 14:20
tu travaille sous windows ou bien Linux ???
cs_david
Messages postés
23
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
19 mai 2012

25 févr. 2011 à 10:17
tu peux m'expliquer plus en détail merci je débute en informatique
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.