# Εισαγωγή στο (wx)Maxima σε 10 λεπτά

Καλωσήρθατε στο wxMaxima! Σε αυτό το εισαγωγικό tutorial θα
μάθετε τα βασικά του wxMaxima και του Maxima. Το Maxima είναι
ένα CAS (Computer Algebra System) παρόμοιο με συστήματα όπως
το Mathematica, το Maple και άλλα. Το Maxima, ωστόσο, είναι
ένα πρόγραμμα σε περιβάλλον εντολών, κάτι που το κάνει ελαφρώς
δυσκολότερο στη χρήση σε σχέση με τα νεότερα ξαδέρφια του.
Σε αυτό το σημείο μπαίνει το wxMaxima - είναι ένα Γραφικό
Περιβάλλον (GUI) για το Maxima, το οποίο έχει φτιαχτεί για να
κάνει το Maxima ευκολότερο και πιο απολαυστικό.

Ας ξεκινήσουμε με μερικά απλά παραδείγματα υπολογισμών!
Παρακάτω είναι ένα κελί εισόδου (input) με μια απλή πρόσθεση.
Τοποθετήστε τον κέρσορα μέσα σε αυτό και πατήστε SHIFT-ENTER
για να το υπολογίσετε.

1 + 1;

Εάν δεν προέκυψε κανένα σφάλμα, το Maxima είναι σωστά ρυθμισμένο.
Εάν προέκυψε κάποιο σφάλμα, θα πρέπει να ελέγξετε τις ρυθμίσεις
του wxMaxima ή να επισκεφτείτε την ιστοσελίδα του wxMaxima
(http://wxmaxima.sourceforge.net/) για οδηγίες σχετικά με τη
σωστή εγκατάσταση του wxMaxima και του Maxima!

Θεωρώντας ότι έχετε επιλύσει τυχόν προβλήματα, ας κάνουμε μερικούς
ακόμα υπολογισμούς (ξανά - τοποθετήστε τον κέρσορα στο κελί εισόδου
παρακάτω και πατήστε SHIFT-ENTER για να υπολογίσετε τον κώδικα)!

5!;
% * 10;
%o1 * 100;
1 / 3;
1.0 / 3.0;

Στο παραπάνω κελί εισόδου, στείλαμε 5 "γραμμές" στο Maxima. Κάθε γραμμή
πρέπει να τελειώνει με ένα ";" ή ένα "$". Στην περίπτωση που η γραμμή
τελειώνει με ένα ";", το Maxima θα εμφανίσει το αποτέλεσμα της γραμμής,
ενώ τα αποτελέσματα των γραμμών που τελειώνουν με "$" δεν εμφανίζονται. 
Το "$" είναι χρήσιμο όταν εκτελούνται εκτενέστεροι υπολογισμοί. Σημειώστε
επίσης ότι τα αποτελέσματα του "1/3" και του "1.0/3.0" διαφέρουν. Αυτό
συμβαίνει επειδή το Maxima, σε αντίθεση με άλλα αριθμητικά πακέτα πινάκων
(Matlab κτλ), προσπαθεί να διατηρήσει τους υπολογισμούς ακριβείς - δεν
υπολογίζει εκφράσεις όπως 1/3 ή sqrt(2), εκτός αν του ζητηθεί. Στο
"1.0/3.0" χρησιμοποιήσαμε δεκαδικούς αριθμούς (αριθμούς κινητής υποδιαστολής), 
οπότε το Maxima δεν άφησε τις εκφράσεις χωρίς να τις υπολογίσει.

Μπορούμε, ωστόσο, να πούμε στο Maxima ότι θέλουμε μια προσέγγιση κινητής
υποδιαστολής για μια έκφραση. Υπολογίστε το κελί παρακάτω και παρατηρήστε
τα αποτελέσματα.

sqrt(2 * %pi);
float(%);

Στη γραμμή "float(%);" χρησιμοποιήσαμε το σύμβολο "%". Αυτό το σύμβολο
πάντα αντιστοιχεί στο αποτέλεσμα της τελευταίας γραμμής που υπολογίστηκε.
Αριθμημένα σύμβολα όπως τα "%o1", "%o2" ... αντιστοιχούν στα αποτελέσματα
όπως εμφανίζονται μετά τον υπολογισμό των κελιών εισόδου. Μπορούμε επίσης
να αποθηκεύσουμε, όχι μόνο αριθμούς, αλλά και ολόκληρες εκφράσεις σε μεταβλητές.
Χρησιμοποιήστε μια εντολή της μορφής "όνομα_μεταβλητής: τιμή;" για να
δώσετε τιμή στην "όνομα_μεταβλητής". Υπολογίστε το παρακάτω κελί
και παρατηρήστε τα αποτελέσματα.

radius: 10 $
height: 100 $
area: %pi * radius^2;
volume: area * height;

Ας υπολογίσουμε το τελευταίο αποτέλεσμα αριθμητικά:

float(%);

Μέχρι τώρα χρησιμοποιήσαμε το Maxima μονάχα σαν μια απλή αριθμομηχανή.
Τώρα ας προσπαθήσουμε να κάνουμε πράγματα που δεν είναι δυνατά με μια
αριθμομηχανή. Αόριστα και ορισμένα ολοκληρώματα:

integrate( sin(x), x);
integrate( sin(x), x, 0, %pi);

Ας ορίσουμε μια συνάρτηση, ας την υπολογίσουμε και ας την ολοκληρώσουμε!

f(x) := x^2 + a$
f(5);
f(5), a = -5;
integrate( f(var), var );

Μερικές φορές το Maxima χρειάζεται επιπρόσθετες πληροφορίες για να υπολογίσει
μία έκφραση και μας θέτει κάποιο ερώτημα. Ένας κέρσορας πρέπει να εμφανιστεί
αυτόματα, υποδεικνύοντας ότι χρειάζεται να απαντήσετε μια ερώτηση. Εάν δεν
συμβαίνει αυτό, γράψτε μια απάντηση κάτω από το κελί και στείλτε την στο
Maxima πατώντας SHIFT-ENTER. Σημείωση: αντί να απαντάτε με "positive;",
μπορείτε να πληκτρολογείτε απλώς "p". Να ένα ολοκλήρωμα που οδηγεί σε ερώτηση:

integrate( 1 / (x^2 + a), x);

Μπορούμε επίσης να πληροφορήσουμε το Maxima από πριν χρησιμοποιώντας την
εντολή "assume". Για να επαναφέρετε μια υπόθεση χρησιμοποιήστε την
εντολή "forget".
(Σημείωση: για να λάβετε βοήθεια σε οποιαδήποτε συνάρτηση, απλώς
κάντε κλικ στο όνομα της συνάρτησης και πατήστε F1. Δοκιμάστε το.)

assume(a > 0)$
integrate( 1 / (x^2 + a), x);
forget(a > 0)$

Τώρα που μάθατε τα βασικά, ήρθε η ώρα για μερικά γενικά μαθηματικά
παραδείγματα! Θυμηθείτε: εάν θέλετε να μάθετε περισσότερα για κάποια
συγκεκριμένη συνάρτηση, κάντε κλικ πάνω της και πατήστε F1.

Επίλυση εξισώσεων χρησιμοποιώντας την εντολή solve:

solve(a*x^2 + b*x + c = 0, x);

Γραμμική άλγεβρα. Χρησιμοποιήστε την "matrix" για να δημιουργήσετε πίνακες.
Οι πίνακες μπορούν να περιέχουν μη-αριθμητικές εκφράσεις. Χρησιμοποιήστε
την "invert" για να υπολογίσετε έναν αντίστροφο και την "." για
πολλαπλασιασμό πινάκων.

A: matrix([1,-1],
          [1,sin(c)]);
B: invert(A);

A.B;
ratsimp(A.B);

Στην τελευταία γραμμή χρησιμοποιήσαμε την "ratsimp" για να απλοποιήσουμε
το αποτέλεσμα της "A.B". Το Maxima έχει πολλές διαφορετικές συναρτήσεις
απλοποίησης, ανάλογα με το είδος της απλοποίησης που επιθυμείτε.
Η απλοποίηση είναι ένα περίπλοκο θέμα και εάν δεν ξέρετε τίποτα για αυτό,
η χρήση της "ratsimp" ίσως είναι η καλύτερη επιλογή για εσάς.

Ας κάνουμε ένα 2D και ένα 3D διάγραμμα!

wxplot2d([sin(x), cos(x)], [x,0, 2*%pi]);
wxplot3d( exp(-x^2 - y^2), [x,-2,2],[y,-2,2]);

Ας δοκιμάσουμε παραγώγιση με την συνάρτηση "diff".

f(x) := x^2 $
diff(f(x), x);
g(y) := sin(y)$
g(f(x));
diff( g(f(x)) , x);

Ναι, το Maxima γνωρίζει τον κανόνα της αλυσίδας!

Και, για το τέλος, ας επιλύσουμε μια Συνήθη Διαφορική Εξίσωση (ODE)
δεύτερης τάξης:

y''(t) + ω^2 * y(t) = 0

assume(omega > 0);
ode2( 'diff(y, t, 2) + omega^2 * y = 0, y, t );

ic2(%, t = 0, y = amp, 'diff(y,t) = 0 );

Τώρα πρέπει να αρχίσετε να εξερευνείτε το (wx)Maxima μόνοι σας.
Θυμηθείτε να πατάτε F1 συχνά, εάν θέλετε το Maxima να σας βοηθήσει
να λύσετε τα μαθηματικά σας προβλήματα!

Απολαύστε το Maxima και το wxMaxima!