Maxima restarted
un prompt di input: %i1
[al contrario gli eventuali output
saranno preceduti da %o
x] attendente i nostri comandi [sul
sito leggo che in realtà le label per i prompt prima dell'ultima
versione erano Cx
e Dx
ma non mi pare
importante, comunque è possibile impostare i prompt tramite
inchar:label_voluta;
e outchar:label_voluta;
]. Maxima funziona sia da calcolatrice che da "calcolatore simbolico", ma procediamo per gradi.
NUMER
: variabile booleana che obbliga alcune funzioni [il manuale non dice quali]
con argomenti numerici ad essere esplicitate numericamente [tranne l'esponenziale].
stringout(PATH,INIZIO,FINE)
Per caricarlo invece
batch(PATH);
+ - * /
[prossimamente tabella con priorità operatori] oltre che i meno conosciuti [?]
%PI
ed il numero di nepero indicato
con %E
makelist(espressione,variabile,valore di partenza, valore finale);
per esempio calcoliamoci il numero di Nepero:
e[n]:=(1+1/n)^n$
Nepero: makelist([x,e[x]],x,1,100),numer$
OPENPLOT_CURVES ([["{plotpoints 1}"], Nepero]);
exp( )
e viene rappresentata internamente da %E^x
;
le variabili utili per il suo utilizzo sono DEMOIVRE
:
che permette di passare ad una rappresentazione trigonometrica
della parte immaginaria di un esponenziale [%E^(%I*b)=COS(b)+%I*SIN(b)
],
%ENUMER
che insieme ad NUMER
obbliga maxima a esplicitare il valore numerico della espressione
coinvolgente gli esponenziali.
Esiste inoltre %EMODE
che permette di semplificare
espressioni del tipo %E^(%I*%PI*X)
vect
e poi si possono
effettuare le seguenti operazioni:
A: [a,b,c];
B: [d,e,f];
C: A~B;
express(C);
[b F - c e, c d - a F, a e - b d]
altrimenti come il sottoscritto vagherete per ore senza meta nel manuale per scoprire il perché.
(%i7) e1: x^2+y^2-1; 2 2 (%o7) y + x - 1 (%i8) e2: y-x; (%o8) y - x (%i9) ALGSYS ([e1,e2],[x,y]); 1 1 1 1 (%o9) [[x = - -------, y = - -------], [x = -------, y = -------]] SQRT(2) SQRT(2) SQRT(2) SQRT(2)
limit(funzione,variabile,valore,direzione);
diff(espressione,variabile 1,numero di derivate di variabile 1,..., variabile n, numero derivate variabile n);
(%i5) eq:'diff(x,t,2)+a^2*x=0; 2 d x 2 (%o5) --- + a x = 0 2 dt (%i6) ode2(eq,x,t); Is a zero or nonzero? nonzero; (%o6) x = %K1 SIN(a t) + %K2 COS(a t) (%i14) ic2(%o6,t=0,x=0,diff(x,t)=A); A SIN(a t) (%o14) x = ---------- asi può vedere l'utilizzo di ic2 che serve per settare le condizioni iniziali a variabile indipendente fissata per la variabile dipendente e la sua derivata prima e avere restituiata la soluzione appropriata (esiste anche ic1 utile per le equazioni di primo ordine).
SET_PLOT_OPTION ([PLOT_FORMAT, MGNUPLOT]);
come potete vedrere dall'immagine
set size square
oppure set yrange [ymin:ymax]
per ottenere (bisogna usarli assieme pero`!) un grafico con le proporzioni
uguali (utile per grafici polari).
plot3d(exp(-x^2-y^2),[x,-5,5],[y,-5,5],[gnuplot_pm3d,true],[gnuplot_preamble,"set hidden3d;set palette gray"]);
PLOT2D([JACOBI_SN(x,0),JACOBI_SN(x,0.5),JACOBI_SN(x,1),JACOBI_SN(x,1.5),JACOBI_SN(x,2)],
[x,(-2)*%PI,2*%PI],[GNUPLOT_TERM,PS],[GNUPLOT_OUT_FILE,"/tmp/Maxima_plot.ps"],[GNUPLOT_PREAMBLE,"set xtics ('-2{/Symbol p}' -6.283, '0' 0, '2{/Symbol p}' 6.283, '{/Symbol p}' 3.14 , '-{/Symbol p}' -3.14);set xzeroaxis;set xtics axis;unset border"]);
plot2d([x^5,x,x^2,x^101],[x,-2,2],[gnuplot_preamble,"set grid ;set size square;set yrange [-2:2];set xzeroaxis;set title 'Grafico Funzioni Potenza'"]);
Siccome è ancora sotto sviluppo può succedere che i comandi vadano un pó per i fatti loro, eventualmente provate a dare i comandi in maiuscolo
Trovandomi a dover fare spesso calcoli con metriche varie e spazi non banali, risulta utile per me e i miei colleghi avere strumenti a disposizione per avere risultati certi in pocco tempo e Maxima permette tutto ció; il pacchetti ctensor e itensor aggiornati recentemente da Viktor Toth agiscono in cotal senso e permettono di calcolare (una volta data la metrica) tutti i tensori derivanti da essa secondo due filosofie di calcolo: il primo con un lavoro di componenti e il secondo a livello di indici;
(i1%) load(ctensor);
(o1%) /path/to/home/.maxima/ctensor.mac
nel caso non sia presente nel vostro sistema scaricatelo da Sourceforge; poi si puó immettere una metrica tramite
(%i2) csetup ();
Enter the dimension of the coordinate system:
2;
Do you wish to change the coordinate names?
n;
Do you want to
1. Enter a new metric?
2. Enter a metric from a file?
3. Approximate a metric with a Taylor series?
volete inserire a mano la metrica della sfera (attenzione che di default lui usa x e y come nomi di coordinate)
e quindi rispondete:
1;
Is the matrix 1. Diagonal 2. Symmetric 3. Antisymmetric 4. General
Answer 1, 2, 3 or 4 :
1;
Row 1 Column 1:
R^2;
Row 2 Column 2:
R^2*sin(x)^2;
Matrix entered.
Enter functional dependencies with DEPENDS or 'N' if none
n;
Do you wish to see the metric?
y;
[ 2 ]
[ R 0 ]
[ ]
[ 2 2 ]
[ 0 R SIN (y) ]
(%o2) DONE
Adesso che abbiamo la metrica possiamo sbizzarirci con tutti quei tensori che sognamo la notte: metrica inversa
(%i4) cmetric (all); Do you wish to see the metric inverse? y; [ 1 ] [ -- 0 ] [ 2 ] [ R ] (%t4) [ ] [ 1 ] [ 0 ---------- ] [ 2 2 ] [ R SIN (y) ] (%o4) DONEL'elenco dei tensori:
(%i26) depends(f,[x,y]);
(%o26) [f(x, y)]
(%i28) contragrad (f,g); (%o28) DONE (%i29) LISTARRAY (g); f f x y (%o29) [--, ----------] 2 2 2 x x SIN (y)
(%i3) lriemann(all); 2 (%t3) lriem = SIN (y) 2, 2, 1, 1 (%o3) DONE (%i4) riemann(all); 1 (%t4) riem = - -- 1, 2, 1, 2 2 x 2 SIN (y) (%t5) riem = ------- 2, 2, 1, 1 2 x (%o5) DONE
(%i13) ENTERTENSOR ()$ Enter tensor name: n; Enter a list of the covariant indices: [i]; Enter a list of the contravariant indices: [a,b]; Enter a list of the derivative indices: [h]; a b (%t13) n i,he` possibile avere già dei tensori fatti
tentex()
(da usare avendo caricato preventivamente
il pacchetto omonimo).
for VARIABILE: VALORE_INIZIALE step INCREMENT thru LIMIT do BODY
for VARIABILE:
da cui prendiamo subito un esempio che ci fa capire la situazione:
(%i1) for i:0 step 1 thru 10 do print("la fattorizzazione di ",i," e` ",factor(i));
che restituisce
la fattorizzazione di 0 e` 0 la fattorizzazione di 1 e` 1 la fattorizzazione di 2 e` 2 la fattorizzazione di 3 e` 3 2 la fattorizzazione di 4 e` 2 la fattorizzazione di 5 e` 5 la fattorizzazione di 6 e` 2 3 la fattorizzazione di 7 e` 7 3 la fattorizzazione di 8 e` 2 2 la fattorizzazione di 9 e` 3 la fattorizzazione di 10 e` 2 5 (%o1) DONEOvviamente nulla serveirebbe se non fosse possibile interagire con il sistema: è possibile richidere di inserire dati da console tramite la direttiva read(expr1,...,expr n) e readonly(expr1,...,exprn) che aspettano per una immissione di dati da parte dell'utente come si puó provare con questo script:
limite: read("Inserisci il valore limite della fattorizzazione");
FOR i FROM 0 THRU limite DO PRINT("la fattorizzazione di ",i,"e` ",FACTOR(i))$