Ajuste de Curvas: Método dos Mínimos Quadrados
Sumário
Algoritmo de ajuste polinomial utilizando os Mínimos Quadrados ... 1
Diagrama de Bloco ... 3
Exemplo ... 5
Programação no Scilab. ... 8
Algoritmo de ajuste polinomial utilizando os Mínimos
Quadrados
Dados Iniciais Ler n, quantidade de pontos a ajustar Ler m, grau do polinômio de ajuste Ler (x[i],y[i]), par ordenado a ser ajustado Ler z, valor a ser avaliado no polinômio de ajuste {Formação do sistema de equações lineares} Para i de 1 até m+1 passo 1 faça k1=i-1 k2=i-1 s1=0 Para j de 1 até m+1 passo 1 faça s2=0 Se (i=1 e j=1) então a[i,j]=n senão Para l de 1 até n passo 1 faça s2=s2 + x[l]k2 Fim_Para a[i,j]=s2 Fim_Se k2=k2+1 Fim_Para Se i=1 então Para p de 1 até n passo 1 faça s1=s1+y[p] Fim_Para senão Para p de 1 até n passo 1 faça s1=s1+x[p]k1*y[p] Fim_Para Fim_Se b[i]=s1 Fim_Para m=m+1 {Resolução do sistema de equações lineares pelo método de Gauss} {Transformação a matriz triangular superior} Para k de 1 até m-1 passo 1 faça Para i de k+1 até m passo 1 faça 1 [ , ] [ , ] a i k m a k k a[i,k]=0Fim_Para Fim_Para
{Resolução de a matriz triangular superior}
[ ] [ ] [ , ] b m c m a m m
Para k de m-1 até 1 passo -1 faça s=0
Para j de k+1 ate m passo 1 faça s=s+a[k,j]*c[j] ] , [ ) ] [ ( ] [ k k a s k b k c Fim_Para
{Coeficientes do polinômio de Ajuste}
f=0
Para i de 1 até m passo 1 faça Escreva c[i]
Se i=1 então f=f+c[i] senão f=f+c[i]*zi-1 Fim_Se Fim_Para
Diagrama de Bloco
Inicio n, m, x[i], y[i] i1,m+1,1 k1i-1 k2i-1 s1i-1 j1,m+1,1 s2s2+x[l]k2 a[i,j] s2 S20 l1,n,1 p1,n,1 s1s1+x[p]k1*y[p] b[i] s1 i=1 e j=1 a[i,j] n k2k2+1 V Fmm+1 Cont k1,m-1,1 ik+1,m,1 m1a[i,k]/a[k,k] a[i,k] 0 jk+1,m,1 a[i,j] a[i,j]-m1*a[k,j] b[i] b[i]-m1*b[k] x[m] b[m]/a[m,m] km-1,1,-1 s0 jk+1,m,1 ss+a[k,j]*x[j] x[k] (b[k]-s)/a[k,k] x[i] Fim
Exemplo
Dado os pontos:
x 0 0.25 0.5 0.75
y 1 1.284 1.6487 2.1170
Obter o ajuste linear y calcule x=2
Dados Iniciais
Ler n=4, quantidade de pontos a ajustar Ler m=1, grau do polinômio de ajuste Ler (x[i],y[i]), par ordenado a ser ajustado
x[1] x[2] x[3] x[4] Y[5]
x 0 0.25 0.5 0.75 1
y 1 1.284 1.6487 2.1170 2.7183
y[1] y[2] y[3] y[4] y[5]
{formação do sistema de equações lineares}
Para i de 1 até 2 passo 1 faça k1=1-1=0
k2=1-1=0 s1=0
Para j de 1 até 2 passo 1 faça s2=0
Como (1=1) e (1=1) então a[1,1]=5 k2=0+1=1
Fim_Para j=1
Para j de 2 até 2 passo 1 faça s2=0
Como (1=1) e (2<>1)
Para l de 1 até 5 passo 1 faça s2=s2 + x[1]1 =0+01=0 Fim_Para l=1
Para l de 2 até 5 passo 1 faça s2=s2 + x[2]1 =0+(0.25)1=0.25 Fim_Para l=2 Para l de 3 até 5 passo 1 faça s2=s2 + x[3]1 =0.25+(0.5)1=0.75 Fim_Para l=3 Para l de 4 até 5 passo 1 faça s2=s2 + x[4]1 =0.75+(0.75)1=1.5 Fim_Para l=4 Para l de 5 até 5 passo 1 faça s2=s2 + x[5]1 =1.5+(1)1=2.5 Fim_Para l=5 a[1,2]=2.5
k2=1+1=2 Fim_Para j=1 Como i=1 então
Para p de 1 até n passo 1 faça s1=s1+y[1]=0+1=1 Fim_Para p=1
Para p de 2 até n passo 1 faça s1=s1+y[2]=1+1.284=2.284 Fim_Para p=2 Para p de 3 até n passo 1 faça s1=s1+y[3]=2.284+1.6487=3.9327 Fim_Para p=3 Para p de 4 até n passo 1 faça s1=s1+y[4]=3.9327+2.1170=6.0497 Fim_Para p=4 Para p de 5 até n passo 1 faça s1=s1+y[5]=6.0497+2.7183=8.768 Fim_Para p=5 b[1]=8.768
Fim_Para i =1
Para i de 2 até 2 passo 1 faça k1=2-1=1
s1=0
Para j de 1 até 2 passo 1 faça s2=0
Como (2<>1) e (1=1)
Para l de 1 até 5 passo 1 faça s2=s2 + x[1]1 =0+01=0 Fim_Para l=1
Para l de 2 até 5 passo 1 faça s2=s2 + x[2]1 =0+(0.25)1=0.25 Fim_Para l=2 Para l de 3 até 5 passo 1 faça s2=s2 + x[3]1 =0.25+(0.5)1=0.75 Fim_Para l=3 Para l de 4 até 5 passo 1 faça s2=s2 + x[4]1 =0.75+(0.75)1=1.5 Fim_Para l=4 Para l de 5 até 5 passo 1 faça s2=s2 + x[5]1 =1.5+(1)1=2.5 Fim_Para l=5 a[2,1]=2.5
k2=1+1=2 Fim_Para j=1
Para j de 2 até 2 passo 1 faça s2=0
Como (2<>1) e (2<>1)
Para l de 1 até 5 passo 1 faça s2=s2 + x[1]2 =0+02=0 Fim_Para l=1
Para l de 2 até 5 passo 1 faça s2=s2 + x[2]2 =0+(0.25)2=0.0625 Fim_Para l=2 Para l de 3 até 5 passo 1 faça s2=s2 + x[3]2 =0.0625+(0.5)2=0.3125 Fim_Para l=3 Para l de 4 até 5 passo 1 faça s2=s2 + x[4]2 =0.3125+(0.75)2=0.875 Fim_Para l=4 Para l de 5 até 5 passo 1 faça s2=s2 + x[5]2 =0.875+(1)2=1.875 Fim_Para l=5 a[2,2]= 1.875
k2=2+1=3 Fim_Para j=2 Como 2<>1 então
Para p de 1 até 5 passo 1 faça s1=s1+x[1]1*y[1]=0+0*1=0 Fim_Para p=1
Para p de 2 até 5 passo 1 faça s1=s1+x[2]1*y[2]=0+(0.25)1(1.284)= 0.321 Fim_Para p=2
Para p de 3 até 5 passo 1 faça s1=s1+x[3]1*y[3]= 0.321+(0.5)1(1.6487)=1.14535 Fim_Para p=3
Para p de 4 até 5 passo 1 faça s1=s1+x[4]1*y[4]= 1.14535+(0.75)1(2.1170)= 2.7331 Fim_Para p=4
Para p de 5 até 5 passo 1 faça s1=s1+x[5]k1*y[5]= 2.7331+(1)1(2.7183)= 5.4514 Fim_Para p=5
b[2]=5.4514 Fim_Para i =2 m=1+1=2
{resolução do sistema de equações lineares pelo método de Gauss} {transformação a matriz triangular superior}
Para k de 1 até 1 passo 1 faça Para i de 2 até 2 passo 1 faça 1 [2,1] 2.5 0.5 [1,1] 5 a m a a[2,1]=0
Para j de 2 até 2 passo 1 faça
a[2,2]=a[2,2]-m1*a[1,2]=1.875-(0.5)(2.5)= 0.625 Fim_Para j=2 b[2]=b[2]-m1*b[1]=5.4514-(0.5)(8.768)= 1.0674
Fim_Para i=2 Fim_Para k=1
[2] 1.0674 [2] 1.70784 [2, 2] 0.625 b c a
Para k de 1 até 1 passo -1 faça s=0
Para j de 2 ate 2 passo 1 faça s=s+a[1,2]*c[2]=0+(2.5)(1.70784)= 4.2696 Fim_Para j=2 [1] ( [1] ) (8.768 4.2696) 0.89968 [1,1] 5 b s c a Fim_Para
{coeficientes do polinômio interpolador}
f=0
Para i de 1 até 2 passo 1 faça Escreva c[1]=0.89968
Como i=1 então f=f+c[1]=0+0.89968 Fim_Para i=1
Para i de 2 até 2 passo 1 faça Escreva c[2]=1.70784
Como 2=1 é falso f=f+c[i]*zi-1=0.89968+1.70784*(2)1=4.31536 Fim_Para i=2
Programação no Scilab.
function p=MinimoQ(x, y, g) //Formação do Sistema Linear m=length(x) n=g+1 a=zeros(n,n) b=zeros(n,1) for i=1:1:n k1=i-1 k2=i for j=1:1:n if j==1 a(1,1)=m else s=0 for k=1:1:m,s=s+x(k)^(k2),end a(i,j)=s a(j,i)=a(i,j) k2=k2+1 end end s=0 if i==1
for k=1:1:m,s=s+y(k),end
else
for k=1:1:m,s=s+y(k)*x(k)^(k1),end
end
b(i)=s k1=k1+1
end
//Resolução do Sistema Linear // Matriz triangular superior for k=1:1:n-1 for i=k+1:1:n m = a(i,k)/a(k,k) a(i,k)=0 for j=k+1:1:n a(i,j)=a(i,j)-m*a(k,j) end b(i)=b(i)-m*b(k) end end // Solução do sistema x=zeros(n,1) x(n)=b(n)/a(n,n) for k=n-1:-1:1 s=0 for j=k+1:1:n
s=s+a(k,j)*x(j) end
x(k)=(b(k)-s)/a(k,k) end
//Formação do polinomio de ajuste de curvas p=poly(x ,"x","coeff") endfunction // Exemplo x = [0;0.25;0.5;0.75;1] y = [1;1.284;1.6487;2.1170;2.7183] p = MinimoQ(x,y,1) p = MinimoQ(x,y,2) p = MinimoQ(x,y,3)