[maple] Sturm
kmyoooo
-
kmje Messages postés 3 Statut Membre -
kmje Messages postés 3 Statut Membre -
bonjour, j'ai une erreur dans mes deux programmes maple et j'ai beau les relire je ne vois pas ou sont les erreurs.
1er programme:pgcd de deux polynomes:
euclide:=proc(P,Q)
> local i,R;
> R[0]:=P;
> R[1]:=Q;
> for i
> while R[i] <> 0 do
> R[i+1]:=rem(R[i-1],R[i],x):
> od:
> R[i-1];
> end proc:
2eme programme:theoreme de sturm:
Changement de signe entre a et b
> ch_sgn:=proc(L)
> local i,x,R,n;
> R:=remove(x->(x=0),L);
> n:=0;
> for i from 2 to nops(R) do
> if R[i-1]*R[i]<0
> then n:=n+1
> fi;
> od:
> n;
> end proc:
Si un polynomes a des racines multiples
> rac_simple:=proc(P)
> local Q,R;
> Q:=quo(P,gcd(P,diff(P,x)),x):
> R:=factor(Q):
> end proc:
Suites de sturm
> Sturm:=proc(P)
> local i,R,L;
> R[0]:=P;
> R[1]:=-diff(P,x);
> L:=R[0],R[1];
> for i
> while(R[i]<>0) do
> R[i+1]:=-rem(R[i-1],R[i],x);
> L:=L,R[i+1];
> od:
> [L];
> end proc:
Nombre de changement de signe si on evalue le polynome en a
> Cal_val:=proc(P,a)
> ch_sgn(subs({x=a},P));
> end proc:
> P:=(x-1)*(x+2)*(x-3);
> print(`la factorisation du polynôme est ` ,factor(P));
> plot(P(x),x=-10..10,color=green);
> Q:=rac_simple(P);
> print(` `);
> print(`La suite de Sturm est :`);
> S:=Sturm(Q);
> print(`Le nombre de changement de signe dans cette suite est :`);
> M:=Cal_val(S,0);
> print(`représentation graphique de la suite de Sturm de notre polynome P :`);
> plot(x->Cal_val(S,x),-4..4);
> print(`Le nombre de racines réelles est :`);
> m:=Cal_val(P,4)-Cal_val(P,-4);
Merci beaucoup
1er programme:pgcd de deux polynomes:
euclide:=proc(P,Q)
> local i,R;
> R[0]:=P;
> R[1]:=Q;
> for i
> while R[i] <> 0 do
> R[i+1]:=rem(R[i-1],R[i],x):
> od:
> R[i-1];
> end proc:
2eme programme:theoreme de sturm:
Changement de signe entre a et b
> ch_sgn:=proc(L)
> local i,x,R,n;
> R:=remove(x->(x=0),L);
> n:=0;
> for i from 2 to nops(R) do
> if R[i-1]*R[i]<0
> then n:=n+1
> fi;
> od:
> n;
> end proc:
Si un polynomes a des racines multiples
> rac_simple:=proc(P)
> local Q,R;
> Q:=quo(P,gcd(P,diff(P,x)),x):
> R:=factor(Q):
> end proc:
Suites de sturm
> Sturm:=proc(P)
> local i,R,L;
> R[0]:=P;
> R[1]:=-diff(P,x);
> L:=R[0],R[1];
> for i
> while(R[i]<>0) do
> R[i+1]:=-rem(R[i-1],R[i],x);
> L:=L,R[i+1];
> od:
> [L];
> end proc:
Nombre de changement de signe si on evalue le polynome en a
> Cal_val:=proc(P,a)
> ch_sgn(subs({x=a},P));
> end proc:
> P:=(x-1)*(x+2)*(x-3);
> print(`la factorisation du polynôme est ` ,factor(P));
> plot(P(x),x=-10..10,color=green);
> Q:=rac_simple(P);
> print(` `);
> print(`La suite de Sturm est :`);
> S:=Sturm(Q);
> print(`Le nombre de changement de signe dans cette suite est :`);
> M:=Cal_val(S,0);
> print(`représentation graphique de la suite de Sturm de notre polynome P :`);
> plot(x->Cal_val(S,x),-4..4);
> print(`Le nombre de racines réelles est :`);
> m:=Cal_val(P,4)-Cal_val(P,-4);
Merci beaucoup
A voir également:
- [maple] Sturm
- Maple - Télécharger - Gestion de données
- Maple Professional - Télécharger - Agendas & Calendriers
2 réponses
c'est normal for i tout court. Ca serait pas plutot while ... et ensuite tu incrémentes la variable i ?
Bonjour,
merci de m'avoir repondu ce programme fonctionne maintenant, par contre j'ai un soucis avec la suite, quand je dois isoler les racines.
Changement de signe entre a et b
> ch_sgn:=proc(L)
> local i,x,R,n;
> R:=remove(x->(x=0),L);
> n:=0;
> for i from 2 to nops(R) do
> if R[i-1]*R[i]<0
> then n:=n+1
> fi;
> od:
> n;
> end proc:
Cas de Sturm si racines multiples
> rac_simple:=proc(P)
> local Q,R;
> Q:=quo(P,gcd(P,diff(P,x)),x):
> R:=factor(Q):
> end proc:
Calcul suites de Sturm
> Sturm:=proc(P)
> local i,R,L;
> R[0]:=P;
> R[1]:=-diff(P,x);
> L:=R[0],R[1];
> for i
> while (R[i]<>0) do
> R[i+1]:=-rem(R[i-1],R[i],x);
> L:=L,R[i+1];
> od:
> [L];
> end:
>
Nombre de Changement de signe si on evolue le polynome en a
> Cal_val:=proc(P,a)
> ch_sgn(subs({x=a},P));
> end proc:
>
Nombre de racines dans [a,b[
> Nb_rac:=proc(P,a,b)
> local N;
> N:=Cal_val(P,b)-Cal_val(P,a);
> end proc:
>
Procedure qui renvoie la liste créée par Sturm
> List_Sturm:=proc(S,a,b)
> local w;
> Cal_val(S,b)-Cal_val(S,a);
> end proc:
Isolement des racines
> Isol_Rac:=proc(P,x)
> local M,N,d;
> M:=map(abs,[coeff(P,x)]);
> print(a);
> N:=evalf(1+max(op(M))/abs(lcoeff(P,x)));
> print(N);
> [split(Sturm(P,x),[-M,M])];
> end proc:
>
>
Procedure qui recoit la liste S créée par Sturm à partir du polynome initial P et un intervalle L
> split:=proc(S,L)
> local m,w;
> print(e);
> w:=List_Sturm(S,L[1],L[2]);
> print(w);
> print(f);
> if w=0
> then RETURN()
> elif w=1 then L
> else m:=(L[1]+L[2])/2;
> split(S,[L[1],m],d),split(S,[m,L[2]],d);
> print(g);
> fi;
> end proc:
Essai
> P:=x**7-5*x**3+12;
> print(`la factorisation du polynôme est ` ,factor(P));
> plot(P(x),x=-10..10,color=green);
> Q:=rac_simple(P);
> print(` `);
> print(`La suite de Sturm est :`);
> S:=Sturm(Q);
> print(`Le nombre de changement de signe dans cette suite est :`);
> M:=Cal_val(S,0);
> print(`représentation graphique de la suite de Sturm de notre polynome P :`);
> plot(x->Cal_val(S,x),-2..0);
> Isol_Rac(P,x);
Les premieres procedures fonctionnent sans probleme par contre les deux dernieres Isol_Rac et split que mon prof m'a donné ne fonctionnent pas. Comme j'ai énormément de mal avec maple, j'ai passé des heures à chercher l'erreur et sans résultat. Pourriez vous m'aider à faire fonctionner ces deux procedures. ou peut-etre que quelqu'un à deja travailler sur ca et a des procedures d'isolement qui fonctionnent?
Merci
merci de m'avoir repondu ce programme fonctionne maintenant, par contre j'ai un soucis avec la suite, quand je dois isoler les racines.
Changement de signe entre a et b
> ch_sgn:=proc(L)
> local i,x,R,n;
> R:=remove(x->(x=0),L);
> n:=0;
> for i from 2 to nops(R) do
> if R[i-1]*R[i]<0
> then n:=n+1
> fi;
> od:
> n;
> end proc:
Cas de Sturm si racines multiples
> rac_simple:=proc(P)
> local Q,R;
> Q:=quo(P,gcd(P,diff(P,x)),x):
> R:=factor(Q):
> end proc:
Calcul suites de Sturm
> Sturm:=proc(P)
> local i,R,L;
> R[0]:=P;
> R[1]:=-diff(P,x);
> L:=R[0],R[1];
> for i
> while (R[i]<>0) do
> R[i+1]:=-rem(R[i-1],R[i],x);
> L:=L,R[i+1];
> od:
> [L];
> end:
>
Nombre de Changement de signe si on evolue le polynome en a
> Cal_val:=proc(P,a)
> ch_sgn(subs({x=a},P));
> end proc:
>
Nombre de racines dans [a,b[
> Nb_rac:=proc(P,a,b)
> local N;
> N:=Cal_val(P,b)-Cal_val(P,a);
> end proc:
>
Procedure qui renvoie la liste créée par Sturm
> List_Sturm:=proc(S,a,b)
> local w;
> Cal_val(S,b)-Cal_val(S,a);
> end proc:
Isolement des racines
> Isol_Rac:=proc(P,x)
> local M,N,d;
> M:=map(abs,[coeff(P,x)]);
> print(a);
> N:=evalf(1+max(op(M))/abs(lcoeff(P,x)));
> print(N);
> [split(Sturm(P,x),[-M,M])];
> end proc:
>
>
Procedure qui recoit la liste S créée par Sturm à partir du polynome initial P et un intervalle L
> split:=proc(S,L)
> local m,w;
> print(e);
> w:=List_Sturm(S,L[1],L[2]);
> print(w);
> print(f);
> if w=0
> then RETURN()
> elif w=1 then L
> else m:=(L[1]+L[2])/2;
> split(S,[L[1],m],d),split(S,[m,L[2]],d);
> print(g);
> fi;
> end proc:
Essai
> P:=x**7-5*x**3+12;
> print(`la factorisation du polynôme est ` ,factor(P));
> plot(P(x),x=-10..10,color=green);
> Q:=rac_simple(P);
> print(` `);
> print(`La suite de Sturm est :`);
> S:=Sturm(Q);
> print(`Le nombre de changement de signe dans cette suite est :`);
> M:=Cal_val(S,0);
> print(`représentation graphique de la suite de Sturm de notre polynome P :`);
> plot(x->Cal_val(S,x),-2..0);
> Isol_Rac(P,x);
Les premieres procedures fonctionnent sans probleme par contre les deux dernieres Isol_Rac et split que mon prof m'a donné ne fonctionnent pas. Comme j'ai énormément de mal avec maple, j'ai passé des heures à chercher l'erreur et sans résultat. Pourriez vous m'aider à faire fonctionner ces deux procedures. ou peut-etre que quelqu'un à deja travailler sur ca et a des procedures d'isolement qui fonctionnent?
Merci