Anda di halaman 1dari 67

MATLAB Avan cado

Melissa Weber Mendon ca1


1 Universidade

Federal de Santa Catarina

2011.2

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

2 / 46

Outros comandos: trimesh, trisurf


` vezes, As e mais conveniente mostrarmos os gr acos usando uma triangula c ao do dom nio. Para isto, usamos os comandos trimesh ou trisurf junto com o comando delaunay, que cria a triangula c ao do dom 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

3 / 46

Volumes: slice

Quando temos um gr aco de volume, por exemplo, de um s olido preenchido, podemos visualizar se c oes bidimensionais deste volume usando o comando >> slice(x,y,z,v,xslice,yslice,zslice)

para visualizarmos o volume denido por v = f (x , y , z ) na superf cie denida por xslice, yslice, zslice.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

4 / 46

Exemplo
Queremos visualizar o volume denido por v = xe (x
2 y 2 z 2 )

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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

5 / 46

Gr acos com fun co es an onimas


Suponha que queremos passar uma fun c ao como argumento para outra fun c ao: por exemplo, gostar amos de usar um comando do tipo >> plot(x,f(x))

para a fun c ao f (x ) = x 2 + 1. Para isso, podemos denir uma fun c ao an onima usando a seguinte sintaxe: >> e, em seguida >> >> x = -1:0.1:1 plot(x,f(x)) f = @(x) x.^2+1

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

6 / 46

Fun co es an onimas
Se quisermos criar uma fun c ao an onima com mais de uma vari avel, 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

7 / 46

Resolu c ao de equa c oes lineares e n ao-lineares em MATLAB

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

8 / 46

Comandos b asicos de algebra linear: det


Para calcularmos o determinante de uma matriz quadrada A, usamos o comando >> det(A)

Exemplo: >> >> A = [1 2 0; 3 1 4; 5 2 1] det(A)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

9 / 46

Comandos b asicos de algebra linear: det


Para calcularmos o determinante de uma matriz quadrada A, usamos o comando >> 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

9 / 46

Comandos b asicos de algebra linear: eig

Para calcularmos os autovalores de (A), usamos >> eig(A)

Para calcularmos tamb em os autovetores, usamos >> [V,D] = eig(A)

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

10 / 46

Exemplo

>> >>

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

11 / 46

Exemplo

>> >>

A = [1 2 3;4 5 6;7 8 9]; [V,D] = eig(A)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

11 / 46

Comandos b asicos de algebra linear: inv


Para calcularmos a inversa de uma matriz quadrada e invers vel A, usamos o comando >> inv(A)

Exemplo: >> >> >> M = [1 4 3;2 1 0;0 0 1]; inv(M) inv(M)*M

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

12 / 46

Comandos b asicos de algebra linear: inv


Para calcularmos a inversa de uma matriz quadrada e invers vel A, usamos o comando >> inv(A)

Exemplo: >> >> >> A = [1 2 3;4 5 6;7 8 9]; inv(A) inv(A)*A

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

12 / 46

Resolu c ao Sistemas Lineares no MATLAB

Aqui, vamos supor que queremos resolver um sistema linear, ou seja, um problema do tipo Encontrar x Rn tal que Ax = b com A Rmn e b Rm .

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

13 / 46

Sistemas quadrados: usando inv

Primeiramente, se a matriz A for quadrada e invers vel, podemos encontrar x = A1 b . usando o comando >> x = inv(A)*b

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

14 / 46

Sistemas quadrados: o operador \

Se, por outro lado, n ao for desej avel 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. Sen ao, a solu c ao n ao e con avel!

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

15 / 46

Sistemas quadrados: decomposi c ao LU

Sabemos que a elimina c ao gaussiana leva uma matriz A em duas matrizes L e U tais que A = LU Assim, Ax = b (LU )x = b Ly Ux = b = y

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

16 / 46

Sistemas quadrados: lu

Para encontrarmos a decomposi c ao 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

17 / 46

Sistemas quadrados: linsolve

Se n ao quisermos nos preocupar com o algoritmo usado na resolu c ao do sistema, temos uma outra op c ao no comando linsolve. >> x = linsolve(A,b)

resolve o sistema linear Ax = b usando a fatora c ao LU caso a matriz seja quadrada.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

18 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

3 17 10 1 1. A = 2 4 2 , b = 2 6 18 12 3

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

19 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

3 17 10 1 1. A = 2 4 2 , b = 2 6 18 12 3

1.85417 x = 0.35417 0.14583

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

19 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

1 4 7 1 2. A = 2 5 8 , b = 2 2 5 8 3

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

20 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

1 4 7 1 2. A = 2 5 8 , b = 2 2 5 8 3

x = ??

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

20 / 46

Exemplos

Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

3. A =

10 1 ,b = 1 1

1 1

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

21 / 46

Exemplos

Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

3. A =

10 1 ,b = 1 1

1 1

x=

0 1

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

21 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

4. A =

1.0001 1 ,b = 1 1

2 2

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

22 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

4. A =

1.0001 1 ,b = 1 1

2 2

x=

0 2

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

22 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

4. A =

1.0001 1 ,b = 1 1

2.0001 2

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

22 / 46

Exemplos
Testar a solu c ao com inv(A)*b A\b [L,U] = lu(A); U\(L\b) linsolve(A,b)

4. A =

1.0001 1 ,b = 1 1

2.0001 2

x=

1 1

Este sistema e chamado mal-condicionado: uma mudan ca pequena no lado direito muda completamente a solu c ao.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

22 / 46

Sistemas retangulares

Para resolver sistemas em que A e m n mas m = n, podemos repetir os comandos, com algumas ressalvas:

inv(A)*b agora n ao funciona!

A1 n ao est a denida para matrizes retangulares.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

23 / 46

Sistemas retangulares

Para resolver sistemas em que A e m n mas m = n, podemos repetir os comandos, com algumas ressalvas:

x = A\b e a solu c ao exata, caso esta exista; sen ao, e a solu c ao do sistema em m nimos quadrados.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

23 / 46

Sistemas retangulares

Para resolver sistemas em que A e m n mas m = n, podemos repetir os comandos, com algumas ressalvas:

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

23 / 46

Sistemas retangulares

Para resolver sistemas em que A e m n mas m = n, podemos repetir os comandos, com algumas ressalvas:

linsolve(A,b) resolve o sistema atrav es da decomposi c ao QR de A: A = QR , onde Q e ortogonal e quadrada, e R e (quase) triangular superior.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

23 / 46

Exemplo

Testar a resolu c ao usando x = A\b [L,U] = lu(A); U\(L\b) linsolve(A,b) x1 1 2 0 1 1 0 1 1 0 x2 = 1 x3 1 2 1 1 1 x4

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

24 / 46

Exemplo

Testar a resolu c ao usando x = A\b [L,U] = lu(A); U\(L\b) linsolve(A,b) x1 1 2 0 1 4 0 1 1 0 x2 = 2 x3 1 2 0 1 4 x4

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

25 / 46

Exemplo

Testar a resolu c ao usando x = A\b [L,U] = lu(A); U\(L\b) linsolve(A,b) x1 1 2 0 1 1 0 1 1 0 x2 = 5 x3 1 2 0 1 1 x4

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

26 / 46

M etodos Iterativos para Sistemas Lineares

pcg Gradiente conjugado precondicionado bicg Gradiente bi-conjugado (gradiente conjugado para matrizes n ao necessariamente sim etricas) gmres Generalized minimum residual method (com restarts) lsqr LSQR (quadrados m nimos)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

27 / 46

Resolu c ao de equa co es n ao-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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

28 / 46

Equa c ao n ao linear a uma vari avel: fzero

Aqui, o problema que nos interessa e encontrar uma raiz da equa c ao f (x ) = 0 onde f : R R. Para isto usamos o comando >> x = fzero(fun,x0)

Mas: quem e fun? E a refer encia (function handle) da fun c ao f !

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

29 / 46

Refer encias a fun co es denidas inline

Podemos usar fun c oes an onimas para chamar fzero.

Exemplo: >> >> ou ainda >> x = fzero(@(x) x.^2-4,6) quadratica = @(x) x.^2-4; x = fzero(quadratica,6)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

30 / 46

Refer encias a fun co es denidas em arquivo

Se a fun c ao para a qual gostar amos de encontrar uma raiz estiver em um arquivo pr oprio, no formato [y] = minhafuncao(x) comandos

Podemos chamar a fun c ao fzero a partir do ponto x0, escrevendo >> x = fzero(@minhafuncao,x0)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

31 / 46

Exemplo

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

32 / 46

Exemplo

Encontrar uma das raizes de f (x ) = x 2 4 a partir do ponto x = 6. >> >> quadratica = @(x) x.^2-4; fzero(quadratica,-6)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

32 / 46

Exemplo

Encontrar uma raiz de f (x ) = e 2x 3.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

33 / 46

Exemplo

Encontrar uma raiz de f (x ) = e 2x 3. >> >> fun = @(x) exp(2*x)-3; fzero(fun,0)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

33 / 46

Raizes de um polin omio: roots


Para encontrar as raizes de um polin omio de grau n da forma p (x ) = a0 + a1 x + a2 x 2 + . . . + an x n primeiramente representamos este polin omio como um vetor linha p no MATLAB, cujas componentes s ao os coecientes dos termos em ordem descendente de grau, ou seja, >> p = [an an1 a2 a1 a0 ]

Em seguida, usamos o comando >> r = roots(p)

resultando em um vetor coluna r com as raizes deste polin omio.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

34 / 46

Exemplo
p (x ) = t 3 + 2t 2 5t 6 >> >> p = [1 2 -5 -6] roots(p)

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


M. Weber Mendon ca (UFSC) MATLAB Avan cado 2011.2 35 / 46

Sistema de equa co es n ao lineares: fsolve


Para encontrarmos a solu c ao de um sistema de equa co es n ao lineares da forma F (x ) = 0 onde F : Rn Rm , usamos a fun c ao fsolve, identicamente ` a fun c ao fzero: >> fsolve(@minhafuncao,x0)

