Вы находитесь на странице: 1из 13

ECUACIONES

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. Método de bisección

1.1.1. Script

El siguiente fue el script que se utilizó para desarrollar el método de bisección.

%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

Al utilizar la función para aproximar, con un máximo de 10 iteraciones, la función:


3
𝑥 + log(𝑥) = 0, en el intervalo [0.5, 1.5], con un error permitido de 0,005, se obtuvo:

Entrada:
[aproxvect,errorvect,iter,t]=biseccion('x^3+log(x)',0.5,1.5,0.005,10)

Salida:

aproxvect =

1.0000 0.7500 0.6250 0.6875 0.7188 0.7031 0.7109 0.7070

errorvect =

0 0.2500 0.1250 0.0625 0.0313 0.0156 0.0078 0.0039

iter =

t=

1.6521

ECUACIONES | Laboratorio 1
3

1.2. Método de Newton

1.2.1. Script

El siguiente fue el script que se utilizó para desarrollar el método de Newton.

%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 =

1.0000 0.7500 0.7056 0.7047

error =

1.0050 1.0050 0.0444 0.0009

t=

0.0883

2. Investigue como obtener (…) (no se aplicó)

3. [BONO] La iteración del método de Newton también se puede obtener utilizando el


polinomio de Taylor de orden 1. Investigue como obtener una iteración utilizando el
polinomio de Taylor de orden 2, al método con la iteración obtenida en este caso se le
llama Método de Euler.

4. El Método Euler-Bisección es un híbrido que consiste en utilizar las iteraciones Euler,


pero si este método falla (en algún sentido) en una iteración, usamos bisección para dar
un pequeño salto y regresar al método de Euler lo más pronto posible. Según los
resultados obtenidos en el punto anterior, en qué condiciones podrá fallar el método
de Euler?

La iteración de Euler podría fallar si se cumple alguna de las siguientes condiciones:

a) Si el polinomio en el radical resulta negativo


b) Si el denominador resulta cero
c) Si no existe la 1° derivada de la función F
d) Si no existe la Segunda derivada de la función F

ECUACIONES | Laboratorio 1
5

5. Desarrolle una función en Matlab que ejecute el método descrito anteriormente,


tomando en consideración las condiciones para que el método de Euler no se indefina
y los parámetros de entrada y salida considerados en los métodos de la parte anterior.

5.1. Metodo de Euler- biseccion

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

%-----------verificar si el Xn esta dentro de rango--------


if (xn(iter)>=a && xn(iter)<=b)
xn(iter)=xn(iter); %acepta el Xn
else
xn(iter)=(a+b)/2;% Se aplica biseccion
end
%-----------termina verificar si el Xn esta dentro de rango

%------ ini calculo del porcentaje de error----------------


if iter==1;
error(iter)=tol+1;
else
error(iter)=abs(xn(iter)-xn(iter-1));
end
%---------------termina calculo del error------------------
%---------------Establecer nuevo intervalo-----------------
if (fa(iter)*subs(f,x,xn(iter)))<0
a=a;
b=xn(iter);
elseif(fb(iter)*subs(f,x,xn(iter)))<0
a=xn(iter);
b=b;
else
fprintf('se ha encontrado el valor exacto para
la solucion de la ecuacion: %d',xn(iter))
error(iter)=0;
break
end
%------termina de Establecer nuevo intervalo---------------
%-----------inicia el calculo del siguiente Xn ------------
f1n(iter)=subs(diff(f,x,1),x,xn(iter));
f2n(iter)=subs(diff(f,x,2),x,xn(iter));
fn(iter)=subs(f,x,xn(iter));
fa(iter+1)=subs(f,x,a);
fb(iter+1)=subs(f,x,b);
%------Determinacion del radical adecuado------------------
if (error(iter)>tol)&&((iter+1)<=itermax)
if (f2n(iter)~=0 && (((f1n(iter))^2)-
(fn(iter)*4*f2n(iter)))>=0)
opt1=(xn(iter)-
((((f1n(iter))^2)+((sqrt(((f1n(iter))^2)-
(fn(iter)*4*f2n(iter))))))/(2*f2n(iter))));
opt2=(xn(iter)-((((f1n(iter))^2)+((-
sqrt(((f1n(iter))^2)-(fn(iter)*4*f2n(iter))))))/(2*f2n(iter))));
if (opt1>=a && opt1<=b)
xn(iter+1)=opt1;
else
xn(iter+1)=opt2;
end
else
xn(iter+1)=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

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 =

1.0000 0.7500 0.6250 0.6875 0.7188 0.7031 0.7109 0.7070

error =

1.0050 0.2500 0.1250 0.0625 0.0313 0.0156 0.0078 0.0039

t=

0.8506

ECUACIONES | Laboratorio 1
8

6. Utilice los métodos de Bisección, Newton y Bisección-Euler para resolver el problema


sobre temperatura.

Puesto que la respuesta es una temperatura en Kelvin, y la temperatura de exterior no


puede ser menor a la del ambiente (aire) y no puede ser mayor a la de la pared interna del horno,
por tanto se toma el intervalo [299,642].

Se establece una una tolerancia de 10e-10.

Se define el número máximo de iteraciones en 100.

ECUACIONES | Laboratorio 1
9

6.1. Mediante Bisección

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 =

470.5000 384.7500 427.6250 449.0625 438.3438 432.9844 430.3047 428.9648


429.6348 429.2998

errorvect =

0 85.7500 42.8750 21.4375 10.7188 5.3594 2.6797 1.3398 0.6699 0.3350

iter = 10

t = 0.2533

Gráfico 1 aproximación vs Error: Método de bisección

ECUACIONES | Laboratorio 1
10

6.2. Mediante Newton

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 =

470.5000 431.3367 429.5601 429.5569 429.5569 429.5569

error =

1.0000 1.0000 1.7766 0.0033 0.0000 0

t=

0.1866

Gráfico 2 Aproximación vs Error: método de Newton

ECUACIONES | Laboratorio 1
11

6.3. Mediante Euler Bisección

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 =

424.1479 533.0739 478.6109 451.3794 437.7636 430.9558 427.5518 429.2538 430.1048


429.6793

error =

1.0000 108.9261 54.4630 27.2315 13.6158 6.8079 3.4039 1.7020 0.8510 0.4255

t = 1.6734

Gráfico 3 Aproximación vs Error: método de Euler-Bisección

ECUACIONES | Laboratorio 1
12

6.4. Comparativa

Tabla 1 Comparativa de los métodos

Bisección newton Euler-bisección

Aproximación 429,2998 K 429,5569 K 429,6793 K

Error 0,3350 0 0,4255

iteraciones 10 5 10

tiempo 0,2533 s 0,1866 s 1,6734 s

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.

Debe notarse que el método de Euler-bisección y bisección se detuvieron debido a que


cumplieron con el máximo de iteraciones permitidas, mientras que el método de newton se detuvo
debido a que cumplió con la precisión.

ECUACIONES | Laboratorio 1

Вам также может понравиться