160 likes | 267 Views
Introdução ao MATLAB para Hidrólogos. Aplicações em Hidrologia – Parte 1. Porto Alegre, outubro de 2005. Programação. Álgebra Linear (Sistemas lineares; Autovalores e autovetores) Otimização Equações Não-lineares (Zeros de funções) Ajuste de curvas Interpolação
E N D
Introdução ao MATLABpara Hidrólogos Aplicações em Hidrologia – Parte 1 Porto Alegre, outubro de 2005
Programação • Álgebra Linear (Sistemas lineares; Autovalores e autovetores) • Otimização • Equações Não-lineares (Zeros de funções) • Ajuste de curvas • Interpolação • Análise de Dados e Estatística
Álgebra linear • Sistemas Lineares • Rearrumar equações; • Escrevê-las em forma matricial; • Resolvê-las 5x = 3y - 2z + 10 8y + 4z = 3x + 20 2x + 4y - 9z = 9 5x - 3y + 2z = 10 -3x + 8y + 4z = 20 2x + 4y - 9z = 9 >> A = [5 -3 2; -3 8 4; 2 4 -9]; >> b = [10; 20; 9]; >> x = A\b x = 3.4442 3.1982 1.1868
Autovalores e Autovetores V(:,1:end) = autovetores diag(D) = autovalores Álgebra linear A v = lv >> [V,D]=eig(A) V = -0.1709 0.8729 0.4570 -0.2365 0.4139 -0.8791 0.9565 0.2583 -0.1357 D = -10.3463 0 0 0 4.1693 0 0 0 10.1770
Funções sem restrição fminunc >>x0 = [-1,1]; >>[x,fval,exitflag,output] = fminunc(@objfun,x0); x = 0.5000 -1.0000 fval = 1.3030e-10 exitflag = 1 output = iterations: 7 funcCount: 40 stepsize: 1 firstorderopt: 9.2801e-004 algorithm: 'medium-scale: Quasi-Newton line search' Otimização function f = objfun(x) f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
Funções com restrições Expressões fmincon >>x0 = [-1,1]; >>[x, fval] = ... >>fmincon(@objfun,x0,[],[],[],[],[],[],@confun) x = -9.5474 1.0474 fval = 0.0236 >>[c,ceq] = confun(x) c= 1.0e-14 * 0.1110 -0.1776 ceq = [] Otimização x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) function [c, ceq] = confun(x) % Nonlinear inequality constraints c = [1.5 + x(1)*x(2) - x(1) - x(2); -x(1)*x(2) - 10]; % Nonlinear equality constraints ceq = [];
Funções com restrições Limites para variáveis fminbnd >>x = fminbnd(@myfun,0,5) x = 3 >>y = f(x) y = -1 Otimização x = fminbnd(fun,x1,x2) function f = myfun(x) f = (x-3).^2 - 1;
Otimização • Programação Linear • Programação Quadrática x = linprog(f,A,b,Aeq,beq,lb,ub,x0) x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
Funções com uma variável fzero x = fzero(fun,x0) Equações Não-lineares function y = f(x) y = x.^3-2*x-5; >>z = fzero(@f,2) z = 2.0946
Funções com mais variáveis fsolve Otimização (minimização do erro) Equações Não-lineares x = fsolve(fun,x0) function F = myfun(x) F = [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]; >>x0 = [-5; -5]; >>[x,fval] = fsolve(@myfun,x0) x = 0.5671 0.5671 fval = 1.0e-006 * -0.4059 -0.4059
Funções polinomias polyfit, polyval, polyder, conv, deconv >> a = polyfit (x,y,n) >> y = polyval (a,x) >> q = polyder(p) >> a = [1 2 3]; b = [4 5 6]; >> c = conv(a,b) c = 4 13 28 27 18 Ajuste de curvas
Ajuste de curvas • Funções não-polinomiais • linearização • otimização (minimização do erro)
Interpolação interp1, interp2, interp3, interpn, interpft Interpolação yi = interp1(x,Y,xi,method) yi = interp1(x,Y,xi,method,'extrap') yi = interp1(x,Y,xi,method,extrapval) pp = interp1(x,Y,method,'pp') 'nearest‘ Interpola para o valor mais próximo 'linear‘ Interpolação Linear (default) 'spline‘ Interpolação spline cúbica 'pchip‘ Interpolação cúbica Hermite 'cubic‘ (Mesmo que 'pchip') 'v5cubic‘ Interpolação cúbica usada em MATLAB 5 ‘extrap’ Extrapola usando o mesmo método ‘extrapval’ Extrapola para o valor desejado ‘pp’ Determina os coeficientes do polinômio formado por Y
Funções Built-in (Analisam colunas) mean, median, std, max, min, sum, cumsum, prod, cumprod, sort, diff Análise de Dados e Estatística >>A=[4:6; 1:3:8; 15:-1:13] A = 4 5 6 1 4 7 15 14 13 >> mean(A) ans = 6.6667 7.6667 8.6667 >> cumsum(A) ans = 4 5 6 5 9 13 20 23 26 >> diff(A) ans = -3 -1 1 14 10 6
Análise de Dados e Estatística • Built-in functions • corrcoef, cov, kurtosis, skewness, fft, ttest, kstest, boxcox >> corrcoef(A) ans = 1.0000 0.9935 0.9436 0.9935 1.0000 0.9752 0.9436 0.9752 1.0000
Análise de Dados e Estatística • Gráficos • normplot >>x = normrnd(10,1,25,1); >>normplot(x)