next up previous

Next:Sistemi di equazioni lineari Up: Matlab Tutorial Previous: Scripts e Funzioni

Polinomi


 
In Matlab un polinomio è rappresentato da un vettore. Per creare un polinomio è sufficiente immettere i coefficiente del 
polinomio in un vettore in ordine decrescente. Per esempio, consideriamo il seguente polinomio:

Per inserirlo nel Matlab, è sufficiente registrarlo come un vettore nel modo seguente: 

x = [1 10 0.6 12 -7 5]

     x =
          1  10  0.6  12  -7  5

Il Matlab può interpretare un vettore di lunghezza n+1 come un polinomio di ordine n. Per i coefficienti non presenti 
nel polinomio si deve inserire lo zero nella corrispondente posizione del vettore. Per esempio,

in Matlab deve essere rappresentato come: 

y = [1 0 0 0 -7 5]

Si può calcolare il valore del polinomio usando la funzione polyval. Per esempio, per trovare il valore del precedente 
polinomio per s=2, 

z = polyval([1 0 0 0 -7 5],2)

     z =
          23

E' anche possibile estrarre le radici di un polinomio. Ciò è utile quando si ha un ordine elevato del polinomio, come

Per trovare le radici basta semplicemente inserire il seguente comando: 

roots([1 10 0.6 12 -7 5])
	

     ans =
      	-10.0662          
	-0.3251 + 1.1240i
  	-0.3251 - 1.1240i
  	 0.3582 + 0.4843i
  	 0.3582 - 0.4843i

La moltiplicazione tra due polinomi è data dalla convoluzione dei loro coefficienti. La funzione usata dal Matlab è conv. 

x = [1 2];
y = [1 4 8];
z = conv(x,y)

     z =
          1  6  16  16

La divisione di due polinomi viene realizzata con la funzione deconv che restituisce il resto e il risultato. Dividere z 
per y equivale ad ottenere x, secondo quanto fatto sopra: 

[xx, R] = deconv(z,y)

     xx =
          1  2

     R =
          0  0  0  0

Come si può vedere, questo è il polinomio x cercato. Se z non fosse un multiplo di y, il vettore del resto avrebbe alcuni 
elementi diversi da zero.

Per sommare due polinomi dello stesso ordine, come già visto, basta eseguire z=x+y (i due vettori devono avere la stessa 
lunghezza). Nel caso generale,e cioè quando i due polinomi sono di grado diverso, puoi usare la funzione 
da definire, polyadd. 

function[polinom]=polyadd(polin1,polin2)
%La funzione polyadd(polin1,polin2) somma due polinomi con dimensioni diverse
if length(polin1) < length(polin2)
  corto=polin1;
  lungo=polin2;
else
  corto=polin2;
  lungo=polin1;
end
diff=length(lungo)-length(corto);
if diff > 0
  polinom=[zeros(1,diff),corto]+lungo;
else
  polinom=lungo+corto;
end


Per usare polyadd, copia la funzione in un 
m-file, così da poterla utilizzare come una qualsiasi funzione del toolbox del Matlab. Assumendo che la funzione sia stata 
creata, il comando è copletato aggiungendo i polinomi x e y (osserva che in questo esempio i polinomi hanno grado diverso): 

z = polyadd(x,y)

     x =
          1  2

     y =
          1  4  8

     z =
          1  5  10