---   MAXIMA : COMANDI VARI   ---

- COMANDO DI PULIZIA DELLA MEMORIA -

kill(all);

Funzione ratsubst(u,v,w):

sostituisce nell'espressione w, il parametro u, 
al posto di v gia' presente nell'espressione.

Definisco l'espressione su cui voglio operare.

expr : (a*x^4+b*x^2+c);

ratsubst (
y,
x^2,
expr
);

Funzione sqrt(espressione):

ci permette di eseguire la radice quadrata 
dell'espressione tra parentesi;

sqrt(a^2*b^2);

L'operazione di radice restituisce come risultato 
parametri in valore assoluto questo poiche' il 
calcolatore non sa se sono positivi o negativi.

Funzione assume(assunz_1,assunz_2,...,assunz_n):

permette di segnalare al calcolatore specifiche 
condizioni di uno o più parametri, come ad esempio la 
natura positiva o negativa.

assume (a>0, b>0);

Dopo aver definito la funzione "assume", l'operazione 
di estrazione della radice non restituisce i parametri 
in valore assoluto.

sqrt(a^2*b^2);

Nota : "assume" può essere utile quando si vogliono
definire le dimensioni di una trave e quindi comunicare
al calcolatore che esse siano positive.

forget (a>0)$

Funzione forget(assunz_1,assunz_2,...,assunz_n):

si annullano uno o piu' restrizioni imposte dal comando "assume".
Talvolta puo' essere utile nel calcolo integrale.

Funzione makelist( 
    legge matematica della lista,
    variabile della legge matematica,
    primo elemento numerico della lista,
    ultimo elemento numerico della lista,
    passo della lista):

NOTA: se il quinto parametro in ingresso non viene inserito, 
"makelist" suppone che il passo della lista sia pari ad 1 .

Permette di generare una lista partendo da una numerazione (caso 1)
o da una lista precedente(caso 2).

(caso 1)

x: makelist(i^2
    ,i,
    1,
    10,
    2);

(caso 2) : "makelist" prende gli elementi della lista "x"
precedente e ne esegue l'operazione tra parentesi. 
Gli elementi della nuova lista sono stati denominati "ele". 

y: makelist(ele/(ele+1),
   ele,
    x );

Il simbolo % puo' essere usato per indicare 
l'ultima variabile definita.

- GRAFICI PER PUNTI -

wxplot2d : comando che prende la lista con parola chiave "discrete" 
che definisce una funzione non continua definita per punti
con coordinate i valori delle liste x ed y.

wxplot2d (
    [discrete,
        x,
        y]

    );

kill(x,y);

- MANIPOLAZIONI TRIGONOMETRICHE - 

z : sin(x)^2+cos(x)^2;

La funzione definita sopra non viene semplificata
all'identita' trigonometrica.

Funzione trigsimp(espressione):

comando che semplifica l'espressione applicando 
funzioni trigonometriche note.

trigsimp(z);

altro esempio

sin(3*x+y);
expand(
    trigexpand(
        expand(
            trigexpand(
                %
            )
)
    )
);

Funzione trigexpand(espressione):

espande la funzione in una forma alternativa 
riducendola in una somma di monomi di sin e cos.
Dato che puo' non essere semplice capire quante 
volte una funzione trigonometrica sia semplificabile, 
si utilizza l'espressione:

" trigexpand (%),trigexpandtimes=true,expand;"  

con possibilita' di iterazione fino a convergenza.

sin(3*x+y)$

trigexpand(%),trigexpandtimes=true,expand;

- EQUAZIONI NON LINEARI E NUMERI COMPLESSI -

Funzione solve(equazione, variabile):

comando che permette di risolvere un'equazione 
nella variabile esplicitata e stoccarla nella lista 
a cui è assegnata la funzione. In questo caso la lista "sols"
avra' due componenti sols [1] per la soluzione 1 e sols [2] 
per la soluzione 2.

sols : solve(y^2+y+1,y);

NOTA:

%i indica l'unita' complessa.
realpart(y): comando che estrae parte reale in y;
imagpart(y): comando che estrae parte immaginaria in y;

