LOS SIGUIENTES TRABAJOS HAN SIDO DESARROLADOS PARA EL CURSO DE
ANALISIS NUMERICO Y
HAN SIDO ELABORADOS EN EL PROGRAMA DE:
MATLAB
Los programas
que siguen a continuación, han sido hechos para el programa MATLAB
por los alumnos:
Sugerencias:
Se recomienda para un mejor uso, copiar al
editor del matlab y grabar como: nombre_del_archivo.m y quitar las
negritas al texto. Tener en cuenta que hay
archivos function y script, que estan a continuación mesclados.
Las lineas horizontales separan a un programa de otro. Copiar tambien las
indicadas
en cada programa en el mismo directorio o archivo para que se puedan ejecutar.
Los letras en azul indican el nombre del programa.
Tambien puedes ver algunas
hechas con los programas, tales como sacar derivadas, promedios, etc.....................
BISEC2.M
function bisec2(xl,xu,es,maxit)
% Este programa sirve para calcular raices por el metodo de biseccion.
% Sugerencia, dar xl:0, xu:1.3, es:0.001, maxit:5
%%%%%%%%%%%%%%%%%%%%
clc
iter=0;
ea=1.1.*es;
vv=1;
while ((ea>es)&(iter<maxit));
xr=(xl+xu)/2;
iter=iter+1;
if ~(xl+xu==0)
ea=abs((xu-xl)/(xu+xl))*100;
et=abs(vv-xr/vv).*100;
end
fprintf('%3.0f \t %4.6f \t %4.6f \t %4.6f \t %4.6f \t
%4.6f\n',iter,xl,xu,xr,ea,et);
test=f(xl).*f(xr);
if test==0;
ea=0;
else
if test<0
xu=xr;
else
xl=xr;
end
end
end
disp('-------------------------------------------------------------')
fprintf(' El resultado es :%4.6f\n',xr);
disp('-------------------------------------------------------------')
FALSAP.M
function falsap(xl,xu,es,maxit)
% ESTE PROGRAMA SIRVE PARA HALLAR LAS RAICES O CEROS DE UNA ECUACION
% POR MEDIO DEL "METODO DE FALSA POCISION"
% xl=estimado inferior
% xu=estimado superior
% es=minimo error aceptable o tolerancia
% xr=raiz o cero
% maxit=maximo de iteraciones
%%%%%%%%%%%%%%%%%%%%%%%
clc
iter=0;
ea=1.1*es;
disp(' METODO
DE FALSA POSICION ');
disp('******************************************************************************
');
disp('iter xl
xu xr
ea
et ');
disp('*******************************************************************************');
while ((ea>es)&(iter<maxit));
xr=xu-f(xu).*(xl-xu)/(f(xl)-f(xu));
iter=iter+1;
vv=1;
et=abs((vv-xr/vv))*100;
if~((xl+xu)==0)
ea=abs((xr-xl)/xr)*100;
end
fprintf('%3.0f %4.5f
%4.5f\t %4.5f\t %4.5f\t %4.5f\t\n',iter,xl,xu,xr,ea,et);
test=f(xl)*f(xr);
if test==0
ea=0;
else
if test<0
xu=xr;
else
xl=xr;
end
end
end
disp('******************************************************
');
fprintf(' EL RESULTADO FINAL ES =%4.5f\n',xr);
disp('******************************************************');
SECAN.M
function secan(i,tole,miter,j,k)
% Este programa sirve para determinar las raices de x=g(x)
% por el metodo de la secante
% pi=punto inicial
% tole=es la tolerancia
% miter= es le numero maximo de iteraciones
% probar con secan(0,0.05,10,'funp1','funp2')
%%%%%%%%%%%%%%%%%%%%
clc
iter=1;
errora=1.1.*tole;
x(1)=pi;
while ((errora>tole)&(iter<miter))
fprintf('\n %3.0f \t %2.10f \t %2.10f\n',iter,x(iter))
iter=iter+1;
et=(x(1)-pi/x(1))*100;
x(iter)=x(iter-1)-feval(j,x(iter-1))/feval(k,x(iter-1));
if x(iter) ~= 0
errora=abs(x(iter)-x(iter-1)/x(iter)).*100;
end
end
PROG32.M
function prog32(x,y,orden)
% Programa que ajusta un polinomio de orden n, usando regresion polinomial
de minimos cuadrados y
% grafica dicho ajuste.
%%%%%%%%%%%%%%%%%%%%%%
clc
n=length(x);
min=x(1);
max=x(1);
for i=2:n
if min > x(i)
min=x(i);
end
if max < x(i)
max=x(i);
end
end
for i=1:orden+1
for j=1:i
k=i+j-2;
sum=0;
for l=1:n
sum=sum+(x(l)^k);
end
a(i,j)=sum;
a(j,i)=sum;
end
sum=0;
for l=1:n
sum = sum + y(l).*(x(l)^(i-1));
end
a(i,orden+2)=sum;
end
[m,n]=size(a);
A=a(1:m,1:m);
b=a(1:m,m+1:n);
a=prog14(A,b)
hold on
plot(x,y,'g*')
x=min:0.1:max;
y=a(1)+a(2).*x+a(3).*(x.^2);
plot(x,y,'b')
grid
hold off
PROG33.M
function prog33(y,x1,x2,orden)
% Programa que ajusta una curva, usando regresión lineal multiple
y grafica dicho ajuste
%%%%%%%%%%%%%%%%%%
clc
n=length(x1);
x0=diag(eye(n));
x=[x0';x1;x2];
for i=1:orden+1
for j=1:i
sum=0;
for l=1:n
sum=sum+x(i,l).*x(j,l);
end
a(i,j)=sum;
a(j,i)=sum;
end
sum=0;
for l=1:n
sum=sum+y(l).*x(i,l);
end
a(i,orden+2)=sum;
end
[m,n]=size(a);
A=a(1:m,1:m);
b=a(1:m,m+1:n);
a=prog14(A,b)
hold on
plot3(x1,x2,y,'g.')
y1=a(1)+a(2)*x1+a(3)*x2;
plot3(x1,x2,y1,'b')
hold off
P_INTLAG.M
function p_intlag(x,n,x1)
% Programa que ajusta una curva, usando polinomio de interpolación
de LAGRANGE.
% Definición de Variables:
% x = variable independiente (vector)
% f = variable dependiente (vector)
% x1 = valor de x para interpolación
% n = grado del polinomio
% m = número de datos
% Sub-rutina que utiliza PROG35:
% func2 = función: ln(x)
% Se recomienda usar:
% x = [1 4 6]
%%%%%%%%%%%%%%%%%%%%%
clc
m=length(x);
for i=1:m
f(i)=feval('func2',x(i));
end
y=0;
for i=1:n
producto=f(i);
for j=1:n
if (i ~= j)
producto=producto*(x1-x(j))/(x(i)-x(j));
end
end
y = y + producto;
end
P_INTNEW.M
function fdd=p_intnew(x,x1)
% Programa que ajusta una curva, usando polinomio de interpolación
de diferencias finitas divididas de Newton.
% Definición de Variables:
% x = variable independiente (vector)
% f = variable dependiente (vector)
% fdd = diferencia finita dividida (matris)
% x1 = valor de x para interpolación
% n = número de datos
% Sub-rutina que utiliza PROG35:
% func2 = función: ln(x)
% prog341 = calcula el fdd
% Se recomienda usar:
% x = [1 4 6 5]
%%%%%%%%%%%%%%%%%%%%
clc
vv=feval('func2',x1);
n=length(x);
for i=1:n
f(i)=feval('func2',x(i));
end
fdd=p_difd(x,f,n);
xterm=1;
fa(1)=fdd(1,1);
for i=1:n-1
xterm=xterm*(x1-x(i));
fa2=fa(i)+fdd(1,i+1)*xterm;
et(i)=fa2-fa(i);
fa(i+1)=fa2;
end
fa
plot(x,f,'g')
hold on
plot(x,fa,'b')
hold off
PIVOT.M
function pivot(A,b)
% ESTE PROGRAMA SIRVE PARA CALCULAR LAS RAICES DE UN
% SISTEMA DE ECUACIONES (CON PIVOTEO)
% A = matriz de coeficientes del sistema
% b = vector columna
%%%%%%%%%%%%%%%%%%%%%
pivot=k;
big=abs(a(k,k));
for ii=k+1:m
dummy=abs(a(ii,k));
if (dummy>big)
big=dummy;
pivot=ii;
end
end
if pivot ~= k
for jj=1:m
dummy=a(pivot,jj);
a(pivot,jj)=a(k,jj);
a(k,jj)=dummy;
end
dummy=c(pivot);
c(pivot)=c(k);
c(k)=dummy;
end
PROG14.M
function prog14(A,b)
% Este es un programa que sirve para calcular las raices de un sistema
de
% ecuaciones Ax = b , por el método de Eliminación
Gaussiana
% Se recomienda usar con la matriz:
%
A=[3,-0.1,-0.2;0.1,7,-0.3;0.3,-0.2,10]
%
b=[7.85,-19.3,71.4]'
%%%%%%%%%%%%%%%%%%%%%%%%%
clc
[m n]=size(A);
disp(' ');
disp(' "ELIMINACION GAUSIANA" para: Ax=b')
disp('___________________________________')
disp(' ')
for k=1:n-1
for i=k+1:n
factor=A(i,k)/A(k,k);
for j=k+1:n
A(i,j)=A(i,j)-factor.*A(k,j);
end
b(i)=b(i)-factor.*b(k);
end
end
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
for i=1:n
fprintf('X(%d) = %2.7f\n',i,x(i))
end
PROG15.M
function prog15(A,b)
% Este es un programa que sirve para calcular las raices de un sistema
de
% ecuaciones Ax = b , por el método de Eliminación Gauss
con pivoteo
% Se recomienda usar con la matriz:
%
A=[3,-0.1,-0.2;0.1,7,-0.3;0.3,-0.2,10]
%
b=[7.85,-19.3,71.4]'
%%%%%%%%%%%%%%%%%%%
clc
[m n]=size(A);
disp(' ');
disp(' "ELIMINACION CON PIVOTEO" para: Ax=b')
disp(' ____________________________________')
disp(' ')
for k=1:n-1
for i=k+1:n
pivot
factor=A(i,k)/A(k,k);
for j=k+1:n
A(i,j)=A(i,j)-factor.*A(k,j);
end
b(i)=b(i)-factor.*b(k);
end
end
x(m)=b(m)/A(m,m);
for i=n-1:-1:1
sum=0;
for j=i+1:m
sum=sum+A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
for i=1:m
fprintf('X(%d) = %2.7f\n',i,x(i))
end
PROG16.M
function prog16(A,c)
% Definición de varialbles :
% A = matriz de coeficientes del sistema
% c = vector columna de segundo miembro
% x = vector columna de incognitas
% m = numero de ecuaciones
% ord = vector de ordenamiento
% S = vector de escalamiento
% Este es un programa que sirve para calcular las raices de un sistema
de
% ecuaciones Ax = b , con pivoteo o sin pivoteo
% Se recomienda usar con la matriz:
%
A=[3,-0.1,-0.2;0.1,7,-0.3;0.3,-0.2,10]
%
c=[7.85,-19.3,71.4]'
%%%%%%%%%%%%%%%%%%%%%%%
clc
[m,n]=size(A);
for i=1:m
ord(i)=i;
end
s=prog161(ord,A,m);
[A,c]=prog162(s,c,A,ord,m);
x=prog163(c,A,ord,m);
disp('Resultado de la Ecuación Ax = b')
disp('_______________________________')
disp(' ')
for i=1:n
fprintf('X(%d) = %2.7f\n',i,x(i))
end
PROG17.M
function prog17(A,b)
% Definición de variables :
% A = matriz de coeficientes del sistema
% b = vector columna de segundo miembro
% x = vector columna de incognitas
% m = numero de ecuaciones
% Este es un programa que sirve para calcular las raices de un sistema
de
% ecuaciones Ax = b , por eliminación Gauss-Jordan sin pivoteo
% Se recomienda usar con la matriz:
%
A=[3,-0.1,-0.2;0.1,7,-0.3;0.3,-0.2,10]
%
b=[7.85,-19.3,71.4]'
%%%%%%%%%%%%%%%%%
clc
a=[A,b];
[m n]=size(a);
for k=1:m
dummy = a(k,k);
for j=1:n
a(k,j)=a(k,j)/dummy;
end
for i=1:m
if i ~= k
dummy = a(i,k);
for j=1:n
a(i,j)=a(i,j)-dummy.*a(k,j);
end
end
end
end
disp('
Eliminación Gauss-Jordan')
disp('
___________________________')
disp(' ')
disp('Resultado de la Ecuación Ax=b')
disp('_____________________________')
disp(' ')
for i=1:m
fprintf('X(%d) = %2.7f\n',i,a(i,n))
end
PROG18.M
function prog18(A,b)
% Este es un programa que sirve para calcular las raices de un sistema
de
% ecuaciones Ax = b , por elimanación Gauss-Jordan con pivoteo
% Se recomienda usar con las matrices anteriores.
%%%%%%%%%%%%%%
clc
a=[A,b];
[m n]=size(a);
for k=1:m
pivot
dummy = a(k,k);
for j=1:n
a(k,j)=a(k,j)/dummy;
end
for i=1:m
if i ~= k
dummy = a(i,k);
for j=1:n
a(i,j)=a(i,j)-dummy.*a(k,j);
end
end
end
end
disp('
Eliminación Gauss-Jordan con pivoteo')
disp('
______________________________________')
disp(' ')
disp('Resultado de la Ecuación Ax=b')
disp('_____________________________')
disp(' ')
for i=1:m
fprintf('X(%d) = %2.7f\n',i,a(i,n))
end
Si
deseas ver mas programas pincha aqui, ok
Ir al principio
Volver
a la pagina principal