Академический Документы
Профессиональный Документы
Культура Документы
LABORATORIO 1
JEAN PABLO VALVERDE MORA
INSTITUTO TECNOLÓGICO DE COSTA RICA
Métodos Numéricos
Cartago, Costa Rica.
23 de Febrero de 2015
1
1. Programe en Matlab una función para cada uno de los métodos de Bisección y Newton.
1.1.1. Script
%Biseccion
function [aproxvect,errorvect,iter,t]=biseccion(f,a,b,tol,itermax)
tic
syms x
fa=subs(f,x,a);
fb=subs(f,x,b);
if fa*fb<0
error=tol+1;
iter=0;
while (error>tol && iter<itermax)
iter=iter+1;
m=(a+b)/2;
aproxvect(iter)=m;
fm=subs(f,x,m);
if fm==0
disp('se encontro el valor exacto')
aprox=m;
error=0;
elseif fa*fm<0
b=m;
fb=fm;
else
a=m;
fa=fm;
end
if (iter>1);
error=abs(m-mant);
errorvect(iter)=error;
end
mant=m;
aprox=m;
end
else
disp('No se puede aplicar el método');
aprox=0;
error=0;
iter=0;
end
t=toc;
end
ECUACIONES | Laboratorio 1
2
1.1.2. Evaluación
Entrada:
[aproxvect,errorvect,iter,t]=biseccion('x^3+log(x)',0.5,1.5,0.005,10)
Salida:
aproxvect =
errorvect =
iter =
t=
1.6521
ECUACIONES | Laboratorio 1
3
1.2.1. Script
%Newton
function [iter,xn,error,t]=newton(f,a,b,tol,itermax)
tic
% Declaraciones iniciales
syms x
x1=(a+b)/2; % Elige el primer punto para evaluacion (punto medio del
rango de iteracion)
f1=diff(f,'x',1);%calcula la derivada de la funcion f necesaria para
la elaboración de la matriz
n=2; %Se define el indice 2 para la primera iteracion
error(n-1)=tol+1;% Se define un error mayor a la tolerancia para
asegurarse el complimiento de la condicion 1 del while para la
primera iteracion.
xn(1)=x1;% se define que lña primera aproximacion es el centro del
intervalo
xnm1(n)=x1;%Se establblece el primer Xn-1 como X1
iter=0;%no se ha realizado ninguna iteracion
% Entra al ciclo de calculo----------------------------
while (error(n-1)>tol && iter<=itermax)
ynm1(n)=subs(f,x,xnm1(n));%calculo del Yn-1
y1nm1=subs(f1,x,xnm1(n));%calculo del Y'n-1
if y1nm1==0
fprintf('la derivada en la iteración %d evaluada en %d
resulto 0, por tanto el método no puede continuar',iter, xn);
break
end
if ynm1==0
fprintf('Se encontro el valor exacto %d en la
iteración %d',xn,iter);
break
end
xn(n)=xnm1(n)-(ynm1(n)/y1nm1);%calculo del Xn
if n==2
error(n)=tol+1;%condicion para no calculo del error en la
primera iteracion
else
error(n)=abs(xnm1(n)-xn(n));%calculo del error
end
n=n+1;%AUMENTO DEL INDICE
xnm1(n)=xn(n-1);%Asigna a Xn-1 de la siguiente iteracion el
valor de Xn de la iteracion actual
iter=iter+1;
end
t=toc;
end
ECUACIONES | Laboratorio 1
4
1.2.2. Evaluación
Entrada:
[iter,xn,error,t]=newton('x^3+log(x)',0.5,1.5,0.005,10)
Salida:
iter =
xn =
error =
t=
0.0883
ECUACIONES | Laboratorio 1
5
5.1.1. Script
El siguiente fue el script que se utilizó para desarrollar el método de Euler Bisección.
.function [iter,xn,error,t]=eulerbisec(f,a,b,tol,itermax)
tic
syms x
%verificar que exista cambio de Signo------------------------------
n=0;%inicializa n
x0=a;
iter=1;
k=1;;%auxiliar 2
error(k)=tol+1;
fa0=subs(f,x,a);
fb0=subs(f,x,b);
if (fa0*fb0)<0% Listo para determinar aplicar euler
while (error(k)>tol && iter<itermax)%%%%%%%Inicio del Ciclo
if n==0%si es la primera vez que entra al ciclo----------
f10=subs(diff(f,x,1),x,x0);
f20=subs(diff(f,x,2),x,x0);
f0=subs(f,x,x0);
if (f20~=0 && ((f10)^2)-(f0*4*f20)>=0)
%Verifica que no se indefina
%-----------condicion del radical0---------------------------------
op1=x0-((f10+(-nthroot(((f10)^2)-
(f0*4*f20),2)))/(2*f20));
op2=x0-((f10+(nthroot(((f10)^2)-
(f0*4*f20),2)))/(2*f20));
if (op1>=a && op2<=b)
xn(iter)=op1;
else
xn(iter)=op2;
end
n=1;%cambia la bandera
% termina proicedimiento si es primera vez--------------------------
else
xn(iter)=b+1;
% especifica a proposito un valor de X fuera de rango para que
aplique biseccion(salta a linea 34) en lugar de euler, pues no se
puede aplicar Euler
n=1;%cambia la bandera
end
fa(iter)=subs(f,x,a);
fb(iter)=subs(f,x,b);
else
ECUACIONES | Laboratorio 1
6
ECUACIONES | Laboratorio 1
7
end
iter=iter+1;
k=iter-1;%auxiliar 2
else
break
end
end
end%%%%Fin del Ciclo
else
fprintf('No existe un cambio de signo en el intervalo, por lo
tanto no es posible aplicar el método, o la solucion es uno de los
intervalos');%no existe cambio de signo
end
t=toc;
end
5.1.2. Evaluación
Entrada:
[iter,xn,error,t]=eulerbisec('x^3+log(x)',0.5,1.5,0.005,10)
Salida:
iter =
xn =
error =
t=
0.8506
ECUACIONES | Laboratorio 1
8
ECUACIONES | Laboratorio 1
9
6.1.1. Entrada
[aproxvect,errorvect,iter,t]=biseccion('(((1.33)/(0.08))*(x-642))+(0.8*(5.67e-
8)*((x^4)-(299^4)))+(18*(x-299))',299,642,0.000000001,10)
6.1.2. Salida
aproxvect =
errorvect =
iter = 10
t = 0.2533
ECUACIONES | Laboratorio 1
10
6.2.1. Entrada
[iter,xn,error,t]=newton('(((1.33)/(0.08))*(x-642))+(0.8*(5.67e-8)*((x^4)-
(299^4)))+(18*(x299))',299,642,0.000000001,10)
6.2.2. Salida
iter =
xn =
error =
t=
0.1866
ECUACIONES | Laboratorio 1
11
6.3.1. Entrada
[iter,xn,error,t]=eulerbisec('(((1.33)/(0.08))*(x-642))+(0.8*(5.67e-8)*((x^4)-
(299^4)))+(18*(x-299))',299,642,0.000000001,10)
6.3.2. Salida
iter = 10
xn =
error =
1.0000 108.9261 54.4630 27.2315 13.6158 6.8079 3.4039 1.7020 0.8510 0.4255
t = 1.6734
ECUACIONES | Laboratorio 1
12
6.4. Comparativa
iteraciones 10 5 10
Según lo que se aprecia en la tabla 1, se puede concluir que para este caso en específico, el
método de Newton resulto ser el mejor, pues presenta menos error, se realizó en menor tiempo e
implicando una menor cantidad de iteraciones.
ECUACIONES | Laboratorio 1