In rete: http://www.elegio.it/max/primeprove/prove-con-maxima.html
Prove con Maxima ( aprile 2010)
Ho pochissima memoria ed essendo un principiante nel calcolo simbolico prendo qui un po' di appunti sugli aspetti che al momento mi interessano maggiormente.
- L'estensione dei file di Maxima è .wxm
- Viene fatta distinzione tra le maiuscole e le minuscole e tra i caratteri ammessi oltre ai caratteri alfabetici e alle cifre è incluso il simbolo lineasotto ovvero "_". Per esempio sono assegnazioni lecite:
A_1:23; a_1:17; A_1*a_1;che dà come risultato 391.- L'assegnazione si fa con il ":" mentre la definizione di una nuova funzione si fa col ":=" e la base dei logaritmi naturali è indicato da %e. Invece π viene indicato con %pi e la costante di Eulero Mascheroni viene indicata con %gamma.
a: x^4-y^4; f(x):= (%e)^(-x)*((%e)^x-1)^(1/3);- Se l'istruzione termina col carattere ";" il risultato viene visualizzato mentre se l'istruzione termina col carattere "$" la stampa del risultato viene omessa. Ovviamente quando si programma in Maxima i risultati intermedi non interessano e in certi casi il risultato, ad esempio una matrice, occuperebbe tanto spazio di stampa che Maxima non può materialmente mostrarlo. Dunque il carattere $ è molto utile...
A_1:23$ a_1:17$ A_1*a_1;compare solo il risultato ossia 391.- Le liste ( graficamente simili ai vettori in Javascript ) si fanno scrivendo espressioni separate da virgole e racchiusi in parentesi quadre:
vettore1: [x^2-y, y^3-x^3, 12]; length(vettore1); vettore[3];La lunghezza di una lista si trova con la funzione length( ... ) ma fare attenzione al fatto che la numerazione parte da 1 come in Fortran e non da 0 come in Javascript o in C. Col terzo comando qui riportato si è visualizzato il terzo ed ultimo elemento della lista vettore1.- Per risolvere sistemi di equazioni lineari si usa la funzione linsolve(... , ...) che richiede due liste, la prima quella che contiene l'elenco delle equazioni e la seconda quella che specifica quali simboli vanno considerati come variabili... del sistema lineare. Per esempio:
equazione1: 3*x+4*y=7$ equazione2: 2*x+3*y=13$ linsolve( [equazione1,equazione2] , [x,y]);Notare che nel definire le due equazioni ho usato il carattere $ invece del carattere ; per sopprimere le stampe intermedie.- Con la funzione solve( ... , ... ) possono essere risolti sistemi o singole equazioni non lineari come, per esempio, una equazione di terzo grado o di quarto grado ( ricordare che fino al quarto grado le equazioni sono risolvibili simbolicamente, ma non oltre ):
solve( x^4-2*x^3+22*x^2-50*x=75 , x );che dà come risultato la seguente lista delle radici: [x=3,x=-1,x=-5*%i,x=5*%i]. Notare che l'unità immaginaria viene indicata con %i.- Le matrici si fanno usando matrix(...) contenente l'elenco delle liste che rappresentano le righe della matrice. Tutte le liste debbono avere la stessa lunghezza ovvero numero di elementi, come è appunto richiesto per una qualsiasi matrice rettangolare:
miama : matrix( [5,-1,-2],[-1,4,7],[-2,7,3]); matrixp(miama);Con la funzione matrixp( ) si controlla se la variabile è effettivamente una matrice e se si il risultato è true.- Il prodotto tra matrici si fa usando l'operatore dot ovvero il punto. Ad esempio la matrice identità si può ottenere nel seguente modo ( ossia moltiplicando la matrice per la sua inversa ):
invert(miama).miama;- I numeri in virgola mobile si ottengono usando b come indicatore dell'esponente ( in Javascript, Fortran e C si usa e ) per cui 1000 può essere scritto come 1b3. E' ammesso anche l'esponente e ma ha precisione limitata e non multipla.
La variabile fpprec inizialmente impostata a 16 specifica il numero di cifre significative ma può essere impostata ad un valore più alto... mentre la funzione bfloat(...) calcola il valore in argomento usando tante cifre significative quanto è il valore di fpprec.fpprec:60; bfloat(%e);fornisce come risultato: 2.71828182845904523536028747135266249775724709369995957496697b0- Gli elementi di una matrice possono essere acceduti con l'operatore "[ ]" come in Javascript. Pertanto si può popolare una matrice nel seguente modo classico:
ma: matrix([0,0,0,14],[0,0,0,0],[0,0,9,0],[0,0,0,11]); ma[1][1]:1; ma[1][2]:3; ma[2][1]:5; ma[2][2]:7; ma;che visualizza la matrice:Notare che il primo indice è l'indice di riga mentre il secondo è l'indice di colonna e la numerazione di righe e colonne parte da 1 come in Fortran e non da 0 come in Javascript o in C.
┌
│
│
│
│
└1 3 0 14 ┐
│
│
│
│
┘5 7 0 0 0 0 9 0 0 0 0 11
Notare che per accedere ad un elemento si può anche scrivere ma[1,1] invece che ma[1][1] e se si fosse scritto ma[1] si sarebbe ottenuta la lista dell'intera prima riga.- Per derivare una formula rispetto ad una data variabile, ad esempio x, si usa la funzione diff(formula,x) oppure diff(formula,x,2) se si vuole la derivata seconda. Per esempio provare:
yy: sin(3*x)*x^(-2); diff(yy,x); diff(yy,x,2);Notare che in questo caso la dipendenza di yy da x è stata definita in modo esplicito. Maxima però consente si indicare che una data grandezza dipende genericamente da una data variabile, come x ed in questo modo è possibile esprime simbolicamente le derivate della grandezza.- Per esprime il fatto che, ad esempio, la variabile r dipende dalle variabili x, y e z, piuttosto che scrivere esplicitamente r : (x^2+y^2+z^2)^(1/2) può essere preferibile usare la funzione depends( ... , ... ) nel seguente modo:
derivabbrev: true; depends( r, [x, y, z]); diff(r,x);che dà come risultato r(x, y, z) per cui applicandoci la derivata parziale rispetto ad x il risultato non è più nullo ma viene indicato in modo simbolico. Se, come si è fatto, derivabbrev vale true le derivate parziali vengono indicate con indici ossia, in questo caso rx, altrimenti, e di default, la derivata viene espressa nella classica notazione di Leibniz ovvero dr/dx.- L'operazione di derivazione, applicata ad una lista o ad una matrice viene eseguita su tutti gli elementi della lista e della matrice.
Per semplificare espressioni complesse usare la funzione ratsimp(...).Per esempio:v1: [ (x^2-y^2)/(x+y)^2, (x^3+y^3)/(x^2-y^2) ]; ratsimp(v1);fornisce, come è ragionevole, [ (x-y)/(x+y), (x^2-x*y+y^2)/(x-y) ].- L'integrazione di una funzione della variabile x si fa usando la funzione integrate(funzione,x). Per esempio:
integrate(1/sqrt(x^2+ac*x+bc),x);Se il determinante ossia 4*bc-ac^2 risulta zero il risultato è log(2*x+ac) mentre se non lo è il risultato è log(2*sqrt(x*x+ac*x+bc)+2*x+ac) ma va notato che questa seconda formula include il caso particolare a meno di una costante che è inessenziale nell'integrazione indefinita. Da notare che Maxima fa uso anche dell'arco del seno iperbolico ossia asinh(y) che corrisponde a log(sqrt(y*y+1)+y) ma sembra non essere in grado di riconoscere questa identità.- Per sostituire un valore numerico o una data espressione nuova al posto di un simbolo usato in una formula ( per ipotesi contenente la variabile x ) si usa la funzione subst(nuova,x,formula). Per esempio:
subst(3/4,x,log(sqrt(x*x+1)+x));deve dare come risultato log(2).
Il sito di Maxima si trova qui:
http://maxima.sourceforge.net/
Per scaricare Maxima GRATUITAMENTE usare il sito:
http://sourceforge.net/projects/maxima/
Opinioni...
Maxima is great for a free computer algebra system. It's not as good as Mathematica ( http://it.wikipedia.org/wiki/Mathematica ) or Maple ( http://it.wikipedia.org/wiki/Maple ), but then again, it's free. It's quite useful as an occasional scratchpad.
Per calcoli da ... calcolatrice... però trovo pratica la mia, semplicissima, basata su Javascript: http://www.elegio.it/calcolatrice/
Alcune immagini orientative
Videata di Maxima
Il manuale in linea
Una prova per imparare l'I/O
Vari modi di salvare documenti .wxm e loro risultati
Per rendere scaricabili via rete i documenti .wxm aggiungo l'estensione .txt in modo che i browser di internet li riconoscano come documenti di solo testo.
Poi una volta scaricato sul PC il documento va ovviamente rinominato eliminando l'estensione .txt e lasciando quella .wxm ossia la standard.
modello-di-linearizzazione-della-rg.wxm.txt
Naturalmente è possibile salvare su stampante il risultato dei calcoli. Avendo io installato sul mio PC la stampante virtuale fornita gratuitamente da CutePDF ho potuto stampare virtualmente il documento ossia generare un file PDF simile al documento che avrei ottenuto con una stampante reale.
modello-di-linearizzazione-della-rg-v0.pdf
L'interfaccia grafica di Maxima consente però di esportare i risultati generando un documento HTML corredato da una miriade di immagini .png contenenti i risultati ottenuti:
modello-di-linearizzazione-della-rg-export.html
Il difetto del modo di esportazione usato è quello di generare troppe immagini .png che vanno conservate in una apposita cartella ausiliaria. Questo è piuttosto scomodo se si voglio inviare via posta elettronica i risultati... ma naturalmente è possibile fare una stampa virtuale del documento HTML ed ottenere un file PDF contenente tutto quello che serve:
modello-di-linearizzazione-della-rg-export.pdf
Insomma usando assiee a Maxima anche una stampante virtuale come http://www.cutepdf.com/ si possono documentare ottimamente i propi calcoli ( ed anche eventualmente riusare le formule che Maxima genera come immagini .png ).