[maple] Sturm

kmyoooo -  
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
Configuration: Windows XP
Internet Explorer 7.0

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    c'est normal for i tout court. Ca serait pas plutot while ... et ensuite tu incrémentes la variable i ?
    0
  2. kmje Messages postés 3 Statut Membre
     
    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
    0