Você está na página 1de 4

Curso Básico de Matlab - Prof.

Jakler Nichele 7-1

Capítulo 07
Estatística de Dados e Ajustes

■ Funções Básicas para Análise de Dados e Estatística

Carregamento de dados: load('Dados.txt')

mean( )
std( ) calcula o desvio padrão (p/ matrizes, calcula por coluna)
max( )
min( )
median( )
var( )
corrcoef( )
mode( )
cov( )
sort( )
sortrows( )

■ Ajuste Polinomial (polyfit e polyval)

O comando polyfit emprega o método dos mínimos quadrados para realizar o ajuste
polinomial.

>> x = [0 1 2 3 4 5];
>> y = [0 20 60 68 77 110];
>> plot (x,y,'o')
>> c1 = polyfit(x,y,1); (polinômio de 1º grau)
>> c2 = polyfit(x,y,2); (polinômio de 2º grau)
>> c3 = polyfit(x,y,3); (polinômio de 3º grau)
>> c4 = polyfit(x,y,4); (polinômio de 4º grau)
>> xnew = 0 : 0.1 : 5;
>> yn1 = polyval(c1,xnew); yn2 = polyval(c2,xnew);
>> yn3 = polyval(c2,xnew); yn4 = polyval(c4,xnew);
>> plot(xnew,yn1,'r-',xnew,yn2,'g-',xnew,yn3,'b-',...
xnew,yn4,'k-',x,y,'ko',...
'LineWidth',2,...
'MarkerEdgeColor','r',...
'MarkerFaceColor','k',...
'MarkerSize',10); grid;
>> legend('1º grau','2º grau','3º grau','4º grau','Dados');
Curso Básico de Matlab - Prof. Jakler Nichele 7-2

■ Ajuste por mínimos quadrados (1D)

O problema numérico deve ser resolvido a partir da solução de um sistema de equações


lineares.
“polyfit” já resolve o caso de aproximações polinomiais

Solução ⇒ LINEARIZAÇÃO DO PROBLEMA

Ex: y = aebx ⇒ linearização: ln y = ln a + bx ⇒ y* = a1 + a0x

a0 e a1 podem ser encontrados com o polyfit.

Ex: y = cxd ⇒ linearização: ln y = ln c + d ln x ⇒ y* = a1 + a0x*

a0 e a1 podem ser encontrados com o polyfit.

✓ Exemplo 1:
Dados de P × t numa bomba de vácuo.
Função objetivo: P = P0 e−t/τ
Determinar P0 e τ.

t 0 0.5 1.0 5.0 10.0 20.0


P 760 625 528 85 14 0.16

Linearização: ln P = ln P0 − t/τ ⇒ P* = a1 + a0t sendo a1 = ln P0 a0 = −1/τ

expfit.m
t = [0 0.5 1.0 5.0 10.0 20.0];
P = [760 625 528 85 14 0.16];
logP = log(P);

a = polyfit(t,logP,1);
P0 = exp(a(2));
tau = -1/a(1);
tfit = 0: .1 : 20;
Pfit = P0*exp(-tfit/tau);
plot(t,p,'o',tfit,Pfit),grid
xlabel('Tempo(s)'), ylabel('Pressão (mm-Hg)')

✓ Exemplo 2:

Seja a função objetivo: y = a0 cos(t) + a1 tsen(t)


Parâmetros a ajustar: a0 e a1
Pode ser utilizado o seguinte esquema de linearização:
Curso Básico de Matlab - Prof. Jakler Nichele 7-3

■ Ajuste por mínimos Quadrados Não Linear 1D (fminsearch)

✓ Exemplo 3:
Função objetivo: y(t) = k1 + k2 e−t/Tcos(ωt + ϕ)
Parâmetros: k1, k2, T, ω, ϕ
Dados:
t = 0: .25 : 10;
y =[0 …
0.0670 0.2018 0.3122 0.3503 0.3215 0.2635 0.2159 0.1995 …
0.2120 0.2369 0.2574 0.2644 0.2591 0.2483 0.2395 0.2365 …
0.2388 0.2434 0.2472 0.2485 0.2475 0.2455 0.2439 0.2433 …
0.2438 0.2446 0.2453 0.2456 0.2454 0.2450 0.2447 0.2446 …
0.2447 0.2448 0.2450 0.2450 0.2450 0.2450 0.2450 0.2450];

Exemplo de Script:
load('Data.txt');
t = Data(:,1);
y = Data(:,2);
% variáveis c(1)=k1 c(2)=k2 c(3)=1/T c(4)=omega c(5)=phi
funcao = @(c) norm(c(1) - c(2)*exp(-c(3)*t).*cos(c(4)*t+c(5)) - y);

c0 = [0.25 0.25 1 1 0]; %chute inicial (aqui é o reino da engenharia)


c = fminsearch(funcao,c0);

yfit = c(1) - c(2)*exp(-c(3)*t).*cos(c(4)*t + c(5));


save Coeff.txt c - ASCII
plot(t,y,'o',t,yfit),grid
legend('Dados','Ajuste')

Obs: O Matlab também suporta as funções de leitura e escrita da linguagem C. Estude os


helps das seguintes funções:

fopen fwrite sscanf fgetl


fclose fscanf sprintf fseek
fread fprintf fgets ferror

■ Interpolação

Determina a função que passa exatamente pelos pontos dos dados.


Curso Básico de Matlab - Prof. Jakler Nichele 7-4

interp1( ) interp2( ) interp3( ) spline( )


interpft( ) ⇒ usa transformada de Fourier (útil para funções periódicas)

interp1
Sintaxe: ynew = interp1(x,y,xnew,'method')

method = nearest, linear, cubic, spline


Script: interpol.m
x = [0 0.785 1.570 2.356 3.141 3.947 4.712 5.497 6.283];
y = [0 0.707 1.000 0.707 0.000 -0.707 -1.000 -0.707 -0.000];

xaux = linspace(0,2*pi,51);
y1 = interp1(x,y,xaux,'nearest');
y2 = interp1(x,y,xaux,'linear');
y3 = interp1(x,y,xaux,'cubic');
y4 = interp1(x,y,xaux,'spline');

subplot(2,2,1), plot(x,y,'ko',xaux,y1), grid, title('nearest')


subplot(2,2,2), plot(x,y,'ko',xaux,y2), grid, title('linear')
subplot(2,2,3), plot(x,y,'ko',xaux,y3), grid, title('cubic')
subplot(2,2,4), plot(x,y,'ko',xaux,y4), grid, title('spline')

print -f1 -dbmp interpol

Você também pode gostar