Bonjour,
j'ai un programme maple avec deux procedures qui ne tournent pas, n'etant pas très doué en programmation, je ne trouve pas les erreurs.
Pourriez-vous m'aider ou me donner des procedures qui fonctionnent pour que Voila mes procedures
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);
>
Ce sont les procedures Isol_rac et split qui ne fonctionnent pas.
Merci