se utilizarmos uma fun c ao em arquivo, ou >> fsolve(fun,x0)

se utilizarmos uma fun c ao an onima. Observa c ao: Este comando faz parte da Optimization Toolbox, que pode n ao estar dispon vel na sua instala c ao do MATLAB.
M. Weber Mendon ca (UFSC) MATLAB Avan cado 2011.2 36 / 46

Exemplo

Resolver o sistema de equa c oes


2 + 4x 2 16 y1 = 3x1 2 2 3x 2 5 y2 = 2x1 2

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

37 / 46

Exemplo

Resolver o sistema de equa c oes


2 + 4x 2 16 y1 = 3x1 2 2 3x 2 5 y2 = 2x1 2

>> >>

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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

37 / 46

Exemplo

Encontrar a raiz de F (x ) =
2+x x x1 2 3 sin(x1 + 2x2 3x3 )

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

38 / 46

Exemplo

Encontrar a raiz de F (x ) = >> >>


2+x x x1 2 3 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

38 / 46

Exemplo

Encontrar a raiz de F (x ) = >> >> >>


2+x x x1 2 3 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

38 / 46

Otimiza c ao: Minimiza c ao de fun c oes

Agora, queremos resolver o problema minimizar f (x ).

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

39 / 46

Minimiza c ao de uma fun c ao de v arias vari aveis: fminsearch

