MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB...

34
MATLABAvan¸cado Melissa Weber Mendon¸ ca 1 1 Universidade Federal de Santa Catarina 2011.2 M. Weber Mendon¸ca (UFSC) MATLABAvan¸cado 2011.2 1 / 25

Transcript of MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB...

Page 1: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

MATLAB Avancado

Melissa Weber Mendonca1

1Universidade Federal de Santa Catarina

2011.2

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 1 / 25

Page 2: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Referencias a funcoes definidas inline

Podemos usar funcoes anonimas para chamar fzero.

Exemplo:

>> quadratica = @(x) x.^2-4;

>> x = fzero(quadratica,6)

ou ainda

>> x = fzero(@(x) x.^2-4,6)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 2 / 25

Page 3: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Referencias a funcoes definidas em arquivo

Se a funcao para a qual gostarıamos de encontrar uma raiz estiver em umarquivo proprio, no formato

[y] = minhafuncao(x)

comandos

Podemos chamar a funcao fzero a partir do ponto x0, escrevendo

>> x = fzero(@minhafuncao,x0)

bisseccao, secante e interpolacao quadratica inversa.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 3 / 25

Page 4: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar uma das raizes de f (x) = x2 − 4 a partir do ponto x = −6.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 4 / 25

Page 5: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar uma das raizes de f (x) = x2 − 4 a partir do ponto x = −6.

>> quadratica = @(x) x.^2-4;

>> fzero(quadratica,-6)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 4 / 25

Page 6: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar uma raiz de f (x) = e2x − 3.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 5 / 25

Page 7: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar uma raiz de f (x) = e2x − 3.

>> fun = @(x) exp(2*x)-3;

>> fzero(fun,0)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 5 / 25

Page 8: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Raizes de um polinomio: roots

Para encontrar as raizes de um polinomio de grau n da forma

p(x) = a0 + a1x + a2x2 + . . . + anx

n

primeiramente representamos este polinomio como um vetor linha p noMATLAB, cujas componentes sao os coeficientes dos termos em ordemdescendente de grau, ou seja,

>> p = [an an−1 · · · a2 a1 a0]

Em seguida, usamos o comando

>> r = roots(p)

resultando em um vetor coluna r com as raizes deste polinomio.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 6 / 25

Page 9: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplop(x) = t3 + 2t2 − 5t − 6

>> p = [1 2 -5 -6]

>> roots(p)

Figura: p(x) = t3 + 2t2 − 5t − 6 e suas raizes.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 7 / 25

Page 10: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Sistema de equacoes nao lineares: fsolve

Para encontrarmos a solucao de um sistema de equacoes nao lineares daforma

F (x) = 0

onde F : Rn → Rm, usamos a funcao fsolve, identicamente a funcaofzero:

>> fsolve(@minhafuncao,x0)

se utilizarmos uma funcao em arquivo, ou

>> fsolve(fun,x0)

se utilizarmos uma funcao anonima.

Observacao: Este comando faz parte da Optimization Toolbox, que podenao estar disponıvel na sua instalacao do MATLAB.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 8 / 25

