Page 1 of 1

Probleme variable non définie

Unread postPosted: 21 Jun 2013, 00:10
by skini26
Salut,

J'ai un probleme qui peut etre est tres simple à résoudre mais dont je ne trouve pas de solution.

Je fais un programme sur ma nspire cas, toutes mes variables définies en local dans le programme peuvent avoir une valeur attribuée avec le ":=" sauf mon expression.
Le programme s’arrête au premier y:= et me génère l'erreur de variable non définie.
( j'ai essayé de changé le nom de ma variable, la mettre entre parenthèses, lui donner une valeur bidon pour lui redonner la valeur que je veux, etc. mais il me dit toujours variable non définie ).

Voici le code :

Code: Select all
Define LibPub mhsamor()=
Prgm
:Local y,c1c2,x0,x1,y0,y1,m,m1,m2,y,c,k,x,t,condi,edo,solg,solp,zeross,w,a,phase,p,f,c1,c2,a,b
:
:Request "m*y'' +c*y'+ k*y = 0 : m = ?",m
:Request "m*y'' + c*y'+ k*y = 0 : c = ?",c
:Request "m*y'' + c*y'+ k*y = 0 : k = ?",k
:Request "Condition initiale ? (1=OUI / 0=NON)",condi
:
:Disp "Solution homogene :"
:Disp "Equation caract. : "&string(m)&"r²+"&string(c)&"r+"&string(k)&"=0"
:zeross:=cSolve(m*r*r+c*r+k=0,r)
:Disp zeross
:
:If c^(2)-4*m*k>0 Then
:  Disp "Situation de sur amortissement c^2-4mk>0"
:  m1:=zeross[1]
:  m2:=zeross[2]
:  y:=c1*e^(m1*t)+c2*e^(m2*t)   :warning:
:  Disp "Solution generale :"
:  Disp y
:EndIf
:
:If c^(2)-4*m*k=0 Then
:Disp "Situation de amortissement critique c^2-4mk=0"
:m:=zeross[1]
:y:=c1*e^(m*t)+c2*t*e^(m*t)
:Disp "Solution generale :"
:Disp y
:EndIf
:
:If c^(2)-4*m*k<0 Then
:  Disp "Situation de sous amortissement c^2-4mk<0"
:  m1:=zeross[1]
:  m2:=zeross[2]
:  a:=real(m1)
:  b:=imag(m1)
:  y:=^(a*t)*(c1*cos(b*t)+c2*sin(b*t))
:  Disp "Solution generale :"
:  Disp y
:EndIf
:
:If condi=1 Then
:   Request "y(x) =y0 : x ?",x0
:   Request "y(x) =y0 : y ?",y0
:   Request "y'(x) =y1 : x ?",x1
:   Request "y'(x) = y1 : y ?",y1
:
:   c1c2:=solve(system((y|t=x0)=y0,(y|t=x1,t)=y1),{c1,c2})
:   c1:=c1c2[1]
:   c2:=c1c2[2]
:
:   Disp "Solution particuliere :"
:   Disp y
:EndIf
:EndPrgm


Merci.

Re: Probleme variable non définie

Unread postPosted: 21 Jun 2013, 00:24
by AnToX98
Ou est-ce que ton programme s'arrete ?

Re: Probleme variable non définie

Unread postPosted: 21 Jun 2013, 00:25
by AnToX98
As-tu bien enregistré ton code avec :nsct: + :nsb:

Re: Probleme variable non définie

Unread postPosted: 21 Jun 2013, 00:43
by AnToX98
Mais oui c'est logique.

Meme si tu definit tes variables avec "local", tu doit obligatoirement leur donner une valeur avec :nsva: (sto) ou :nsab: (:=)

Mais si tu veux veut exprimer quelque chose en fonction d'une variable qui n'a pas de valeur, ne definie pas tes variables en local :

Ce code :

Code: Select all
Prgm
y:=a*b
Disp y
EndPrgm


M'affiche a*b

Tes variables c1 et c2 sont definies en local mais n'ont pas de valeur. Donc si tu as envie d'exprimer y en fonction de c1 et c2, ne definie pas ces variables en local.

En esperant de t'avoir éclaircit, AnToX98

Re: Probleme variable non définie

Unread postPosted: 21 Jun 2013, 01:05
by skini26
Merci beaucoup à vous tous.
AntoX98 je te remercie je comprend maintenant :)

Re: Probleme variable non définie

Unread postPosted: 21 Jun 2013, 01:15
by skini26
Une autre petite question, saurais tu comment extraire un nombre du résulat de Solve lorsque celui ci me donne comme résultat : "unnombre1" ou "unnombre2"
Lorsque ça me donne deux solutions, elles sont stockées dans un tableau (exemple [5 10] ), mais lorsque c'est une solution double ( par exemple : +2 or -2 ), le resultat est égal à : +2 or -2

Dans mon cas, je ne peux extraire la partie imaginaire de mon nombre complexe en faisant imag(zeross[1]) ça me donne cela :
Code: Select all
imag((r=−√(2)* or r=√(2)*)[1])

Re: Probleme variable non définie

Unread postPosted: 21 Jun 2013, 08:55
by critor
Utilise zeros(gauche-droite,...) au lieu de solve(gauche=droite,...).

zeros() renvoie une liste qui sera donc facile à extraire.

Re: Probleme variable non définie

Unread postPosted: 24 Jun 2013, 14:34
by Bisam
Tu peux aussi utiliser la fonction "exp>list" après la fonction "solve".
Elle sert justement à transformer la réponse donnée par un "solve" en une liste des valeurs possibles.