Para encontrarmos o m nimo de uma fun c ao real de v arias vari aveis, a partir de um ponto inicial x0, usamos o comando >> x = fminsearch(@funcao,x0)

Se quisermos tamb em saber o valor da fun c ao no ponto de m nimo, usamos a sintaxe >> [x,fval] = fminsearch(@funcao,x0)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

40 / 46

Exemplo

Minimizar a fun c ao
2 2 f = e x1 (4x1 + 2x2 + 4x1 x2 + 2x2 + 1)

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

41 / 46

Exemplo

Minimizar a fun c ao
2 2 f = e x1 (4x1 + 2x2 + 4x1 x2 + 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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

41 / 46

Exemplo

Minimizar
2 2 f (x ) = 100(x2 x1 ) + (1 x1 )2

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

42 / 46

Exemplo

Minimizar
2 2 f (x ) = 100(x2 x1 ) + (1 x1 )2

>> >>

f = @(x) 100*(x(2)-x(1).^2).^2+(1-x(1)).^2 fminsearch(f,[0;0])

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

42 / 46

Minimiza c ao de uma fun c ao de uma vari avel com restri co es: fminbnd

Para encontrarmos o m nimo de uma fun c ao de uma vari avel dentro de um intervalo [a, b ], usamos o comando >> x = fminbnd(@funcao,a,b)

Se quisermos tamb em saber o valor da fun c ao no ponto de m nimo, usamos a sintaxe >> [x,fval] = fminbnd(@funcao,a,b)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

43 / 46

Exemplo

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

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 Mendon ca (UFSC)

MATLAB Avan cado

2011.2

44 / 46

Exemplo

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

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

45 / 46

Exemplo

Minimizar f (x ) = x 2 1 no intervalo [1, 3]. >> >> f = @(x) x.^2; fminbnd(f,1,3)

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

45 / 46

interp1, interp2, interp3 e interpn

Para interpolarmos um conjunto de pontos em 1D, 2D, 3D ou em N dimens oes, usamos os comandos interp1 interp2 interp3 interpn respectivamente.

M. Weber Mendon ca (UFSC)

MATLAB Avan cado

2011.2

46 / 46

Anda mungkin juga menyukai