realpart(sols[1]);
imagpart(sols[1]);

Funzione ev(espressione,arg_1,arg_2,..,arg_n):


permette di valutare un'espressione, sotto n ipotesi fatte.

y:ev(y,sols[1]);

kill(y)$

- PASSAGGIO DA FORME TRIGONOMETRICHE A ESPONENZIALI COMPLESSI -

a*cos(y)+b*%i*sin(x);

Funzione exponentialize(espressione): 

permette il passaggio, se e' possibile, da forma trigonometrica
ad esponenziale complesso.

exponentialize(%);

Funzione demoivre(espressione): 

permette il passaggio dalla forma esponenziale
a quella trigonometrica.

demoivre(%);

- INTEGRAZIONE NUMERICA -

quad_qag(
    sin(x),
    x,
    0,
    %pi,
    1);

Funzione quad_qag(f(x),x,a,b,precisione):

esegue la quadratura (o integrazione numerica) 
valutabile in funzione numerica. 

NOTA:
il quinto parametro indica il metodo di integrazione 
numerica adottato per risolvere l'integrale 
(Simpson,trapezi,rettangoli etc. ) ogni metodo varia 
il grado di precisione con cui viene calcolata la soluzione.
Il numero 1 indica il metodo dei trapezi del secondo ordine.

NOTA:
il comando restituisce 4 parametri:
il primo indica la soluzione;
il secondo indica l'errore tra la soluzione calcolata e quella esatta;
il terzo indica il numero di passaggi necessari 
   per calcolare la soluzione richiesta;
il quarto deve essere zero altrimenti significa che il calcolo non ha
   raggiunto la precisione richiesta;

- OPERAZIONI SU MATRICI -

A: zeromatrix( 3, 3);

Funzione zeromatrix(num_righe,num_col):

permette di creare una matrice di zeri. 

Se voglio modificare un elemento della matrice A
chiamo la seguente espressione:

A[1,2]:a $

A[1,3]:b $

A[2,3]:c $

definisco la funzione trasposta della matrice A tramite il comando
transpose(A).

A : A - transpose(A);

Supponiamo di aver definito le liste [x], [y], [z].
con la funzione matrix pongo in ingresso le liste 
e da qui ottengo una matrice di elementi costituite dalle
liste poste in ingresso.

v:matrix([x], [y], [z]);

v:matrix([x]+1, [y]+1, [z]+2);

A.v; : comando di prodotto tra matrice "A" e vettore "v";
vediamo un esempio:

transponse(v).A.v$

Funzione genmatrix(funz.,num_righe,num_colonne):

con "lambda" si indica una funzione "senza nome" 
(a meno che essa venga determinata) richiesta dal comando;  
il secondo parametro in ingresso alla funzione "lambda" 
indica con quale legge devono essere 
definiti gli elementi della matrice A. 

A:genmatrix(lambda ([i,j], i^2/j^2 ),3,3);

Ulteriore esempio della funzione "lambda". 
In questo caso il primo parametro e' una lista x e y, 
mentre il secondo indica con quale legge
devono variare queste due liste,
cioe' con la somma dei quadrati di una radice.

norma : lambda ([x,y],sqrt(x^2+y^2))$

adesso se definisco norma(4,5) calcolo la radice della somma
dei quadrati di 4 e 5.

Lambda in conclusione mi permette di creare delle nuove funzioni.

Calcolo del deterrminante di una matrice

determinant(A);

se voglio porre 1 come elementi sopra diagonale,
-1 come elementi sottodiagonale e 0 come elementi della diagonale; 
uso il costrutto if nidificati in genmatrix definito sopra.

A:genmatrix(lambda ([i,j], 

    if j>i then 1
else if j<i then -1
else 0

 ),3,3);

Funzione augcoefmatrix:
permette di passare da un sistema di equazioni 
alla sua rispettiva matrice dei coefficienti con 
la presenza anche del termine noto.

augcoefmatrix(
[
    a*x1+b*y1+c=f1,
    a*x2+b*y2+c=f2,
    a*x3+b*y3+c=f3
],
[ a,b,c]
);