matlab avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_03.pdf · para resolver...

67
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 / 46

Upload: nguyenthuan

Post on 08-Nov-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

MATLAB Avancado

Melissa Weber Mendonca1

1Universidade Federal de Santa Catarina

2011.2

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

Exemplo

>> x = -3:0.1:3;

>> [x,y] = meshgrid(x);

>> z = x.^2+3*y-x.*y.^2

>> h = surf(x,y,z);

>> set(h,’cdata’,rand(size(z)))

>> set(h,’edgecolor’,’k’)

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

Outros comandos: trimesh, trisurf

As vezes, e mais conveniente mostrarmos os graficos usando umatriangulacao do domınio. Para isto, usamos os comandos trimesh outrisurf junto com o comando delaunay, que cria a triangulacao dodomınio:

Exemplo:

>> [x,y] = meshgrid(-3:0.5:3);

>> tri = delaunay(x,y)

>> z = x.^2+3*y-x.*y.^2;

>> trimesh(tri,x,y,z)

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

Volumes: slice

Quando temos um grafico de volume, por exemplo, de um solidopreenchido, podemos visualizar secoes bidimensionais deste volume usandoo comando

>> slice(x,y,z,v,xslice,yslice,zslice)

para visualizarmos o volume definido por

v = f (x , y , z)

na superfıcie definida por xslice, yslice, zslice.

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

Exemplo

Queremos visualizar o volume definido por

v = xe(−x2−y2−z2)

com –2 ≤ x ≤ 2, –2 ≤ y ≤ 2 e –2 ≤ z ≤ 2.

>> [x,y,z] = meshgrid(-2:.2:2);

>> v = x.*exp(-x.^2-y.^2-z.^2);

>> xslice = [-1.2,.8,2];

>> yslice = 0;

>> zslice = [];

>> slice(x,y,z,v,xslice,yslice,zslice)

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

Graficos com funcoes anonimas

Suponha que queremos passar uma funcao como argumento para outrafuncao: por exemplo, gostarıamos de usar um comando do tipo

>> plot(x,f(x))

para a funcao f (x) = x2 + 1.Para isso, podemos definir uma funcao anonima usando a seguinte sintaxe:

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

e, em seguida

>> x = -1:0.1:1

>> plot(x,f(x))

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

Funcoes anonimas

Se quisermos criar uma funcao anonima com mais de uma variavel, usamos

>> f = @(x,y,z,t) x+y+z+t

Exemplo:

>> x = -3:0.1:3;

>> [x,y] = meshgrid(x);

>> f = @(x,y) x.^2+3*y-x.*y.^2

>> surf(x,y,f(x,y));

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

Resolucao de equacoes lineares enao-lineares em MATLAB

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

Comandos basicos de algebra linear: det

Para calcularmos o determinante de uma matriz quadrada A, usamos ocomando

>> det(A)

Exemplo:

>> A = [1 2 0; 3 1 4; 5 2 1]

>> det(A)

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

Comandos basicos de algebra linear: det

Para calcularmos o determinante de uma matriz quadrada A, usamos ocomando

>> det(A)

Exemplo:

>> A = [1 2 0; 3 1 4; 5 2 1]

>> det(A)

>> B = [1 2 3;4 5 6;7 8 9]

>> det(B)

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

Comandos basicos de algebra linear: eig

Para calcularmos os autovalores de (A), usamos

>> eig(A)

Para calcularmos tambem os autovetores, usamos

>> [V,D] = eig(A)

onde V tem os autovetores de A nas colunas, e D e uma diagonal com osautovalores de A.

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

Exemplo

>> eig(eye(n,n))

>> [V,D] = eig(eye(n,n))

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

Exemplo

>> A = [1 2 3;4 5 6;7 8 9];

>> [V,D] = eig(A)

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

Comandos basicos de algebra linear: inv

Para calcularmos a inversa de uma matriz quadrada e inversıvel A, usamoso comando

>> inv(A)

Exemplo:

>> M = [1 4 3;2 1 0;0 0 1];

>> inv(M)

>> inv(M)*M

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

Comandos basicos de algebra linear: inv

Para calcularmos a inversa de uma matriz quadrada e inversıvel A, usamoso comando

>> inv(A)

Exemplo:

>> A = [1 2 3;4 5 6;7 8 9];

>> inv(A)

>> inv(A)*A

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

Resolucao Sistemas Lineares no MATLAB

Aqui, vamos supor que queremos resolver um sistema linear, ou seja, umproblema do tipo

Encontrar x ∈ Rn tal que

Ax = b

com A ∈ Rm×n e b ∈ Rm.

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

Sistemas quadrados: usando inv

Primeiramente, se a matriz A for quadrada e inversıvel, podemos encontrar

x = A−1b.

usando o comando

>> x = inv(A)*b

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

Sistemas quadrados: o operador \

Se, por outro lado, nao for desejavel encontrar a inversa da matriz A,podemos usar o operador \ para resolver Ax = b:

>> x = A\b

Se A for inversıvel, x = inv(A)*b. Senao, a solucao nao e confiavel!

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

Sistemas quadrados: decomposicao LU

Sabemos que a eliminacao gaussiana leva uma matriz A em duas matrizesL e U tais que

A = LU

Assim,

