Escolar Documentos
Profissional Documentos
Cultura Documentos
Por: Carlos Armando De Castro P. El siguiente algoritmo recibe un nmero arbitrario de pares de datos en la forma de una matriz de 2*n, donde las abcisas se encuentran en la primera fila (o rengln) y las ordenadas en la segunda fila de la matriz, devolviendo la pendiente m y el intercepto b de la recta que interpola a los datos y adems entrega su grfica:
m=(n*D-A*B)/(n*C-A^2); b=(C*B-D*A)/(n*C-A^2);
Descripcin: Este cdigo realiza ajustes varios de regresin por mnimos cuadrados. Los ajustes son exponencial, de potencia, logartmico y polinomial. Al final, se visualiza en pantalla la ecuacin del modelo ajustado y su grfica correspondiente.
% Regresion minimos cuadrados % Ajustes varios % Realizado por Ing E.Porto % El programa realiza varios ajustes: exponencial, de potencias, % logartmico y polinomial
clc;clear; %Ingreso de datos. Es lo nico que tienes que digitar. x=[1 2 3 4];y=[0 0.5 2 4]; %Digita aqui los datos de las parejas X y Y
%Men para escoger anlisis de regresin while opcion==0 k=menu('Escoja analisis regresion','A*exp(B*X)','A*B^X','A*X^B','A+B*Ln(X)','Polinomio'); if k==1 opcion=1; m=1; if any(y<0) ajuste=0; else yn=log(y); end elseif k==2 opcion=1; m=1;
if any(y<0) ajuste=0; else yn=log(y); end elseif k==3 opcion=1; m=1; if any(y<0)|any(x<0) ajuste=0; else yn=log(y); xn=log(x); end elseif k==4 opcion=1; m=1; if any(x<0) ajuste=0; else xn=log(x); end elseif k==5 opcion=1; m=input(' Grado del polinomio = '); if m>n ajuste=0; end end end
else for i=1:m+1 for j=1:m+1 sx(i,j)=sum(xn.^(i+j-2)); end sy(i)=sum(yn.*xn.^(i-1)); end % Presentacion de resultados fprintf(' Matriz de sumatorias '); disp([sx sy']); c=sxsy'; xx=linspace(min(x),max(x)); fprintf(' Curva ajustada: '); if k==1 fprintf(' Y = %g * exp(%g * X) n',exp(c(1)),c(2)); yy=exp(c(1))*exp(c(2)*xx); ya=exp(c(1))*exp(c(2)*x); elseif k==2 fprintf(' Y = %g * %g ^ X n',exp(c(1)),exp(c(2))); yy=exp(c(1))*exp(c(2)).^xx; ya=exp(c(1))*exp(c(2)).^x; elseif k==3 fprintf(' Y = %g * X ^ %g n',exp(c(1)),c(2)); yy=exp(c(1))*xx.^c(2); ya=exp(c(1))*x.^c(2); elseif k==4 fprintf(' Y = %g + %g * LnX n',c(1),c(2)); yy=c(1)+c(2)*log(xx); ya=c(1)+c(2)*log(x); elseif k==5 for w=1:m+1 if c(w)<0 sg='-'; else
sg='+'; end fprintf('%s %g X^%g ',sg,abs(c(w)),w-1); end cn=flipud(c); ya=polyval(cn,x); yy=polyval(cn,xx); end
%Impresin en pantalla de resultados fprintf(' Presione cualquier tecla para ver la grafica del ajuste '); pause %Grfica del modelo ajustado y de los puntos originales plot(xx,yy,x,y,'.r'); pause
end