 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 19 Avr 2007 18:38 Sujet du message: racines et multiplicté d'un polynome de degré 3 |
|
|
Bonjour à toutes et à tous, j'aurais besoin d'un grand coup de main pour mon exercice que voici:
Ecrire une procedure "Nombrederacines" qui a pour argument a,b,c et qui renvoie le nombre de racines de P avec leur multiplictés ou P=x^3+ax²+bx+c et a,b,c des réels.La tester avec P=x^3+3x^2+6x-1
Alors tout d'abord,sachez qu'avant cette demande de procedure on a poser un tas de question auxquelles j'ai répondu:
les voici:
a)En considérant les limites en +- l'infini de P,que peut-on dire que le nombre de racines?
b)Exprimer P' enfonction de a,b,c et de delta le discriminant de P'.
c)On suppose delta<0.Combien de racines réelles a P,quelle est leur ordre de multiplicté.
d)delta=0,nombre de racines réelles et ordre de mulitplicté pour P
e)delta>0 meme questions que précédemment.
alors voila coment je débuterais ma procedure:
Nombrederacines:=proc(A,B,C)
local a,b,c,x,delta;
assume a,b,c real;
P:=x^3+ax²+bx+c;
A:=a;
B:=b;
C:=c;
P':=diff(P) ou bien P':=3x²+2ax+b;
delta:=b²-4ac
if delta<0...
voila aprés en fait je sais pas trop comment continuer...
Je vous remerci d'avance de votre aide.  |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 20 Avr 2007 1:14 Sujet du message: |
|
|
voila ce que j'ai trouver pendant mes recherches,il faudrait rentrer ces deux procedure en une seule et ensuite la faire marcher pour par exemple x^3+2x²-x-2....c'est le seul polynome qui me pose probleme!)
Merci d'avance de votre aide.
P:=proc(a,b,c,X) X^3+a*X^2+b*X+c end:
Puis d'utiliser :
> NbRac:=proc(a,b,c)
>
> local x,delta,m,r1,r2:
> m:=-a/3:
> delta:=4*a^2-12*b:
>
> if delta<0 then print("P a une seule racine réelle, qui est simple")
>
> elif delta=0 then
> if P(a,b,c,m)=0 then print("P a une racine réelle triple")
> else print("P a une seule racine réelle, qui est simple")
> fi:
>
> elif delta>0 then r1:=m-sqrt(delta): r2:=m+sqrt(delta):
> if P(a,b,c,r1)*P(a,b,c,r2)>0 then print("P a une seule racine réelle, qui est simple")
> elif P(a,b,c,r1)*P(a,b,c,r2)<0 then print("P a trois racines réelles")
> else print("P a deux racines réelles dont une double")
> fi:
>
> fi:
> end: |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 20 Avr 2007 1:29 Sujet du message: |
|
|
c'était un problème d'evalf. En remplaçant le dernier paragraphe par
> elif delta>0 then r1:=m-sqrt(delta): r2:=m+sqrt(delta):
> if evalf(P(a,b,c,r1)*P(a,b,c,r2))>0 then print("P a une seule racine réelle, qui est simple")
> elif evalf(P(a,b,c,r1)*P(a,b,c,r2))<0 then print("P a trois racines réelles")
> else print("P a deux racines réelles dont une double")
> fi:
ça marche mieux. J'ai juste rajouté des evalf(...) autour des valeurs dont on doit tester le signe.
par contre il faudrait que je rajoute a,b,c reels et assembler les deux procedures,j'espere que quelqu'un va pouvoir m'aider à faire ça.
pour les réels,je peux mettre assume(a,real,b,real,c,real) mais je sais pas trop ou le caser! |
|
Revenir en haut de page |
|
 |