Ax = b ⇔ (LU)x = b ⇔{

Ly = bUx = y

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

Sistemas quadrados: lu

Para encontrarmos a decomposicao LU de uma matriz A no MATLAB,usamos o comando

>> [L,U] = lu(A)

Podemos em seguida resolver o sistema Ax = b fazendo

>> y = L\b>> x = U\y

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

Sistemas quadrados: linsolve

Se nao quisermos nos preocupar com o algoritmo usado na resolucao dosistema, temos uma outra opcao no comando linsolve.

>> x = linsolve(A,b)

resolve o sistema linear Ax = b usando a fatoracao LU caso a matriz sejaquadrada.

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

1. A =

3 17 102 4 −26 18 −12

, b =

123

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

1. A =

3 17 102 4 −26 18 −12

, b =

123

x =

1.85417−0.354170.14583

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

2. A =

1 4 72 5 82 5 8

, b =

123

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

2. A =

1 4 72 5 82 5 8

, b =

123

x = ??

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

3. A =

(10 11 1

), b =

(11

)

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

3. A =

(10 11 1

), b =

(11

)x =

(01

)

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

4. A =

(1.0001 1

1 1

), b =

(22

)

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

4. A =

(1.0001 1

1 1

), b =

(22

)x =

(02

)

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

4. A =

(1.0001 1

1 1

), b =

(2.0001

2

)

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

Exemplos

Testar a solucao com

inv(A)*b

A\b[L,U] = lu(A); U\(L\b)linsolve(A,b)

4. A =

(1.0001 1

1 1

), b =

(2.0001

2

)x =

(11

)

Este sistema e chamado mal-condicionado: uma mudanca pequena nolado direito muda completamente a solucao.

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

Sistemas retangulares

Para resolver sistemas em que A e m × n mas m 6= n, podemos repetir oscomandos, com algumas ressalvas:

inv(A)*b agora nao funciona!

A−1 nao esta definida para matrizes retangulares.

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

Sistemas retangulares

Para resolver sistemas em que A e m × n mas m 6= n, podemos repetir oscomandos, com algumas ressalvas:

x = A\b e a solucao exata, caso esta exista; senao, e a solucao dosistema em mınimos quadrados.

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

Sistemas retangulares

Para resolver sistemas em que A e m × n mas m 6= n, podemos repetir oscomandos, com algumas ressalvas:

[L,U] = lu(A); U\(L\b) continua funcionando, mas agoraU e do tamanho de A e L e quadrada.

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

Sistemas retangulares

Para resolver sistemas em que A e m × n mas m 6= n, podemos repetir oscomandos, com algumas ressalvas:

linsolve(A,b) resolve o sistema atraves da decomposicao QR de A:

A = QR,

onde Q e ortogonal e quadrada, e R e (quase) triangular superior.

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

Exemplo

Testar a resolucao usando

x = A\b[L,U] = lu(A); U\(L\b)linsolve(A,b) 1 2 0 1

0 1 1 01 2 1 1

x1

x2

x3

x4

=

111

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

Exemplo

Testar a resolucao usando

x = A\b[L,U] = lu(A); U\(L\b)linsolve(A,b) 1 2 0 1

0 1 1 01 2 0 1

x1

x2

x3

x4

=

424

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

Exemplo

Testar a resolucao usando

x = A\b[L,U] = lu(A); U\(L\b)linsolve(A,b) 1 2 0 1

0 1 1 01 2 0 1

x1

x2

x3

x4

=

151

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 26 / 46

Metodos Iterativos para Sistemas Lineares

pcg Gradiente conjugado precondicionado

bicg Gradiente bi-conjugado (gradiente conjugado para matrizesnao necessariamente simetricas)

gmres Generalized minimum residual method (com restarts)

lsqr LSQR (quadrados mınimos)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 27 / 46

Resolucao de equacoes nao-lineares

Agora, queremos resolver o problema de encontrar x ∈ Rn tal que

F (x) = 0

onde F : Rn → Rm (onde m ou n podem ser iguais a 1).

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 28 / 46

Equacao nao linear a uma variavel: fzero

Aqui, o problema que nos interessa e encontrar uma raiz da equacao

f (x) = 0

onde f : R→ R.Para isto usamos o comando

>> x = fzero(fun,x0)

Mas: quem e fun?E a referencia (function handle) da funcao f !

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 29 / 46

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 30 / 46

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)

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 31 / 46

Exemplo

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

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 32 / 46

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 32 / 46

Exemplo

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

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 33 / 46

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 33 / 46

Raizes de um polinomio: roots

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

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

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 34 / 46

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 35 / 46

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 36 / 46

Exemplo

Resolver o sistema de equacoes{y1 = 3x2

1 + 4x22 − 16

y2 = 2x21 − 3x2

2 − 5

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 37 / 46

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 37 / 46

Exemplo

Encontrar a raiz de

F (x) =

[x2

1 + x2x3

sin(x1 + 2x2 − 3x3)

]

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 38 / 46

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 38 / 46

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 38 / 46

Otimizacao: Minimizacao de funcoes

Agora, queremos resolver o problema

minimizar f (x).

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 39 / 46

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 40 / 46

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 41 / 46

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 41 / 46

Exemplo

Minimizarf (x) = 100(x2 − x2

1 )2 + (1− x1)2

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 42 / 46

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 42 / 46

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 43 / 46

Exemplo

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

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 44 / 46

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 44 / 46

Exemplo

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

M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 45 / 46

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 45 / 46

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 46 / 46