Μάθημα 2 : Μεταβλητές

> x = 4; #δεν γινεται αυτό που περιμένω

x = 4

> eval(x);

x

> evalf(x);

x

> x:=7; # τώρα μάλιστα

x := 7

> x;

7

> 2*x;

14

> x^2;

49

> x = x+10; # ασυναρτισίες

7 = 17

> x:=x+10; # τώρα μάλιστα

x := 17

> y := x^2;

y := 289

> evalf(x+y);

306.

> w := x + y;

w := 306

> x; y; w;

17

289

306

Eάν αλλάξω την τιμή του x, πρέπει να τρέξω και τις εντολές που ορίζουν τα y, w, γιά να έχω τις αντίστοιχες τιμές

> N:=5;

N := 5

> c := (a+b)**N;

c := (a+b)^5

> expand(c);

a^5+5*a^4*b+10*a^3*b^2+10*a^2*b^3+5*a*b^4+b^5

> a=1; b=1; c;

a = 1

b = 1

(a+b)^5

> a:=1; b:=1;c;

a := 1

b := 1

32

> expand(c);

32

Ανάλογα με τις πράξεις που έχουν προηγηθεί, η μεταβλητή θεωρήται συμβολική ή συγκεκριμένη σταθερά.

> (3*x+5*y)+ (4*x+10*y); # δεν κάνει συμβολική πρόσθεση αλλά αριθμητική

4454

> restart; a := (3*x+5*y); b:= (4*x+10*y);

a := 3*x+5*y

b := 4*x+10*y

H restart καθαρίζει την μνήμη και έτσι τα x, y γίνονται συμβολικές μεταβλητές και οι πράξεις γίνονται κι' αυτές συμβολικά.

> c := a*b; expand(c );

c := (3*x+5*y)*(4*x+10*y)

12*x^2+50*x*y+50*y^2

> d:=c*(a+b);

d := (3*x+5*y)*(4*x+10*y)*(7*x+15*y)

> expand(d);

> d;

> d:=expand(d);

84*x^3+530*x^2*y+1100*x*y^2+750*y^3

(3*x+5*y)*(4*x+10*y)*(7*x+15*y)

d := 84*x^3+530*x^2*y+1100*x*y^2+750*y^3

> factor(d);

2*(7*x+15*y)*(5*y+2*x)*(3*x+5*y)

> e:= d+(a*x+5)*(b*x+2);

