Problème d'intégrale sur Maple
Problème d'intégrale sur Maple
Bonjour,
Dans le cadre de mon TIPE, je suis amené à calculer la valeur au cours du temps d'une certaine intégrale à paramètre t (pour le temps), les bornes de cette intégrale sont aussi dépendantes de t. Il s'agit d'une mesure de la luminosité d'une étoile au cours du temps lors d'un transit exoplanétaire. Le protocole est détaillé ici aux pages 15 et 16, bien que je le modifie légèrement : sciencesalecole.obspm.fr/SaE/CGenial09/dossier-fenelon.pdf
Je cherche à tracer la valeur de cette intégrale au cours du temps, malheuresement maple tourne en rond ou renvoie "empty plot"! Voici mes lignes de calcul :
P := 36000;a := 3*10^9;d :=t-> abs(a*cos(2*Pi*t/P)):Rp:=5*10^7:Ret:=10^9:
F:=r->10^27*(1-0.5(1-r/Ret)-0.6*(1-r/Ret)^3.1):T:=(r,t)->arccos((r^2+d^2-Rp^2)/(2*r*d)):
Fp:=t->int(2*F(r)*r*T(r,t),r=d(t)-Rp..min(d(t)+Rp,Ret)):
plot(Fp(t),t=7000..7100);
L'intervalle de temps choisi correspond à un intervalle où le arccos est bien défini. Je pense que maple a du mal à évaluer le terme qui est dedans car il dépend à la fois de r et de t. Si l'on demande une valeur précise de Fp, Fp(7000) par exemple, maple ne revoit rien.
Merci d'avance pour vos réponses !
Dans le cadre de mon TIPE, je suis amené à calculer la valeur au cours du temps d'une certaine intégrale à paramètre t (pour le temps), les bornes de cette intégrale sont aussi dépendantes de t. Il s'agit d'une mesure de la luminosité d'une étoile au cours du temps lors d'un transit exoplanétaire. Le protocole est détaillé ici aux pages 15 et 16, bien que je le modifie légèrement : sciencesalecole.obspm.fr/SaE/CGenial09/dossier-fenelon.pdf
Je cherche à tracer la valeur de cette intégrale au cours du temps, malheuresement maple tourne en rond ou renvoie "empty plot"! Voici mes lignes de calcul :
P := 36000;a := 3*10^9;d :=t-> abs(a*cos(2*Pi*t/P)):Rp:=5*10^7:Ret:=10^9:
F:=r->10^27*(1-0.5(1-r/Ret)-0.6*(1-r/Ret)^3.1):T:=(r,t)->arccos((r^2+d^2-Rp^2)/(2*r*d)):
Fp:=t->int(2*F(r)*r*T(r,t),r=d(t)-Rp..min(d(t)+Rp,Ret)):
plot(Fp(t),t=7000..7100);
L'intervalle de temps choisi correspond à un intervalle où le arccos est bien défini. Je pense que maple a du mal à évaluer le terme qui est dedans car il dépend à la fois de r et de t. Si l'on demande une valeur précise de Fp, Fp(7000) par exemple, maple ne revoit rien.
Merci d'avance pour vos réponses !
Re: Problème d'intégrale sur Maple
Déja tu as oublié de préciser d(t) (et non d) dans l'expression de T.
Ensuite le calcul que tu demandes à l'air assez immonde, donc même avec ça je en sais pas trop ce que Maple pourra faire..
Ensuite le calcul que tu demandes à l'air assez immonde, donc même avec ça je en sais pas trop ce que Maple pourra faire..
Doctorant Maths-Info, ancien ENS Cachan.
Re: Problème d'intégrale sur Maple
Deux remarques:
1) Non ce genre de calcul est totalement trivial pour Maple.
L'expression peut paraitre horrible à un huamain mais pour un bon logiciel de calcul ce n'est vraiment rien du tout. Il faut bien être conscient ce ça car sinon on risque de laisser tomber des calculs sous prétextes qu'ils sont trop compliqués alors qu'avec les outils de 2010 ils sont totalement triviaux.
2) Quand on fait du calcul numérique (car là on se tape de l'expression symbolique, on veut une courbe et des valeurs), on doit aider le logiciel. On doit l'aider en virant toutes les constantes qui ne seervent à rien et en simplifiant tout ce qui peut l'être (surtout les puissances de 10).
Je ne sais pas ce que maple pense de 10000001! / 10000000! mais beaucoup de logiciel de calcul ne savent pas calculer ça sans qu'on les aide (la dernière version de mathematica sait).
10^beaucoup + 1 - 2 ça risque fort de faire 10^beaucoup en numérique.
Il faut essayer autant que possible de ne travailler qu'avec des nombres ayant tous le même ordre de grandeur.
Bref, un soft de calcul comme maple c'est ultra puissant mais ce n'est pas une poubelle dans laquelle on balance des expressions sans penser à la façon dont il va les traiter
1) Non ce genre de calcul est totalement trivial pour Maple.
L'expression peut paraitre horrible à un huamain mais pour un bon logiciel de calcul ce n'est vraiment rien du tout. Il faut bien être conscient ce ça car sinon on risque de laisser tomber des calculs sous prétextes qu'ils sont trop compliqués alors qu'avec les outils de 2010 ils sont totalement triviaux.
2) Quand on fait du calcul numérique (car là on se tape de l'expression symbolique, on veut une courbe et des valeurs), on doit aider le logiciel. On doit l'aider en virant toutes les constantes qui ne seervent à rien et en simplifiant tout ce qui peut l'être (surtout les puissances de 10).
Je ne sais pas ce que maple pense de 10000001! / 10000000! mais beaucoup de logiciel de calcul ne savent pas calculer ça sans qu'on les aide (la dernière version de mathematica sait).
10^beaucoup + 1 - 2 ça risque fort de faire 10^beaucoup en numérique.
Il faut essayer autant que possible de ne travailler qu'avec des nombres ayant tous le même ordre de grandeur.
Bref, un soft de calcul comme maple c'est ultra puissant mais ce n'est pas une poubelle dans laquelle on balance des expressions sans penser à la façon dont il va les traiter

Dernière modification par fakbill le 27 mai 2010 23:37, modifié 1 fois.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Re: Problème d'intégrale sur Maple
Hmm tu as raison. En fait j'avais surtout pensé à "vu comment tu lui as donné, c'est immonde". Bref, vire les constantes inutiles, écris des procedures, mets des evalf car sinon il travaille en formel..
Doctorant Maths-Info, ancien ENS Cachan.
Re: Problème d'intégrale sur Maple
Merci beaucoup pour vos réponses, j'ai apporté quelques modifications, mis des evalf dans les expressions. D'ailleurs à ce propos j'ai constaté en essayant de calculer la valeur de T en certains points la chose suivante :
avec d :=t-> abs(a*cos(2*Pi*t/P)): lorsque je tape evalf(T(9.76060428*10^8,7000));
(9.76060428*10^8 = evalf(d(7000)-Rp))
j'obtiens .00001414213562 ce qui me semble pertinent
alors qu'avec d :=t-> evalf(abs(a*cos(2*Pi*t/P))) j'obtiens 0
Je ne pensais pas que mettre des evalf pouvait simplifier à ce point là...
Par ailleurs, lorsque je demande Fp(7000), il me renvoie une intégrale moche, mais qui semble calculable, cependant dès que je lui demande evalf(Fp(7000)) , il tourne en rond à nouveau. Sa ne veut pas forcément dire que le calcul est trop important pour lui ?
J'ai essayé de déplacer le problème, je sens bien que c'est le arccos(..) qui bloque tout.
f:=t->int(T(r,t),r=evalf(d(t)-Rp)..Ret);
evalf(f(7000));
toujours rien...
Donc c'est bien lui qui m'ennuie; pourtant c'est "juste" une intégrale à paramètre d'arccos de fonction rationnelle, je pensais que maple calculerait sa les doigts dans le nez. Et encore f(7000) vaut int(arccos(.4873007343e-9*(r^2+.1050300002e19)/r),r = 976060428. .. 1000000000.) et la Ti89 d'un ami m'a donné 4.1*10^7, une valeur cohérente avec la courbe que j'attends. Je n'imaginais pas la calculatrice battre maple ! Malheureusement elle n'arrive qu'à calculer l'intégrale pour une valeur t définie, il faut donc que je passe par maple pour obtenir la courbe.
L'idée de simplifier avec des procédures est intéressante, je vais essayer mais je n'ai pas trop d'idées pour le moment, d'autant plus que mes compétences en info sont très limitées...
Quant à la modifications des constantes, si le calcul est censé être trivial pour maple, sa ne devrait pas changer beaucoup de chose, non ? Et puis le plus gros soucis est que l'ordre de grandeur des planètes, étoiles, etc, je ne peux pas trop me permettre de le changer. Mais si je diminue tout d'un facteur 10^quelquechose, et que j'aide maple à calculer cette intégrale, tant mieux.
avec d :=t-> abs(a*cos(2*Pi*t/P)): lorsque je tape evalf(T(9.76060428*10^8,7000));
(9.76060428*10^8 = evalf(d(7000)-Rp))
j'obtiens .00001414213562 ce qui me semble pertinent
alors qu'avec d :=t-> evalf(abs(a*cos(2*Pi*t/P))) j'obtiens 0
Je ne pensais pas que mettre des evalf pouvait simplifier à ce point là...

Par ailleurs, lorsque je demande Fp(7000), il me renvoie une intégrale moche, mais qui semble calculable, cependant dès que je lui demande evalf(Fp(7000)) , il tourne en rond à nouveau. Sa ne veut pas forcément dire que le calcul est trop important pour lui ?
J'ai essayé de déplacer le problème, je sens bien que c'est le arccos(..) qui bloque tout.
f:=t->int(T(r,t),r=evalf(d(t)-Rp)..Ret);
evalf(f(7000));
toujours rien...
Donc c'est bien lui qui m'ennuie; pourtant c'est "juste" une intégrale à paramètre d'arccos de fonction rationnelle, je pensais que maple calculerait sa les doigts dans le nez. Et encore f(7000) vaut int(arccos(.4873007343e-9*(r^2+.1050300002e19)/r),r = 976060428. .. 1000000000.) et la Ti89 d'un ami m'a donné 4.1*10^7, une valeur cohérente avec la courbe que j'attends. Je n'imaginais pas la calculatrice battre maple ! Malheureusement elle n'arrive qu'à calculer l'intégrale pour une valeur t définie, il faut donc que je passe par maple pour obtenir la courbe.
L'idée de simplifier avec des procédures est intéressante, je vais essayer mais je n'ai pas trop d'idées pour le moment, d'autant plus que mes compétences en info sont très limitées...
Quant à la modifications des constantes, si le calcul est censé être trivial pour maple, sa ne devrait pas changer beaucoup de chose, non ? Et puis le plus gros soucis est que l'ordre de grandeur des planètes, étoiles, etc, je ne peux pas trop me permettre de le changer. Mais si je diminue tout d'un facteur 10^quelquechose, et que j'aide maple à calculer cette intégrale, tant mieux.
Re: Problème d'intégrale sur Maple
Argl tu te fais avoir pas qlqs pièges classiques (mais vicieux) du calcul avec des softs comme Maple.
C'est normal au début, on peut pas devenir
Je précise tout de suite que j'ai en gros tout oublié en maple (je fais du mathematica):
d :=t-> evalf(abs(a*cos(2*Pi*t/P))) j'obtiens 0
Heu?? c'est une fonction ça...tu veux dire qu'il renvoit la fonction nulle? Etrange. Pb de syntaxe probablement.
Je ne sais pas si c'est valable en maple, mais en mathematica, faire
N[Integrate[.... ne revient pas au même que NIntegrate (N c'est le evalf de mathematica).
Si tu fais N[Integrate[, il tente d'évaluer le Integrate en premier (en symbolique) *puis* il calcule ce que ça donne numériquement. Avec NIntegrate, il calcule l'intégrale directement avec une méthode numérique (ce qui va souvent (mais pas toujours..) bcp plus vite).

Je ne vais pas te faire ici un cours sur les nombres flotants mais en gros:
Dans un PC, tout nombre est représenté par un nombre fini de bits.
Ca veut dire que, pour beaucoup de logiciels, 3/3*3 ne vaut pas exactement 1.
Le test if(3*3/3 == 1) échouera.
Maple lui fait du symbolique donc 3*3/3, il *sait* que ça fait 1.
Cependant, si tu lui demane 3.0/3*3.0, je ne garantis plus rien (dans ce cas simple ça devrait encore aller...C'est juste un exemple).
Pire, vu que les nombres sont représenter sur un nombre fini de bits, il se passe souvent des choses étranges du style très_grand + 1 -1 != très_grand.
Bref, c'est mal de laisser des constantes énormes dans un calcul numérique. Ca nuit soit à la précision du résultat, soit au temps de calcul (car le soft, malin qu'il est, utilise un alog compliqué pour maintenir la précision).
En physique des particules, ils posent souvent c=hbarre=e=1. Ca simplifie beaucoup les formules.
Il est facile de remettre les bonnes valeurs *après le calcul*.
Commencer le calcul numérique sur maple cache un peu tout ça car Maple est assez malin pour corriger pas mal de ces erreurs.
Pour ce qui est de la syntaxe exacte, demande à ton prof ou si qlqn sait sur le forum...
C'est normal au début, on peut pas devenir

Je précise tout de suite que j'ai en gros tout oublié en maple (je fais du mathematica):
d :=t-> evalf(abs(a*cos(2*Pi*t/P))) j'obtiens 0
Heu?? c'est une fonction ça...tu veux dire qu'il renvoit la fonction nulle? Etrange. Pb de syntaxe probablement.
Je ne sais pas si c'est valable en maple, mais en mathematica, faire
N[Integrate[.... ne revient pas au même que NIntegrate (N c'est le evalf de mathematica).
Si tu fais N[Integrate[, il tente d'évaluer le Integrate en premier (en symbolique) *puis* il calcule ce que ça donne numériquement. Avec NIntegrate, il calcule l'intégrale directement avec une méthode numérique (ce qui va souvent (mais pas toujours..) bcp plus vite).
Ce n'est pas la questionQuant à la modifications des constantes, si le calcul est censé être trivial pour maple, sa ne devrait pas changer beaucoup de chose, non ? Et puis le plus gros soucis est que l'ordre de grandeur des planètes, étoiles, etc, je ne peux pas trop me permettre de le changer. Mais si je diminue tout d'un facteur 10^quelquechose, et que j'aide maple à calculer cette intégrale, tant mieux.

Je ne vais pas te faire ici un cours sur les nombres flotants mais en gros:
Dans un PC, tout nombre est représenté par un nombre fini de bits.
Ca veut dire que, pour beaucoup de logiciels, 3/3*3 ne vaut pas exactement 1.
Le test if(3*3/3 == 1) échouera.
Maple lui fait du symbolique donc 3*3/3, il *sait* que ça fait 1.
Cependant, si tu lui demane 3.0/3*3.0, je ne garantis plus rien (dans ce cas simple ça devrait encore aller...C'est juste un exemple).
Pire, vu que les nombres sont représenter sur un nombre fini de bits, il se passe souvent des choses étranges du style très_grand + 1 -1 != très_grand.
Bref, c'est mal de laisser des constantes énormes dans un calcul numérique. Ca nuit soit à la précision du résultat, soit au temps de calcul (car le soft, malin qu'il est, utilise un alog compliqué pour maintenir la précision).
En physique des particules, ils posent souvent c=hbarre=e=1. Ca simplifie beaucoup les formules.
Il est facile de remettre les bonnes valeurs *après le calcul*.
Commencer le calcul numérique sur maple cache un peu tout ça car Maple est assez malin pour corriger pas mal de ces erreurs.
Pour ce qui est de la syntaxe exacte, demande à ton prof ou si qlqn sait sur le forum...
Re: Problème d'intégrale sur Maple
D'accord, merci beaucoup, je vais essayer de "synchroniser" l'ordre de grandeur des constantes, maple arrivera peut être à calculer plus facilement l'intégrale.
d :=t-> abs(a*cos(2*Pi*t/P)):
(...)
evalf(T(9.76060428*10^8,7000));
.00001414213562
Alors que si je définis d autrement avec evalf :
d :=t-> evalf(abs(a*cos(2*Pi*t/P)))
(...)
evalf(T(9.76060428*10^8,7000));
0
Mais c'est juste une curiosité que j'ai repéré en cherchant à résoudre mon problème d'intégral. Je vais essayer de résoudre mon problème en changeant les constantes.
Mais je commence à me demander si maple est vraiment idéal pour faire ce calcul, peut être que d'autres logiciels de calculs formels sont plus adaptés ?
Non, je n'ai pas été très clair, en fait j'obtiens deux résultats différents selon que j'utilise evalf ou pas dans la définition de d.d :=t-> evalf(abs(a*cos(2*Pi*t/P))) j'obtiens 0
Heu?? c'est une fonction ça...tu veux dire qu'il renvoit la fonction nulle? Etrange. Pb de syntaxe probablement.
d :=t-> abs(a*cos(2*Pi*t/P)):
(...)
evalf(T(9.76060428*10^8,7000));
.00001414213562
Alors que si je définis d autrement avec evalf :
d :=t-> evalf(abs(a*cos(2*Pi*t/P)))
(...)
evalf(T(9.76060428*10^8,7000));
0
Mais c'est juste une curiosité que j'ai repéré en cherchant à résoudre mon problème d'intégral. Je vais essayer de résoudre mon problème en changeant les constantes.
Mais je commence à me demander si maple est vraiment idéal pour faire ce calcul, peut être que d'autres logiciels de calculs formels sont plus adaptés ?
Re: Problème d'intégrale sur Maple
Je ne comprends pas tes notations.
Entre les T et les t et les constantes qui se balandent, je ne comprends pas exactement ce que tu veux calculer.
Le calcul numérique, c'est une science. Il ya qlqs règles de base à respecter (et bien peu de cours qui les listent clairement dans leur premier chapitre).
Regarde ça :
http://www.maplesoft.com/support/help/M ... %2fdetails
Le paragraphe "When not to use evalf". Est ce que tu comprends où est le problème?
Oublie le fait qu'il revoie -float(infinity). mathematica renvoie 0.1111111. Ce qui importe, c'est le fait que les deux logiciels renvoient un résultat qui *semble* faux quand on rajoute le evalf. Ils ne se trompent cependant pas. Ils calculent exactement ce qu'on leur demande. Le résultat est conforme à la documentation de ces deux logiciels.
Tant qu'on n'a pas compris ça, on ne comrpend pas ce qui se passe en analyse numérique sur machine (mais ce n'est que le début des suprises.)
Avec les floatants:
* L’addition n’est pas associative
* La multiplication n’est pas associative
* La multiplication n’est pas distributive par rapport ll’addition
* Il existe x nombre flottant tel que x × (1/x) != 1
Hé oui...on est loin des réels...on est même loin de Q
http://www.irisa.fr/sage/jocelyne/cours ... c-1101.pdf pour connaitre la suite
(et aller au cours d'ana num une fois en école...)
Entre les T et les t et les constantes qui se balandent, je ne comprends pas exactement ce que tu veux calculer.
Le calcul numérique, c'est une science. Il ya qlqs règles de base à respecter (et bien peu de cours qui les listent clairement dans leur premier chapitre).
Regarde ça :
http://www.maplesoft.com/support/help/M ... %2fdetails
Le paragraphe "When not to use evalf". Est ce que tu comprends où est le problème?
Oublie le fait qu'il revoie -float(infinity). mathematica renvoie 0.1111111. Ce qui importe, c'est le fait que les deux logiciels renvoient un résultat qui *semble* faux quand on rajoute le evalf. Ils ne se trompent cependant pas. Ils calculent exactement ce qu'on leur demande. Le résultat est conforme à la documentation de ces deux logiciels.
Tant qu'on n'a pas compris ça, on ne comrpend pas ce qui se passe en analyse numérique sur machine (mais ce n'est que le début des suprises.)
Avec les floatants:
* L’addition n’est pas associative
* La multiplication n’est pas associative
* La multiplication n’est pas distributive par rapport ll’addition
* Il existe x nombre flottant tel que x × (1/x) != 1
Hé oui...on est loin des réels...on est même loin de Q
http://www.irisa.fr/sage/jocelyne/cours ... c-1101.pdf pour connaitre la suite

Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Re: Problème d'intégrale sur Maple
Je vois, en fait je faisais l'erreur décrite au 7.3 en mettant un evalf à l'intérieur de l'expression.
Bon, je vais éviter d'en mettre un peu partout sans réfléchir, mais si je dois en mettre, ce serait seulement vers la fin, vu que je compose des fonctions entre elles avant de les intégrer, non ?
Je ne sais pas si je pourrais à nouveau passer un peu de temps sur ce problème ce week-end, ce sera plutôt lundi-mardi ; je vous dirai si j'aboutis ou pas.
En tous cas, merci pour votre aide !
Bon, je vais éviter d'en mettre un peu partout sans réfléchir, mais si je dois en mettre, ce serait seulement vers la fin, vu que je compose des fonctions entre elles avant de les intégrer, non ?
Je ne sais pas si je pourrais à nouveau passer un peu de temps sur ce problème ce week-end, ce sera plutôt lundi-mardi ; je vous dirai si j'aboutis ou pas.
En tous cas, merci pour votre aide !
Re: Problème d'intégrale sur Maple
Je pense que tu devrais plutot utiliser la fonction qui va bien pour lui faire calculer l'intégrale directement en numérique.
En mathematica c'est NIntegrate. En maple je ne sais pas
En mathematica c'est NIntegrate. En maple je ne sais pas

Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.