Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

racines et multiplicté d'un polynome de degré 3

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 19 Avr 2007 18:38    Sujet du message: racines et multiplicté d'un polynome de degré 3 Répondre en citant

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. Embarassed
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 20 Avr 2007 1:14    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 20 Avr 2007 1:29    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
zozo



Inscrit le: 03 Jan 2013
Messages: 125

MessagePosté le: 20 Avr 2007 8:57    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 20 Avr 2007 11:56    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 20 Avr 2007 18:02    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 20 Avr 2007 18:14    Sujet du message: Répondre en citant

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.
Crying or Very sad Embarassed
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 21 Avr 2007 9:27    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 21 Avr 2007 12:50    Sujet du message: Répondre en citant

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é!
Embarassed Smile
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 22 Avr 2007 9:13    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 22 Avr 2007 12:29    Sujet du message: Répondre en citant

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. Embarassed
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 22 Avr 2007 14:51    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
robby3



Inscrit le: 10 Oct 2006
Messages: 21
Localisation: bordeaux

MessagePosté le: 22 Avr 2007 14:55    Sujet du message: Répondre en citant

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. Very Happy
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
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


phpBB

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.