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 687 fois - Téléchargée 13 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

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

# 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
Messages postés
24
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
19 mai 2012

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

WINDOWS
Messages postés
28
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
12 décembre 2013

tu travaille sous windows ou bien Linux ???
Messages postés
24
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
19 mai 2012

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.