Page 11: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Resolver o sistema de equacoes{y1 = 3x2

1 + 4x22 − 16

y2 = 2x21 − 3x2

2 − 5

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 9 / 25

Page 12: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Resolver o sistema de equacoes{y1 = 3x2

1 + 4x22 − 16

y2 = 2x21 − 3x2

2 − 5

>> fun = @(x) [3*x(1).^2+4*x(2).^2-16;

2*x(1).^2-3*x(2).^2-5];

>> fsolve(fun,[1;1])

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 9 / 25

Page 13: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar a raiz de

F (x) =

[x2

1 + x2x3

sin(x1 + 2x2 − 3x3)

]

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 10 / 25

Page 14: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar a raiz de

F (x) =

[x2

1 + x2x3

sin(x1 + 2x2 − 3x3)

]>> fun = @(x) [x(1).^2+x(2).*x(3);

sin(x(1)+2*x(2)-3*x(3))];

>> fsolve(fun,[1;1;1])

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 10 / 25

Page 15: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Encontrar a raiz de

F (x) =

[x2

1 + x2x3

sin(x1 + 2x2 − 3x3)

]>> fun = @(x) [x(1).^2+x(2).*x(3);

sin(x(1)+2*x(2)-3*x(3))];

>> fsolve(fun,[1;1;1])

>> fsolve(fun,[0;0;0])

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 10 / 25

Page 16: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Otimizacao: Minimizacao de funcoes

Agora, queremos resolver o problema

minimizar f (x).

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 11 / 25

Page 17: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Minimizacao de uma funcao de varias variaveis:fminsearch

Para encontrarmos o mınimo de uma funcao real de varias variaveis, apartir de um ponto inicial x0, usamos o comando

>> x = fminsearch(@funcao,x0)

Se quisermos tambem saber o valor da funcao no ponto de mınimo,usamos a sintaxe

>> [x,fval] = fminsearch(@funcao,x0)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 12 / 25

Page 18: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizar a funcao

f = ex1(4x21 + 2x2

2 + 4x1x2 + 2x2 + 1)

a partir do ponto inicial x0 = (0, 0).

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 13 / 25

Page 19: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizar a funcao

f = ex1(4x21 + 2x2

2 + 4x1x2 + 2x2 + 1)

a partir do ponto inicial x0 = (0, 0).

>> f=@(x)exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

>> fminsearch(f,[0;0])

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 13 / 25

Page 20: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizarf (x) = 100(x2 − x2

1 )2 + (1− x1)2

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 14 / 25

Page 21: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizarf (x) = 100(x2 − x2

1 )2 + (1− x1)2

>> f = @(x) 100*(x(2)-x(1).^2).^2+(1-x(1)).^2

>> fminsearch(f,[0;0])

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 14 / 25

Page 22: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Minimizacao de uma funcao de uma variavel comrestricoes: fminbnd

Para encontrarmos o mınimo de uma funcao de uma variavel dentro de umintervalo [a, b], usamos o comando

>> x = fminbnd(@funcao,a,b)

Se quisermos tambem saber o valor da funcao no ponto de mınimo,usamos a sintaxe

>> [x,fval] = fminbnd(@funcao,a,b)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 15 / 25

Page 23: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizar f (x) = x nos intervalos [0, 1] e [−10, 1].

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 16 / 25

Page 24: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizar f (x) = x nos intervalos [0, 1] e [−10, 1].

>> f = @(x) x;

>> fminbnd(f,0,1)

>> fminbnd(f,-10,1)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 16 / 25

Page 25: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizar f (x) = x2 − 1 no intervalo [1, 3].

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 17 / 25

Page 26: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

Minimizar f (x) = x2 − 1 no intervalo [1, 3].

>> f = @(x) x.^2;

>> fminbnd(f,1,3)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 17 / 25

Page 27: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

interp1, interp2, interp3 e interpn

Para interpolarmos um conjunto de pontos em 1D, 2D, 3D ou em Ndimensoes, usamos os comandos

interp1

interp2

interp3

interpn

respectivamente.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 18 / 25

Page 28: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Interpolacao 1D: interp1

O comando

>> yi = interp1(x,Y,xi,method)

interpola os dados (x,Y) nos novos pontos xi, usando o metodo method,que pode ser:

’nearest’ Vizinho mais proximo

’linear’ Interpolacao linear (default)

’spline’ Splines cubicos

’cubic’ Interpolacao por polinomios de Hermite

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 19 / 25

Page 29: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

>> x = 0:10;

>> y = sin(x);

>> xi = 0:.25:10;

>> yi = interp1(x,y,xi);

>> plot(x,y,’o’,xi,yi);

>> hold on;

>> zi = interp1(x,y,xi,’nearest’);

>> plot(xi,zi,’:k’);

>> wi = interp1(x,y,xi,’spline’);

>> plot(xi,wi,’m’);

>> ui = interp1(x,y,xi,’cubic’);

>> plot(xi,ui,’--g’)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 20 / 25

Page 30: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Interpolacao 2D: interp2

O comando

>> ZI = interp2(X,Y,Z,XI,YI,method)

interpola os dados (X,Y,Z) nos novos pontos (XI,YI) usando o metodomethod, que pode ser

’nearest’ Vizinho mais proximo

’linear’ Interpolacao linear (default)

’spline’ Splines cubicos

’cubic’ Interpolacao cubica, se os dados forem uniformementeespacados; senao, e o mesmo que spline.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 21 / 25

Page 31: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Exemplo

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 22 / 25

Page 32: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Interpolacao polinomial: polyfit

O comando

>> p = polyfit(x,y,n)

encontra os coeficientes do polinomio p(x) de grau n que interpola osdados y(i) = p(x(i)), em um sentido de mınimos quadrados. O vetor presultante contem os coeficientes do polinomio em ordem descendente depotencias.

Exemplo: Tentar interpolar com um polinomio os mesmos pontos doexercıcio anterior, ou seja,

>> x = 0:10;

>> y = sin(x);

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 23 / 25

Page 33: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Integracao numerica: trapz

Para calcularmos uma aproximacao numerica de∫ ba f (x)dx , primeiramente

precisamos representar a funcao f em um conjunto de pontos:

>> x = 0:pi/100:pi;

>> y = sin(x);

Agora, usamos o comando trapz:

>> z = trapz(x,y)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 24 / 25

Page 34: MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB Avan˘cado Melissa Weber Mendon˘ca1 1Universidade Federal de Santa Catarina 2011.2 M.

Integracao numerica: quad

Para calcularmos uma aproximacao numerica de∫ ba f (x)dx pela

quadratura de Simpson (adaptativa), usamos o comando

>> q = quad(fun,a,b)

em que fun e uma referencia a uma funcao.

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 25 / 25