e := 84*x^3+530*x^2*y+1100*x*y^2+750*y^3+((3*x+5*y)...

> factor(e);

84*x^3+530*x^2*y+1100*x*y^2+750*y^3+12*x^4+50*x^3*y...

Αυτά για μεταβλητές που παριστούν ακεραίους, πραγματικούς αριθμούς . Πάμε τώρα στα διανύσματα. Μεταβλητές που παριστούν ένα όλόκληρο διάνυσμα.

> restart; with(linalg):

Warning, the protected names norm and trace have been redefined and unprotected

> a:=[1, 2, 3, 4, a];

Error, recursive assignment

> a:=[1, 2, 3, 4, b];

a := [1, 2, 3, 4, b]

> b:=10; a;

b := 10

[1, 2, 3, 4, 10]

> b:=[2,2,2];

b := [2, 2, 2]

> b;a;

[2, 2, 2]

[1, 2, 3, 4, [2, 2, 2]]

> b:= 100; a;

b := 100

[1, 2, 3, 4, 100]

> a:=[1,2,3,4,5]; b:=[11,12,13,14,15];

a := [1, 2, 3, 4, 5]

b := [11, 12, 13, 14, 15]

> a+b; # πρόσθεση διανυσμάτων

[12, 14, 16, 18, 20]

> c:= randmatrix(3,3); d:= randmatrix(3,3);

c := matrix([[-85, -55, -37], [-35, 97, 50], [79, 5...

d := matrix([[63, 57, -59], [45, -8, -93], [92, 43,...

> c+d; #δεν δουλεύει η πρόσθεση για πίνακες

c+d

> evalm(%); #αυτό δουλεύει για πίνακες

matrix([[-22, 2, -96], [10, 89, -43], [171, 99, -13...

> evalm(%+transpose(%));

matrix([[-44, 12, 75], [12, 178, 56], [75, 56, -26]...

Mεταβλητές είναι χρήσιμες όταν θέλουμε να κάνουμε διάφορες πράξεις με το ίδιο αντικείμενο.

> restart; with(linalg): a := randmatrix(3,3);

Warning, the protected names norm and trace have been redefined and unprotected

a := matrix([[-85, -55, -37], [-35, 97, 50], [79, 5...

> b:=a+transpose(a);

b := a+matrix([[-85, -35, 79], [-55, 97, 56], [-37,...

> evalm(b);

matrix([[-170, -90, 42], [-90, 194, 106], [42, 106,...

> evalm(b*b);

matrix([[38764, 2292, -12564], [2292, 56972, 27172]...

> c:=inverse(b);

c := matrix([[-27/11317, -553/135804, 737/135804], ...

> d:=matrix(3,1, [10,20,30]);

d := matrix([[10], [20], [30]])

> e:= evalm(c*d);

Error, (in evalm/evaluate) use the &* operator for matrix/vector multiplication

> e:= evalm(c&*d);

e := matrix([[3905/67902], [-11965/203706], [35140/...

> v1:= vector(3,[4,5,6]); v2:= vector(3, [7,8,9]);

vvv:= innerprod(v1,v2);

> www := crossprod(v1,v2);

v1 := vector([4, 5, 6])

v2 := vector([7, 8, 9])

vvv := 122

www := vector([-3, 6, -3])

> innerprod(www,v1); innerprod(www,v2);

0

0

> norm(v1); norm(v2); norm(v1+v2); # Δεν είναι η γνωστή (αυτή βρίσκει την απολύτως μέγιστη συνιστώσα)

6

9

15

> norm(v1,2); norm(v2,2); norm(v1+v2,2);

sqrt(77)

sqrt(194)

sqrt(515)

> det(b);

-3259296

Για πολυώνυμα υπάρχουν ανάλογες χρήσεις των μεταβλητών

> restart; p:= (x+y)^2;

p := (x+y)^2

> op(p);

x+y, 2

> expand(p);

x^2+2*x*y+y^2

> q := p*p; expand(q);

q := (x+y)^4

x^4+4*x^3*y+6*x^2*y^2+4*x*y^3+y^4

> x:=1; y:=2; p;

x := 1

y := 2

9

> expand(p); # εχει πλέον αριθμητική σημασία και όχι συμβολική όπως πρίν

9

> restart; solve(3*x = 4, x);

4/3

> solve( a*x^2+b*x+c =0, x ); # τριώνυμο

1/2*(-b+sqrt(b^2-4*a*c))/a, 1/2*(-b-sqrt(b^2-4*a*c)...

> solve( {a*x+b*y=e, c*x+d*y=f}, {x,y} ); # τομή δύο ευθειών

{y = (a*f-c*e)/(a*d-b*c), x = -(b*f-e*d)/(a*d-b*c)}...

> Equations := {x^2+y^2+a*x+b*y+c=0, e*x+f*y+g=0}; Variables := {x,y};

Equations := {x^2+y^2+a*x+b*y+c = 0, e*x+f*y+g = 0}...

Variables := {x, y}

> solve(Equations, Variables ); #τομή κύκλου και ευθείας

{x = -(f*RootOf((f^2+e^2)*_Z^2+(-a*e*f+2*f*g+b*e^2)...
{x = -(f*RootOf((f^2+e^2)*_Z^2+(-a*e*f+2*f*g+b*e^2)...

> allvalues(%);

{x = -(1/2*f*(a*e*f-2*f*g-b*e^2+sqrt(a^2*e^2*f^2-2*...
{x = -(1/2*f*(a*e*f-2*f*g-b*e^2+sqrt(a^2*e^2*f^2-2*...
{x = -(1/2*f*(a*e*f-2*f*g-b*e^2+sqrt(a^2*e^2*f^2-2*...
{x = -(1/2*f*(a*e*f-2*f*g-b*e^2+sqrt(a^2*e^2*f^2-2*...

> a:=1; b:=5; c:=1; e:=1; f:=1; g:=1; solve(Equations, Variables);

a := 1

b := 5

c := 1

e := 1

f := 1

g := 1

{x = -RootOf(2*_Z^2+6*_Z+1,label = _L17)-1, y = Roo...

> allvalues(%);

{y = -3/2+1/2*sqrt(7), x = 1/2-1/2*sqrt(7)}, {y = -...

>