Maxima è un manipolatore algebrico che può funzionare con varie modalità:
Come funziona il programma
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 “:=”.
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