zozo
Inscrit le: 03 Jan 2013 Messages: 125
|
Posté le: 20 Avr 2007 8:57 Sujet du message: |
|
|
Bonjour, voici la réponse à vos questions, mais l'algorithme employé donne parfois une conclusion fausse.
Code: |
> NbRac:=proc(a,b,c)
> local P,x,delta,m,r1,r2:
>
> P:=proc(a,b,c,X) X^3+a*X^2+b*X+c end proc:
>
> use RealDomain in
> m:=-a/3:
> delta:=4*a^2-12*b:
>
> if delta<0 then print("P a une seule racine réelle, qui est simple")
>
> elif delta=0 then
> if P(a,b,c,m)=0 then print("P a une racine réelle triple")
> else print("P a une seule racine réelle, qui est simple")
> fi:
>
> elif delta>0 then r1:=m-sqrt(delta): r2:=m+sqrt(delta):
> if evalf(P(a,b,c,r1)*P(a,b,c,r2))>0 then print("P a une seule racine réelle, qui est simple")
> elif evalf(P(a,b,c,r1)*P(a,b,c,r2))<0 then print("P a trois racines réelles")
> else print("P a deux racines réelles dont une double")
> fi:
>
> fi:
> end
> end:
> NbRac(2,-1,-2);
"P a trois racines réelles"
> NbRac(-2,1,-2);
"P a trois racines réelles"
> factor(x^3-2*x^2+x-2);
2
(x + 1) (x - 2)
|
Le résultat donné par NbRac(-2,1,-2) est donc faux.
Il faudra donc revoir les différents cas.
@+ |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 20 Avr 2007 11:56 Sujet du message: |
|
|
Bonjour zozo, alors d'abord merci de ta réponse, mais j'ai quelques questions,
ne peut -on pas faire une seule et unique procedure,sans "concaténer" brutalement les deux mini procedures?
ensuite j'aimerais bien que ça réponde vrai pour ces polynomes:
x^3+3x²+6x-1
x^3+3x²+3x+2
x^3-3x²+3x-1
x^3+x²-1
x^-3x+2
x^3+2x²-x-2
avec la procedure qu'on a, x^3+x²-1 ne marche pas, il dit qu'on atrois racines réelles alors qu'il n'y en a qu'une.
(autre question sans doute idiote mais pour etre sur, si un polynome de degré 3 a 3 racines,elles sont forcément simple non?)
Merci d'avance de votre aide.
En fait une procedure qui marche tout le temps serait l'idéal parce qu'aprés j'en ai encore une a faire et je pense qu'elle utilise celle ci donc si celle-ci ne marche pas,ça va etre compliqué!
Encore merci de votre aide. |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 20 Avr 2007 18:02 Sujet du message: |
|
|
en fait je met le doigt sur un probleme,une double et une simple n'apprait jamais,dans ces cas la il affiche 3 racines simples...
je pensais faire un plot pour lui faire voir desuite ou sont les racines mais je ne suis pas assez compétant en maple...
C'est pourquoi j'ai besoin de votre aide la.
Merci d'avance. |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 20 Avr 2007 18:14 Sujet du message: |
|
|
en fait quand on sait que P a tois racines réelles, il faut déterminer si c'est 3simples ou une double et une simple
parce que pour x^3-x^2 on a 3 racines réelles mais la procedure ne renvoit que "P a trois racines réelles" il dit pas si y'en a une double...ect...
Voila voila,si qulelqu'un peut m'aider.Merci d'avance.
 |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 21 Avr 2007 9:27 Sujet du message: |
