wxMaxima
Maxima è un manipolatore algebrico che può funzionare con varie modalità:
- E’ utilizzabile come terminale che interpreta comandi in modo interattivo.
- E’ utilizzabile come un vero e proprio linguaggio di programmazione (interpretato, non compilato come il c).
- Ha un’interfaccia grafica semplice dal terminale, di nome xMaxima.
- Ha un’interfaccia grafica più evoluta, wxMaxima, che facilita l’inserimento dei comandi dal terminale anche ai non esperti.
Come funziona il programma
- Si scrivono i comandi sulle righe di input (%i1), (%i2) numerate progressivamente; alla fine di ogni riga di input premendo i tasti shift+invio, wxMaxima estrapola una riga di output indicata con (%o1), (%o2), con numerazione corrispondente.È inoltre possibile richiamare ogni singola riga attraverso tale etichetta.
- % : il comando viene applicato alla stringa precedente.
- Bisogna sempre terminare i comandi con un “;”. Si noti che wxMaxima inserisce in automatico “;”, possiamo anche terminare un comando con “$”, però in questo caso non ci mostra l’output del comando.
- Premendo solo invio possiamo dividere il comando su più righe.
- La “spaziatura” non implica alcun effetto sul codice, mentre il software distingue tra minuscolo/maiuscolo.
- Premendo Ctrl+R prendiamo in considerazione tutte le caselle di testo.
- Le costanti standard sono entità predefinite nel programma , e si richiamano scrivendo ‘%e’ (numero di Nepero), ‘%pi’ (pi greco), etc.
- wxMaxima distingue l’inserimento di un numero implicitamente esatto (7/2) da un numero reale a precisione finita (3.5), e restituisce coerentemente il valore qualora sia un risultato esatto.
- Possiamo inserire anche celle di testo, dove indicare ciò che stiamo eseguendo.
Alcuni comandi principali
- Per eliminare tutto dobbiamo dare il comando:
Kill (all);
è indicato dare tale comando ogni qual volta si inizia un nuovo lavoro, questo ci permette di eseguire la pulizia della memoria (il server mantiene la memoria dei lanci precedenti). Questo è necessario perché nella memoria vengono tenute tutte le variabili utilizzate ed il sistema non viene riavviato ogni volta che effettuiamo un comando. Con kill (all) andiamo a lavorare in un ambiente vergine.
- Possiamo definire noi stessi delle variabili standard, tipo :
pippo : 3*pluto
In questo modo possiamo richiamare pippo ogni qual volta ci serve.
- Se ad un certo punto vogliamo eliminare la variabile definita, diamo il comando :
kill ( pippo )
- Possiamo eseguire anche valutazioni concatenate, del tipo :
La valutazione di una riga è un operazione implicita del Maxima, che processa ('valuta') ogni riga secondo le sue regole interne. Posso però chiedere di valutare una determinata espressione in un certo modo aggiungendo delle opzioni o delle ipotesi.
- Se dobbiamo eseguire più valutazioni concatenate possiamo dare il comando :
ev ( ev ( ev (………..)));
- Esiste un alternativa per non scrivere più volte ev :
ev ( pippo + 2 , infeval );
il comando infeval va ad applicare tutte le valutazioni concatenate, questo comando pero può provocare un ciclo di valutazioni infinito se andiamo a definire due variabili allo stesso modo. Si possono fare anche infinite valutazioni finché il programma non confronta due valori uguali e si ferma. Tale comando è tanto comodo quanto pericoloso, infatti può capitare che Maxima si 'blocchi' poiché il programma continua ad effettuare valutazioni fino a che non trova due valutazioni successive uguali e nel caso queste non si trovino mai, il programma si inceppa.
- E’ possibile richiedere ulteriori valutazioni utilizzando l'opzione “eval” all’ interno di “ev” :
ev ( pippo + 2 , eval );
eval = richiesta esplicita di una seconda valutazione (una valutazione in più).
Definizione di una funzione e un espressione :
- L’ operatore “:” definisce un espressione, l’operatore “:=” definisce una funzione.
- Definiamo un espressione :
- Definiamo una funzione:
Per valutare l’espressione è necessario richiamarla tramite il comando ev (prima l’espressione da richiamare e poi ”,” l’assegnazione della variabile), mentre per la funzione la valutazione viene ritardata al momento in cui avviene l’assegnazione del parametro. Questo implica che è possibile richiedere valori diversi della funzione, senza doverla nuovamente valutare. Come notiamo l’operatore “:=” ha la caratteristica di non cambiare il valore alle variabili finché non definiamo il valore della variabile stessa ( nel nostro caso la x).
- Se vogliamo definire una funzione con valutazione all’ atto della definizione, si usa il comando “define” al posto di “:=”.
In questo modo alla variabile “a” è stata sostituito immediatamente il valore pluto, cosa che non avveniva con l’ operatore “:=”.
ESEMPIO:
Programma che calcola i coefficienti della forma lineare degli spostamenti in un elemento TRIA3:
- lista [ , , ,] : è il comando che ci permette di implementare una serie di entità. A differenza dell’array la sua dimensione non deve essere definita: gli elementi possono essere aggiunti in qualsiasi momento tramite il comando “append”.
- Per l’estrazione dell’ i-esimo elemento della lista è sufficiente richiamare, nelle parentesi quadre, la posizione dell’elemento all’interno della stessa:
- A partire dallo stesso concetto, è possibile sfruttare la sintassi vista per riassegnare il valore di una specifica posizione:
- linsolve : è il comando per risolvere un sistema lineare di n equazioni in m incognite, da definire.
La sintassi generale del comando linsolve è linsolve ([equazione 1,equazione 2,…,equazione N] , [variabile 1, variabile 2, …, variabile M]); ovvero si scrivono all'interno delle parentesi tonde prima la lista di equazioni lineari da risolvere separate da una virgola e poi la lista delle incognite. Entrambe le liste vanno racchiuse tra parentesi quadre e separate da una virgola.
In alternativa si possono definire le liste in precedenza e utilizzare queste all'interno del comando linsolve.
Ad esempio:
eqns : [equazione 1,equazione 2,...,equazione N]; var : [variabile 1, variabile 2, ..., variabile M]; linsolve ( eqns , var );
- globalsolve : aggiungendo al comando linsolve, l’opzione: globalsolve=true , assegniamo automaticamente al parametro ai la sua soluzione.
- Operazione di differenziazione : comando diff ( espressione da derivare, variabile di derivazione , ordine di derivazione ).
Ad esempio:
diff ( sin(x)/x , x , 2 ); deriva l'espressione due volte rispetto ad x diff ( sin(x)/(x+y) , x , 1 , y , 1 ); deriva l'espressione una volta in x e una volta in y.
Se non si specifica l'ordine di derivazione si sottintende ordine 1.
- coefmatrix : permette di costruire una matrice tramite gli elementi di un vettore (lista), precedentemente definito.
- ratsubst : sostituisce gli elementi indicati con un nuovo parametro fornito in input.
file postazione cattedra