Polinomi, integrazione e ottimizzazione

17
Polinomi, integrazione e ottimizzazione

description

Polinomi, integrazione e ottimizzazione. Polinomi. Nell’ambito dell’algebra dei polinomi, alcune funzioni possono risultare di una certa utilità. - PowerPoint PPT Presentation

Transcript of Polinomi, integrazione e ottimizzazione

Page 1: Polinomi, integrazione e ottimizzazione

Polinomi, integrazione e ottimizzazione

Page 2: Polinomi, integrazione e ottimizzazione

Polinomi

Nell’ambito dell’algebra dei polinomi, alcune funzioni possono risultare di una certa utilità.

La funzione roots funziona roots(v), dove v è un vettore con i coefficienti della incognita, dal termine di più alto grado al termine noto, ed estrae le radici del polinomio. Ad esempio se abbiamo il polinomio x5-x4-7x3+7x2+12x-12 e vogliamo trovarne le radici, ossia i valori di x che la azzerano, dobbiamo scrivere

roots([1 -1 -7 7 12 -12])

e MATLAB calcola tutte le radici, reali o complesse che siano. NB1: nel caso non vi sia un termine va posto zero!!NB2: l’ultimo è il termine noto.

Page 3: Polinomi, integrazione e ottimizzazione

Polinomi

La funzione polyval funziona polyval(v,k), dove v è un vettore con i coefficienti della incognita, dal termine di più alto grado al termine noto, k è un numero e calcola il polinomio in corrispondenza di k (ossia sostituisce x=k). Ad esempio se abbiamo il polinomio -3x4-2x3+6x2+2x-1 e vogliamo calcolarlo in x=-1, dobbiamo scrivere

polyval([-3 -2 6 2 -1],-1)

e MATLAB restituisce 2.

Page 4: Polinomi, integrazione e ottimizzazione

Polinomi

La moltiplicazione tra due polinomi, indicati sempre attraverso i vettori contenenti i coefficienti, avviene con il comando conv; se moltiplico x3-2 per x2+3x-5 devo fare:

x=[1 0 0 -2];y=[1 3 -5];z=conv(x,y);

e MATLAB restituisce 1 3 -5 -2 -6 10, ossia il polinomio (ovviamente di 5° grado) x5+3x4-5x3-2x2+6x+10.

La divisione tra due polinomi, indicati sempre attraverso i vettori contenenti i coefficienti, avviene con il comando deconv,che funziona come conv e dà anche un vettore con l’eventuale resto.

Page 5: Polinomi, integrazione e ottimizzazione

Integrazione numerica

Per quanto riguarda l’integrazione numerica in 2 variabili, il valore di un integrale definito del tipo

dove f:R=> R, ossia funzione reale di variabile reale, può essere calcolato con la funzione quad8, dove quad sta per formula di quadratura, ossia di integrazione numerica. Per integrare una funzione va usato il comando inline, che introduce una variabile nel command senza passare dall’edit. Se vogliamo quindi calcolare

b

a

