[maple] Sturm
Fermé
kmyoooo
-
13 mai 2007 à 00:31
kmje Messages postés 3 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 26 mai 2007 - 26 mai 2007 à 12:06
kmje Messages postés 3 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 26 mai 2007 - 26 mai 2007 à 12:06
A voir également:
- [maple] Sturm
- Maple - Télécharger - Gestion de données
- Maple gratuit - Télécharger - Agendas & Calendriers
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 mai 2007 à 01:18
13 mai 2007 à 01:18
c'est normal for i tout court. Ca serait pas plutot while ... et ensuite tu incrémentes la variable i ?
kmje
Messages postés
3
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
26 mai 2007
26 mai 2007 à 12:06
26 mai 2007 à 12:06
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