
clc
clear
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ajuste de Curvas
%
% Ajuste a tabela de dados armazenada no arquivo dados.m por
% polinomio de grau  2. Faca o grafico dos ajustes.
% 
% dados.m: primeira coluna contem x e segunda coluna contem y
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo off
disp(' ');
disp('Tecle alguma coisa para continuar...'); pause
clc;
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ajuste de Curvas de segunda ordem
%      
%       p2(x) = ax^2 + bx + c
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Leitura do Arquivo
pause
%
load dados.m
%
pause
% Exibindo a matriz dados na tela
pause
%
dados
pause
% Definindo a primeira coluna de dados como o vetor x
pause
%
x=dados(:,1)
pause
% Definindo a segunda coluna de dados como o vetor y
pause
%
y=dados(:,2)
pause
% Plotando os pontos tabelados
pause
%
plot (x,y,'*')
xlabel('x'),ylabel('y = f(x)')
title('Ajuste de Curvas')
pause
% Determinando o  tamanho dos vetores x e y 
pause
%
[m,mm]=size(x)
pause
% Inicializando a matriz G
% A matriz G armazena g1(xk), g2(xk), g3(xk)
pause
%
G=zeros(m,3)
pause
% primeira coluna de G = g1(xk)
G(:,1)=1.
pause
% segunda coluna de G = g2(xk)
G(:,2)=x
pause
% terceira coluna de G = g3(xk)
G(:,3)=x.^2
pause
% Inicializando a matriz A e o vetor dos termos independentes (b)
% 
%                 
%         |  <g1,g1>  <g1,g2>  <g1,g3>  |          | <y,g1> |
%     A = |  <g2,g1>  <g2,g2>  <g2,g3>  |      b = | <y,g2> | 
%         |  <g3,g1>  <g3,g2>  <g3,g3>  |          | <y,g3> |
%
pause
%
A=zeros (3,3)
pause
b=zeros(3,1)
pause
% Preenchendo a matriz A
%
%for i=1:3
%     for j=1:3
%          A(i,j)=G(:,i)'*G(:,j)
%     end
%end
%
pause
echo off
for i=1:3
     for j=1:3
          A(i,j)=G(:,i)'*G(:,j)
     end
end
echo on
pause
% Preenchendo o vetor b
%
%for i=1:3
%     b(i)=y'*G(:,i)
%end
%
pause
echo off
for i=1:3
     b(i)=y'*G(:,i)
end
echo on
pause
% Resolvendo o sistema linear -  A * alpha = b
alpha=A\b
pause
% Imprimdo o polinomio gerado
% fprintf('fi(x) = (%f) x^2 + (%f) x +(%f)\n', alpha(3), alpha(2), alpha(1))
pause
echo off
fprintf('\n');
fprintf('fi(x) = (%f) x^2 + (%f) x +(%f)\n', alpha(3), alpha(2), alpha(1));
fprintf('\n');
fprintf('\n');
echo on
pause
%-------------------Plotando o ajuste------------------------
% Preenchendo o vetor fi(xk)
pause
%
fi = alpha(1) + alpha(2)*x + alpha(3)*x.^2
% Plotando as curvas x vs. y e x vs fi(x)
pause
%
plot(x,y,'*b',x,fi,'r')
xlabel('x'),ylabel('y = f(x)')
title('Ajuste de Curvas de segunda ordem')
disp('Fim');
pause