fabricelecuyer
Messages postés5Date d'inscriptionlundi 29 décembre 2003StatutMembreDernière intervention 8 janvier 2004
-
29 déc. 2003 à 11:08
pichu914
Messages postés5Date d'inscriptionsamedi 19 février 2005StatutMembreDernière intervention20 février 2005
-
20 févr. 2005 à 11:05
Bonjour a tous,
Je cherche à programmer une application en java permettant le calcul de l'integrale d'une exponentielle. Je pense réaliser cette fonction grâce à la méthode du trapèze.
Cependant, une fonction doit surement déjà exister dans l'API java ou dans une autres bibliothèques.
Si c'est le cas, quelqu'un pourrait t'il me renseigner, cela me ferait gagner un temps précieux.
Merci d'avance.
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 29 déc. 2003 à 11:11
:big) Neodante :big)
Je ne connais pas la méthode et cela m'étonnerais grandement qu'il y en ai une ... c'est beaucoup trop spécialisé ! Peut-être existe t'il une autre librairie .. faudrais chercher ...
@+
fabricelecuyer
Messages postés5Date d'inscriptionlundi 29 décembre 2003StatutMembreDernière intervention 8 janvier 2004 29 déc. 2003 à 11:44
Je n'en ai effectivement trouvé aucune dans l'api java.
Si quelqu'un peut me renseigner sur l'existence d'une méthode d'integration (ou meme d'une source déjà existante ;-) ) ça serait génial. Des propositions de sites ou je pourrais eventuellement trouver une telle méthode sont les bienvenues.
Merci
cs_wt
Messages postés3Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention 7 janvier 2004 9 janv. 2004 à 17:03
Mes kces en mathématiques commencent à faire veilles.
Cependant voici comment je procédérais si nécessaire :
On considère une fonction exponentielle de la forme f(x) = A.exp(Bx) où A, B st des constantes et x 1 variable
L'intégrale I de f(x) sur [a, b] est approchée par la somme de N surfaces des subdividions trapèziques le long de l'intervale [a, b]. Plus N est gd, plus la précision sera meilleure.
Si on pose h = |b-a| / N , rapport de la valeur absolue de (b-a) sur N, on aurait :
I = Somme de T(i) où
T(i) = h.f(a+ih) + (h/2)|f(a+ih+h)-f(a+ih)| avec i=0..N-1
En simplissant tout cela d'après les propriétés mathématiques de la fonction exponentielle énoncée ci-dessus, on aboutit à :
I = K . s(i) où :
K = (h/2).A.(2+|exp(hB-1)|).exp(aB) et
s(i)= somme de exp(ihB), i=0..N-1
Cette simplication permet une optimisation du code par la suite.
En résumé, donc : ( suggestion algorithmique )
1. Initialiser un double S à O et fixer N à 100 par exemple, ou plus.
2. Calculer le double à l'aide de Math.abs : h = Math.abs(a-b)/2
3. Calculer ensuite K, à l'aide de Math.exp et Math.abs.
4. A l'aide la boucle for, calculer S grâce à Math.exp(ihB), i=0..N.
5. Calculer enfin le double I, I = K*S.
6. I est donc ton intégrale !!!!!!!!!!!
molezi0
Messages postés2Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention15 janvier 2004 15 janv. 2004 à 18:03
Bonjour ,
J'ai rencontré ce problème et j'ai créé une classe fonction en général (ce qui n'existe pas en java au sens que les fonctions ne sont pas des objets comme Maths)
De la classe fonction découle la classe fonctionR(fonctions réelles)
Définir le concept de fonction en général me permet de faire des opérations sur des objets en général ce qui peut être intérressant .
J'ai définit pour les fonctions réelles les différentes opérations de base (addition , produit , composition) et il y a aussi une méthode qui calcule les sommes (S) et les intégrales voici la syntaxe :
Pour créer une fonction réelle :
fonctionR=new fonctionR(){ double calcul (double x) // ca définit la fonction
{ return x+1;
}
} ;
pour calculer l'intégrale : f.intégrale(double a , double b , int n) a et b sont les bornes et n le nombre de trapèze que tu peux ajuster selon la précision voulue .
class fonction
{ Object calcul(Object x)
{ return x ;
}
fonction rond ( fonction gg)
{ final fonction g =gg;
final fonction f =this;
return new fonction () { Object calcul(Object x)
{ return f.calcul(g.calcul(x)) ;
}
} ;
}
}
import java.lang.Math ;
class fonctionR extends fonctionRn
{ double p[] ;
public fonctionR()
{ }
public fonctionR(double param[])
{ p = param ;}
double calcul (double x)
{ return x ;
}
fonctionR plus ( fonctionR gg)
{ final fonctionR g = gg ;
final fonctionR f = this ;
return new fonctionR () { double calcul (double x)
{ return f.calcul(x)+g.calcul(x) ;
}
};
}
fonctionR moins ( fonctionR gg)
{ final fonctionR g = gg ;
final fonctionR f = this ;
return new fonctionR () { double calcul (double x)
{ return f.calcul(x)-g.calcul(x) ;
}
};
}
fonctionR fois ( fonctionR gg)
{ final fonctionR g = gg ;
final fonctionR f = this ;
return new fonctionR () { double calcul (double x)
{ return f.calcul(x)*g.calcul(x) ;
}
};
}
fonctionR sur ( fonctionR gg)
{ final fonctionR g = gg ;
final fonctionR f = this ;
return new fonctionR () { double calcul (double x)
{if (g.calcul(x) == 0 )
{ System.out.println("Division par 0") ;
return 1 ;
}
return f.calcul(x)/g.calcul(x) ;
}
};
}
double sigma (int a , int b)
{ int i ; double s = 0 ;
for(i=a ; i<=b ; i++)
{ s=s+this.calcul(i) ;
}
return s ;
}
double intégrale ( double a ,double b, int n )
{ double k = 0.00000000000001;double y,z;
double c = (b-a)/n;
int i ;
double I=0;
pichu914
Messages postés5Date d'inscriptionsamedi 19 février 2005StatutMembreDernière intervention20 février 2005 20 févr. 2005 à 11:05
bonjour,
je cheche moi aussi à faire un petit logiciel de cacul formel. pour cela je pense :
- demander à l'utilisateur d'entrer une expression
- la faire analyser (repérer les plus et les moins et isoler les monomes (x2, exp x, lnx.....)
- faire une dérivation et une integration terme à terme.
peux-tu me donner la façon d'intégrer ton exponentielle, ca me
permettrait de l'insérer dans une banque de données? As-tu des idées
qui pourraient m'aider dans mon programme?
Je pensais créer trois classe: isoler, dérivée, intégrale et puis faire du terme à terme.