Maple et sturm

Discutez d'informatique ici !
jeremy58
Membre Naturel
Messages: 87
Enregistré le: 01 Nov 2006, 14:45

maple et sturm

par jeremy58 » 26 Mai 2007, 11:22

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



VPE
Membre Naturel
Messages: 54
Enregistré le: 11 Mai 2007, 10:34

par VPE » 27 Mai 2007, 22:09

Bonsoir,
D'abord je n'ai encore jammais utilisé maple alors pour commencer :
> if w=0
> then RETURN()
> elif w=1 then L
> else m:=(L[1]+L[2])/2;

=> "elif" est t-il une instruction existante ? ou est-ce que cela devrai étre :
> elseif w=1 then L
A vrai dire je ne sais meme pas si elseif existe dans ce language mais comme le "elif" est suivit d'un "then" cela me fait plutot penser a un "endif".
Autrement dit :

Si w = 0 alors :
Retourner()
sinon si w = 1 alors aller a L

=>Ensuite :
> [split(Sturm(P,x),[-M,M])];
Est ce que "-M" est cencé représenter l'opposé de M ?
Ni en vb,ni en C et n'as le droit d'utiliser -[Variable] ,il faut utiliser (M * -1) car il sagirai d'une variable nomée "-M" et non "M"
Mais si le language n'autorise que les noms de variables a 1 caractére alors ce serai possible...

De plus certaines lignes comme :
> then n:=n+1
ne sont terminées ni par ";" ni par ":" alors que d'autres lignes,ou il y a une affectation le sont (else m:=(L[1]+L[2])/2;)! Je ne suis pas sur de bien comprendre...

Qu'en est-il ?

PS :Le maple étant un language interprété je suppose qu'il ignore les erreurs au lieu de bloquer dessus et de les indiquer non? Dans ce cas comment sais tu ou elles sont et ou elle ne sont pas ?

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite