You are on page 1of 13

xf(1)=input('Ingrese el valor inicial: ');

tol=input('Ingrese el porcentaje de error: ');


syms x;
f=input('Ingrese la función f(x), despejada g(f(x)): ');

i=1;
ea(1)=100;
while abs(ea(i))>=tol,
xf(i+1) = subs(f,x,xf(i));
ea(i+1) = abs((xf(i+1)-xf(i))/xf(i+1))*100;
i=i+1;
end
fprintf('i xf(i) Error aprox (i) \n');
for j=1:i;
fprintf('%2d \t %11.7f \t %7.3f \n',j-1,xf(j),ea(j));
end

Metodo Punto Fijo Matlab


El método de punto fijo consiste en una forma iterativa de resolver una ecuación de la forma
f(x)=x . El método consiste en elegir una aproximación inicial X 0 y realizar la iteración:

Xk+1 = f(Xk)

function puntofijo
global fun
fprintf('Método del punto fijo:\n');
fx = input('Ingrese la función original:\n','s');
fun=input('Ingrese la función despejada:\n','s');
x0=input('Ingrese el punto inicial:\n');
n=input('Ingrese el numero de iteraciones:\n');
it=0;
fprintf(' it x0 x1 x0-x1');
while(it<n)
it = it+1;
x=x0;
x1=eval(fun);
fprintf('\n%3.0f%15.10f%15.10f%15.10f\n',it,x0,x1,abs(x1-x0));
x0=x1;
end
fprintf('\n el punto fijo aproximado es=%10.6f\n',x1);
clf
hold on
fplot(fx,[-2-x1,x1+2]);
%ezplot('x');
%ezplot fun
%legend('y=x','fun')
plot(x1,0,'-*g')
grid on;
text(x1+0.2,0,'raiz')
hold off

Metodo del Punto Fijo

function puntofijo
global fun
fprintf('Método del punto fijo:\n');
fun=input('Ingrese la función:\n','s');
x0=input('Ingrese el punto inicial:\n');
n=input('Ingrese el numero de iteraciones:\n');
it=0;
fprintf(' it x0 x1 x0-x1');
while(it it=it+1;
x=x0;
x1=eval(fun);
fprintf('\n%3.0f%15.10f%15.10f%15.10f\n',it,x0,x1,abs(x1-x0));
x0=x1;
end
fprintf('\n el punto fijo aproximado es=%10.6f\n',x1);
clf
hold on
ezplot('x');
ezplot fun
legend('y=x','fun')
hold off

Ejemplo:

Método del punto fijo:


Ingrese la función:
x^4+2*x^2-x-3
Ingrese el punto inicial:
1
Ingrese el numero de iteraciones:
10
el punto fijo aproximado es= 1.000000

Metodo de la Biseccion

fprintf('\t\tmetodo de biseccion\n');
fun=input('ingrese la funcion:','s');
a=input('ingrese el punto inicial:');
b=input('ingrese el punto final:');
tol=input('ingrese la tolerancia:');
it=0;
x=a;
f_a=eval(fun);
x=b;
f_b=eval(fun);
if(f_a*f_b>0)
fprintf('\t\tEn este intervalo no hay raices\n');
fprintf('\t\tBuscar otro intervalo\n');
return
else
n=ceil(log((b-a)/tol)/log(2));
fprintf('\n=%10.6f\n',n);
fprintf(' it a b c f(a) f(b) f(c) abs(b-a)/2\n');
while 1
it=it+1;
c=(a+b)/2;
x=c;
f_c=eval(fun);
fprintf('%5.0f %10.9f %10.9f %10.9f %10.9f %10.9f %10.9f %10.9f\n',it,a,b,c,f_a,f_b,f_c,abs(b-
a)/2);
if(abs(b-a)/2<=tol)
fprintf('n se satisface la tolerancia\n');
break end if(it>n)
fprintf('\numero de iteraciones excedido');
break
end
if(f_c*f_b<=0) a=c;
f_a=f_c;
else b=c;f_b=f_c;
end
end
fprintf('La raiz pedida es= %10.6f\n',c)
fprintf('La tolerancia es= %10.6f\n',abs(b-a)/2);
x=-100:0.1:100;
ezplot(fun),
grid on end

Ejemplo:

metodo de biseccion
ingrese la funcion:
3*x-2+exp(x)-x^2
ingrese el punto inicial:
0
ingrese el punto final:
1
ingrese la tolerancia:
10^(-5)

= 17.000000
n se satisface la tolerancia
La raiz pedida es= 0.257530
La tolerancia es= 0.000008

Metodo de Newton Rapson

function newton
global fun dfun
fprintf('metodo de newton:\n');
fun=input('ingrese la funcion:\n','s');
x0=input('ingrese el punto inicial:\n');
tol=input('ingrese la tol:\n');
dfun=diff(fun);
it=0;
fprintf(' it x0 x1 x0-x1');
while(it<50) it="it+1;" x="x0;" x1="x0-(eval(fun)/eval(dfun));">fprintf('el procedimiento se
completo satisfactoriamente:\n');
break
end
x0=x1;
end
fprintf('la raiz buscada es=%15.9f\n',x1);
ezplot(fun),grid on
Ejemplo:
metodo de newton:
ingrese la funcion:
exp(-x)-log(x)
ingrese el punto inicial:
1
ingrese la tol:

0.01

el procedimiento se completo satisfactoriamente:


la raiz buscada es= 1.309799389

en 18:38

Metodo de Biseccion
El método de la bisección o corte binario es un método de búsqueda incremental que
divide el intervalo siempre en 2. Si la función cambia de signo sobre un intervalo, se
evalúa el valor de la función en el punto medio. La posición de la raíz se determina
situándola en el punto medio del subintervalo donde exista cambio de signo. El
proceso se repite hasta mejorar la aproximación.

Algoritmo
Paso 1

Elegir los valores iniciales Xa y Xb, de tal forma de que la función cambie de signo:

f(Xa)f(Xb) < 0

Paso 2

La primera aproximación a la raíz se determina con la fórmula del punto medio de


esta forma:

Paso 3

Realizar las siguientes evaluaciones para determinar el intervalo de la raíz:


Si f(Xa)f(Xb) < 0, entonces la solución o raíz está entre Xa y Xpm, y Xb pasa a ser el
punto medio (Xpm).
Si f(Xa)f(Xb) > 0, entonces la solución o raíz está fuera del intervalo entre Xa y el
punto medio, y Xa pasa a ser el punto medio (Xpm).

Paso 4

Si f(Xa)f(Xb) = 0 ó Error = | Xpm – Xpm – 1 | < Tolerancia

Donde Xpm es el punto medio de la iteración actual y Xpm – 1 es el punto medio de


la iteración anterior.
Al cumplirse la condición del Paso 4, la raíz o solución es el último punto medio que
se obtuvo.

Para el error relativo porcentual se tiene la siguiente fórmula:

Implementado en Matlab
disp(' METODO DE LA BISECCION ');
disp(' ---------------------- ');
f=input('INGRESE FUNCION: ','s');
xai=input('INGRESE LIMITE INFERIOR DEL INTERVALO: ');
xbi=input('INGRESE LIMITE SUPERIOR DEL INTERVALO: ');
tol=input('INGRESE PORCENTAJE DE ERROR: ');
f=inline(f);
i=1;
ea(1)=100;
if f(xai)*f(xbi) < 0
xa(1)=xai;
xb(1)=xbi;
xr(1)=(xa(1)+xb(1))/2;
fprintf('It. Xa Xr Xb Error aprox \n');
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
while abs(ea(i)) >= tol,
if f(xa(i))*f(xr(i))< 0
xa(i+1)=xa(i);
xb(i+1)=xr(i);
end
if f(xa(i))*f(xr(i))> 0
xa(i+1)=xr(i);
xb(i+1)=xb(i);
end
xr(i+1)=(xa(i+1)+xb(i+1))/2;
ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1))*100);
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',...
i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
i=i+1;
end
else
fprintf('No existe una raíz en ese intervalo');
end
bisección

10

11

12
13

14

15

16

17

18

19

20

clear

format short;

a=input('Introduzca el valor de a');

b=input('Introduzca el valor de b');

cont=input('Introduzca el número de iteraciones');

for k=1:1:cont

='editor_indent'>c=(a+b)/2;

e=abs((b-a)/2);

A(k,:)=[k a b c f(c) e];

if f(a)*f(c)<0

='editor_indent'>b=c;

else

='editor_indent'>a=c;

end

end

fprintf('\n k a b c f(c) error \n')


disp(A)

fprintf('Solución: c='), disp(c)

fprintf('f(c)='), disp(f(c))

fprintf('error'), disp(e)

clear all
format short;

a=input('Introduzca el valor de a: ');


b=input('Introduzca el valor de b: ');

cont=input('Introduzca el número de iteraciones cont: ');

fun=input('Introduzcal a funcion f(x)=','s');

f=inline(fun);

for k=1:cont

c=(a+b)/2;

e=abs((b-a)/2);

A(k,:)=[k a b c f(c) e];

if f(a)*f(c)<0

b=c;

else

a=c;

end

end

fprintf('\n \tk \ta \tb \tc \tf(c) \terror \n')

disp(A)

fprintf('Solución:\n c=%8.5f\n',c)

fprintf('f(c)=%8.5f\n',f(c))

fprintf('error=%8.5f\n',e)

>> biseccion_ayuda