|
|
Bonjour, voici la procédure corrigée (il y avait plusieurs problèmes dans le cas delta>0 notamment, où les valeurs de r1 et r2 étaient erronés)
Code: |
> NbRac:=proc(a,b,c)
> local P,x,delta,m,r1,r2:
>
> P:=proc(a,b,c,X) X^3+a*X^2+b*X+c end proc:
>
> use RealDomain in
> m:=-a/3+(a^3/27-c)^(1/3):
> delta:=4*a^2-12*b:
>
> if delta<0 then print("P a une seule racine réelle, qui est simple")
>
> elif delta=0 then
> if c=a^3/27 then print("P a une racine réelle triple égale à "||m)
> else print("P a une seule racine réelle, qui est simple, égale à "||m)
> fi:
>
> elif delta>0 then r1:=-a/3-sqrt(delta)/6: r2:=-a/3+sqrt(delta)/6:
> if evalf(P(a,b,c,r1))>0 and evalf(P(a,b,c,r2))<0 then print("P a trois racines réelles simples")
> elif (evalf(P(a,b,c,r1))>0 and evalf(P(a,b,c,r2))>0) or (evalf(P(a,b,c,r1))<0) then print("P a une racine réelle") elif (evalf(P(a,b,c,r1))=0 or evalf(P(a,b,c,r2))=0) then print("P a une racine réelle simple et une racine réelle double")
> fi:
>
> fi:
> end
> end:
>
> NbRac(2,-1,-2);
"P a trois racines réelles simples"
> NbRac(-2,1,-2);
"P a une racine réelle"
> NbRac(-4,5,-2);
"P a une racine réelle simple et une racine réelle double"
> NbRac(-5,8,-4);
"P a une racine réelle simple et une racine réelle double"
> NbRac(1/2,-17/2,7);
"P a trois racines réelles simples"
> NbRac(-6,12,-8);
"P a une racine réelle triple égale à 2"
> NbRac(3,3,9);
"P a une seule racine réelle, qui est simple, égale à -3"
|
@+ |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 21 Avr 2007 12:50 Sujet du message: |
|
|
Bonjour ALS!!
Tout d'abord merci de votre aide!
J'aurais une question, pouvez vous m'expliquer le fonctionnement de "use RealDomain in " ...
Et autre chose, existe t-il un moyen de metre ceci au sein meme de la procedure:" P:=proc(a,b,c,X) X^3+a*X^2+b*X+c end proc: "
je veux dire par la ne peut-on pas définir P aprés les local?
(n'étant pas chez moi,je ne peux tester ce que je dis sur maple)
Merci encore de votre aide et de votre aimabilité!
 |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 22 Avr 2007 9:13 Sujet du message: |
|
|
Bonjour,
use RealDomain in ... end use
Extrait de l'aide:
Citation: |
By default, Maple performs computations under the assumption that the underlying number system is the complex field. The RealDomain package provides an environment in which computations are performed under the assumption that the basic underlying number system is the field of real numbers.
|
Citation: |
je veux dire par la ne peut-on pas définir P aprés les local?
|
A mon avis non, P est le nom d'une procédure locale à la procédure principale. Si vous ne voulez pas de procédure P vous pouvez remplacer ces lignes par :
P:=unapply(X^3+a1*X^2+b1*X+c1,a1,b1,c1,X)
(et non pas a,b,c,X, car dans unapply on doit avoir des type name pour ces variables) et déclarer toujours P en local.
A+ |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 22 Avr 2007 12:29 Sujet du message: |
|
|
Re
ok merci ALS, encore une derniere question,si je fais
P:=unapply(X^3+a1*X^2+b1*X+c1,a1,b1,c1,X)
ça va changer dans la suite de la procedure les notations n'est-ce pas?
je veux dire que je déclare P en local et aprés au lieu de a,b,c j'aurais a1,b1,c1...
est-ce cela?
Merci encore de la rapidité de votre aide.  |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 22 Avr 2007 14:51 Sujet du message: |
|
|
Non, pas du tout: unapply transforme l'expression en une fonction des 4 variables a1,b1,c1,X.
Donc pour la suite, ne rien changer: laisser dans les lignes suivantes a,b,c,X.
@+ |
|
Revenir en haut de page |
|
 |
robby3
Inscrit le: 10 Oct 2006 Messages: 21 Localisation: bordeaux
|
Posté le: 22 Avr 2007 14:55 Sujet du message: |
|
|
ah ok d'accord au temps pour moi,je ne connaissais pas cette aplication unnaply,je m'en suis servi juste une fois pour les fonctions je crois...et encore j'en ai qu'un vague souvenir...
Merci bien de votre aide ALS et bonne journée à vous,à trés bientot sur votre forum.  |
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|