MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB...
-
Upload
truongkien -
Category
Documents
-
view
230 -
download
5
Transcript of MATLAB Avan˘cado - mtm.ufsc.brmtm.ufsc.br/~melissa/20112/curso_matlab/aula_04.pdf · MATLAB...
MATLAB Avancado
Melissa Weber Mendonca1
1Universidade Federal de Santa Catarina
2011.2
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 1 / 25
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
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
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
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
Exemplo
Encontrar uma raiz de f (x) = e2x − 3.
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 5 / 25
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
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
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
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
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
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
Exemplo
Encontrar a raiz de
F (x) =
[x2
1 + x2x3
sin(x1 + 2x2 − 3x3)
]
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 10 / 25
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
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
Otimizacao: Minimizacao de funcoes
Agora, queremos resolver o problema
minimizar f (x).
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 11 / 25
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
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
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
Exemplo
Minimizarf (x) = 100(x2 − x2
1 )2 + (1− x1)2
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 14 / 25
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
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
Exemplo
Minimizar f (x) = x nos intervalos [0, 1] e [−10, 1].
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 16 / 25
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
Exemplo
Minimizar f (x) = x2 − 1 no intervalo [1, 3].
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 17 / 25
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
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
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
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
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
Exemplo
M. Weber Mendonca (UFSC) MATLAB Avancado 2011.2 22 / 25
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
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
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