Introduzca el valor de a: 0

Introduzca el valor de b: 2

Introduzca el número de iteraciones cont: 10

Introduzcal a funcion f(x)=exp(x)-2

k a b c f(c) error

1.0000 0 2.0000 1.0000 0.7183 1.0000

2.0000 0 1.0000 0.5000 -0.3513 0.5000

3.0000 0.5000 1.0000 0.7500 0.1170 0.2500

4.0000 0.5000 0.7500 0.6250 -0.1318 0.1250

5.0000 0.6250 0.7500 0.6875 -0.0113 0.0625

6.0000 0.6875 0.7500 0.7188 0.0519 0.0313


7.0000 0.6875 0.7188 0.7031 0.0201 0.0156
8.0000 0.6875 0.7031 0.6953 0.0043 0.0078

9.0000 0.6875 0.6953 0.6914 -0.0035 0.0039

10.0000 0.6914 0.6953 0.6934 0.0004 0.0020

Solución:

c= 0.69336

f(c)= 0.00042

error= 0.00195
newwtooo
function [x,iter]=newton(x0,f,df)
% Algoritmo Newton-Raphson
N = 100; eps = 1.e-5; %Defino max. Numero. iteraciones y error
maxval = 10000.0; % Defino valor para divergencia
x=x0;
while (N>0)
xn = x-f(x)/df(x);%Funcin de Newton
if abs(f(xn))<eps
x=xn;iter=100-N;
return;
end;
if abs(f(x))>maxval
disp(['# de Iteraciones = ',num2str(iter)]);
error('La Solucion Diverge');
break;
end;
N = N - 1;
x = xn;
end;
error('No Converge');
return;
% Fin de la Funcion

x0=input('Ingrese el valor inicial: ');


tol=input('Ingrese el porcentaje de error: ');
f=input('Ingrese la función: ');
i=1;
fx(i)=x0;

syms x;
f1=subs(f,x,fx(i));
z=diff(f);
d=subs(z,x,fx(i));

ea(1)=100;

while abs(ea(i))>=tol;
fx(i+1)=fx(i)-f1/d; f1=subs(f,x,fx(i+1)); d=subs(z,x,fx(i+1));
ea(i+1)=abs((fx(i+1)-fx(i))/fx(i+1)*100);
i=i+1;
end
fprintf('i fx(i) Error aprox (i) \n');
for j=1:i;
fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j));
end

5.1.3 Código Matlab


%METODO DE PUNTO FIJO
%fprintf me permite ingresar comentarios de manera textual que pueden orientar
%al usuario en el uso del programa.
fprintf('Calculo de una raiz por el metodo de punto fijo\n')
%format long permite utilizar la maxima capacidad del computador en
%el almacenamiento de digitos, para evitar que el error al realizar una
%iteración aumente.
format long
%input es un comando de solicitud de entrada de datos del usuario.
Xo=input('ingrese el valor inicial\n');
Iter=input('ingrese el número de iteraciones\n');
Tol=input('ingrese la tolerancia que desea\n');
Fun=input('ingrese la funcion en comillas simples\n');
G=input('ingrese la funcion despejada en comillas simples\n');
%El comando inline permite hacer la asignación posterior de variables en
%una función.
f=inline(Fun);
g=inline(G);
Y1=f(Xo);
%La sentencia if tiene como funcion evaluar una condición y si es cierta
%ejecuta las ordenes que esten antes del primer end, dado el caso contario
%ejecuta ordenes diferentes bajo la sentencia else.
if Y1==0
fprintf('Xo es raiz\n');
else
Error=Tol+1;
Cont=0;
A=[Cont,Xo,Y1,Error];
%La sentencia While ejecuta todas las ordenes mientras la expresion sea
%verdadera.
while Y1~=0 & Error>Tol & Cont<Iter %expresion
X1=g(Xo); %orden
Y1=f(X1); %orden
Error=abs((X1-Xo)/X1); %orden
Cont=Cont+1; %orden
A(Cont,1)=Cont; %orden
A(Cont,2)=Xo; %orden
A(Cont,3)=X1; %orden
A(Cont,4)=Y1; %orden
A(Cont,5)=Error; %orden
Xo=X1; %orden
end
if Y1==0
fprintf('X1 es raiz\n');
else
if Error<Tol
fprintf('La raiz es %g con un error de %g\n',X1,Error);
else
fprintf('Se llego al maximo de Iteraciones\n');
end
end
fprintf('Pasos, Xo, X1, Y1, Error\n')
% la función disp permite que el usuario visualice el resultado, en este
% caso el usuario puede observar una tabla con todos los resultados
% obtenidos y en el orden definido dentro del while.
disp(A)
end
ezplot(f);
%El comando ezplot permite grafica una función.

You might also like