Professional Documents
Culture Documents
EXAMEN
Reynaldo Pulido Garca
El programa consta en obtener un polinomio de grado n que mejor ajuste a la nube de
datos que se nos proporcion.
El modelo es de la forma:
= 0 + 1 + 2 2 + +
Haciendo el ajuste en Excel:
Ahora con el programa que se realiz se busc el polinomio que mejor ajustara a la nube
de datos, obtenindose los siguientes resultados:
1
Fig.2 Grafica que muestra la nube de datos
Para el polinomio de grado 1, obtenemos lo siguiente
Fig.4 Resultados
2
Para el polinomio de grado 2, obtenemos lo siguiente:
Haciendo una comparacin con el polinomio de grado uno, este nos da un error de
prediccin de 1226.52, lo que significa que este polinomio se ajusta mejor a los datos
3
Para el polinomio de grado 4:
4
Con los resultados obtenidos anteriormente podemos ver que el polinomio que mejor
ajuste hace es el de grado 6.
Si graficamos el polinomio y el misfit podremos ver cuando hay errores positivos como
negativos.
= (( ))\( (: ,2))
Esta ecuacin nos sirve para obtener los valores de los m parmetros que queramos, a
partir de la matriz de coeficientes G, lo que se busc en el programa era obtener una matriz
G en donde Matlab nos arrojara los valores de los coeficientes de mi modelo = 0 +
1 + 2 2 + + , es decir G representa los valores de 0 = 1, , 2 ., y as y se nos
formara una matriz de 117 + 1 donde n ser el grado del polinomio, es decir que si el polinomio
es de grado 2 se nos formara una matriz de (117*3), ahora Matlab nos proporciona la facilidad de
calcular la transpuesta de una matriz solo con poner junto a la matriz, ahora (: ,2) significa que
le estamos declarando a Matlab que queremos el vector columna 2. En la ecuacin vemos que
aparece \, conocido como mejor conocido como divisin de la
izquierda. Entonces esta frmula nos proporciona los valores de los parmetros m que estudiamos
tericamente, donde la frmula que se nos proporcion significa = ( )1 , en donde
backslash nos dice que en el producto de G*G se calculara su inversa y posteriormente multiplicara
con la transpuesta de G por los datos dados d.
5
Script del programa:
function ajuspoliR
clear all;
clc;
%cargamos los datos
load('datos.txt');
x=datos(:,1); %Datos Xi
y=datos(:,2); %Datos Yi
N=length(x); %Numero de datos
figure(1)
plot(x,y,'.') %Grafica de los datos
title('Modelo')
xlabel('X') % Etiqueta el eje horizontal
ylabel('Y')% Etiqueta el eje vertical
legend('Datos') %
grid on
%modelo di=mo+m1xi+m2xi^2+...+mxi^n
%%%%%%%%%%%5creacion de la matri de mxn%%%%%%%%%%%%%%%%%
%matriz de coeficientes G=[1,x1,x1^2...,x1^n;
% 1,x2,x2^2...,x2^n;
% . .
% . .
% . .
% 1,xn,xn^2...,x^n]
a=2; %denotara columna 2
k=2% k=input ('dame el grado del polinomio: ');
r=k+1; %Numero de columnas de acuerdo al grado del polinomio
m=ones(N,r); %matriz de unos de Nxr
while r>1 %solo funciona si es r no es uno
m(:,a)=x; %denota que nuestra matriz m en la posicion (1,a) sera
igual a la columna de x
a=a+1;
r=r-1;
end
t=m; %matriz de coeficientes de la forma t=[1 x1 x1 ...xn:1 x2
x2..x2n]
%elevar al grado delpolinomio los segundos coeficientes, dependiendo el
%grado del polinomio
w=k+1; %numero de filas,k es el grado del polinomio
e=1;
s=0; %denotara a que grado se elevara
format long
%ciclo para elevar a la potencia n cada fila de la matriz G
for o=1:w
g=t(:,e).^s;
t(:,e)=g;
e=e+1;
s=s+1;
w=w-1;
end
G=t;%Nueva matriz de coeficientes G de la forma normal
6
y1=(G*B); %Valores predichos de la forma y^
por=length(y1); %Calculo de la longitud de la matriz de valores
predichos
figure(2);
plot(x,y,'g.',x,y1,'r+')
title('Ajuste Polinomial')
xlabel('X') % Etiqueta el eje horizontal
ylabel('Y')% Etiqueta el eje vertical
legend('Datos','Polinimio ajustador de grado n') % Pone una leyenda
grid on
misfiit=(y-y1);%Matriz para el calculo de misfit de valores dados mmenos
los predichos
misfitt=sum(misfiit); %Valor del error de prediccion
errpred=misfiit.^2;
errpredvd=sum(errpred) %Erorr de prediccion
medx=mean(x);%media de x
medy=mean(y);%media de y
% % % % % % % % sumx=sum((x-medx).^2);
% % % % % % % % sumy=sum((y-medy).^2);
% % % % % % % % sumxy=sum((x-medx).*(y-medy));
% % % % % % % % %coeficiente de correlacion
% % % % % % % % r=sumxy/sqrt(sumx*sumy)
%coeficiente de determinacion
vy1=sum((y1-mean(y1)).^2);
vy=sum((y-mean(y)).^2);
R2=vy1/vy
%coeficiente de correlacion
r=sqrt(R2)
% % % % % % % % % % % % medy1=mean(y1);%media de y1
% % % % % % % % % % % % sumy1=sum((y1-medy1).^2);
% % % % % % % % % % % % sumxy1=sum((x-medx).*(y1-medy1));
% % % % % % % % % % % % r1=sumxy1/sqrt(sumx*sumy1);
figure(3);
stem(x,misfiit,'.')
grid on
figure (4)
subplot(2,1,1),plot(x,y,'g.',x,y1,'r+'), grid on , title('Ajuste
polinomial'),ylabel('y'),xlabel('x')
subplot(2,1,2),stem(x,misfiit,'.'),title('Misfit'),ylabel('e'),xlabel('x'
)
grid on