dxxf )(

0

3 )2cos( dxxe x

Page 6: Polinomi, integrazione e ottimizzazione

Integrazione numerica

definiamo la funzione e la calcoliamo nel modo seguente

>> f=inline(‘exp(-3*x).*cos(2*x)’);>> quad8(f,0,π);

e MATLAB calcola 0.2308. Notiamo che: La funzione inline riconosce x come variabile e vuole

il suo argomento (la funzione) tra ‘; La funzione quad8 funziona quad8(funzione,

estremo inf, estremo sup)

Matlab integra fino ad un massimo di 3 variabili (funzione dblquad; per più di 3 variabili dobbiamo ricorrere alla simulazione numerica (Monte Carlo).

Page 7: Polinomi, integrazione e ottimizzazione

Ottimizzazione non vincolata

Per risolvere un problema di ottimizzazione non ottimizzazione non vincolatavincolata (max o min) e quindi di programmazione programmazione linearelineare del tipo

max f(x) oppure min f(x) x x

possiamo utilizzare 2 funzioni:

- fminsearch, che sfrutta una variante del metodo del simplesso

- fminunc, che sfrutta il calcolo del gradiente.

Page 8: Polinomi, integrazione e ottimizzazione

Ottimizzazione non vincolata

Definita una inline function che contenga la funzione obiettivo:

g(x)=(x1+3)2 + (x2-2)2

possiamo calcolare il minimo della funzione (per calcolare il max basta fare min(-g(x)) ) digitando:

>> f=inline('(x+3)^2 + (x(2)-2)^2');>> s1= fminsearch(f,[1 1]);>> s2 = fminunc(f,[1 1]);

dove [1,1] è un punto iniziale dal quale far partire l’algoritmo. MATLAB fornisce la soluzione. Non sempre è detto che le due soluzioni coincidono, dipende dalla forma del gradiente!

Page 9: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata Per risolvere un problema di ottimizzazione vincolata ottimizzazione vincolata

di 1°gradodi 1°grado, ossia di programmazione lineare del tipo

dove c’x è la funzione obiettivo, utilizziamo il comando linprog. Questo considera un problema di minimizzazione, per cui la massimizzazione si ottiene sempre facendo min(-f(x)).

sxi

bAx

' min

oppure

sxi

bAx

' max

bAxsub

xc

bAxsub

xc

Page 10: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata Linprog funziona:

X=LINPROG(c,A,b,Aeq,Beq,LB,UB,X0,OPTIONS), dove:

c è il vettore dei pesi delle variabili A è la matrice in Ax<b b è il vettore in Ax<b Aeq è la matrice in Ax=b beq è il vettore in Ax<b lb è l’estremo inferiore dell’intervallo di x ub è l’estremo superiore dell’intervallo di x X0 è il punto di partenza dell’algoritmo options => v. optimset functions

Page 11: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata

Dovendo risolvere il problema

impostiamo con linprog:

>> s=linprog([2 -3],[1 1],3,[],[],[0]);

dove le parentesi vuote indicano che quel tipo di vincolo non è presente. Un solo zero in quanto è solo x1 ad essere vincolata.

0

3x

32 min

1

1

1

2

2

x

xsub

xx

Page 12: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata Per risolvere un problema di ottimizzazione vincolata di ottimizzazione vincolata di

2°grado2°grado, ossia di programmazione quadratica del tipo

dove (x’Hx)/2+c’x è la funzione obiettivo, utilizziamo il comando quadprog. Questo considera un problema di minimizzazione, la massimizzazione si ottiene sempre facendo min(-f(x)).

sxi

bAx

''2

1 min

oppure

sxi

bAx

''2

1 max

bAxsub

xcHxx

bAxsub

xcHxx

Page 13: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata quadprog funziona:

x=quadprog(H,f,A,b,Aeq,beq,LB,UB) dove:

H è la matrice dei pesi nella forma quadratica c è il vettore dei pesi delle variabili di 1° grado A è la matrice in Ax<b b è il vettore in Ax<b Aeq è la matrice in Ax=b beq è il vettore in Ax<b lb è l’estremo inferiore dell’intervallo di x ub è l’estremo superiore dell’intervallo di x

Page 14: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata

Dovendo risolvere il problema

impostiamo con quadprog i singoli elementi del problema di ottimizzazione:

42

0

0

33 min

2

2

2122

1

1

1

2

xx

x

xsub

xxxx

Page 15: Polinomi, integrazione e ottimizzazione

Ottimizzazione vincolata

>> H = [2 0 ; 0 6];>> c = [3 -1];>> Aeq=[1 2];>> beq=4;>> lb=[0 0];>> x = quadprog(H,c,[],[], Aeq,beq,lb)

Il risultato è x =0.28571.3571

Page 16: Polinomi, integrazione e ottimizzazione

Soluzione di equazioni non lineari

Talvolta siamo di fronte ad equazioni non lineari, ossia equazioni che non possono essere invertite per esprimere la x in funzione di altre variabili. Es. se so che y = 3x+e1-x, ovviamente non possiamo invertire questa relazione e scrivere x=… per cui dobbiamo ricorrere a metodi numerici che facciano dei “tentativi” fino a che non troviamo il valore di x. Ad es. se sappiamo che y=3, possiamo trovare il valore di x che rende y=3 (ossia lo zero della funzione) con il comando fzero. La funzione di cui stiamo cercando lo zero può essere introdotta con un m-file o con un comando inline. Poiché noi stiamo cercando lo zero, dovremo scrivere la funzione come y-3, perché è di questa che cerchiamo lo zero!!

Quindi il codice in MATLAB può essere il seguente:

Page 17: Polinomi, integrazione e ottimizzazione

Soluzione di equazioni non lineari

>> f=inline(‘3*x+exp(1-x)-3’);>> fzero(f,2)

dove 2 è un numero dal quale faccio partire l’algoritmo (initial guess), che è basato su una variante del metodo di bisezione. Il risultato è: 0.3809. In corrispondenza di tale valore di x la y vale 3.