You are on page 1of 5

Biseccion function x = biseccion(fun,a,b,tol) % Aproxima por el mtodo de la biseccin una raz de la ecuacin fun(x)=0 disp('Mtodo de la biseccin'); u=feval(fun,a); v=feval(fun,b);

n=1; if sign(u)==sign(v) disp('Error la funcin debe cambiar de signo en (a,b)'); break; end while ((b-a)*0.5>tol) c=(b+a)/2; w=feval(fun,c); disp(['n=', num2str(n)]); disp(['c=', num2str(c)]); disp(['f(c)=', num2str(w)]); if sign(u)==sign(w) a = c; u=w; else b=c; v=w; end n=n+1; end; x=c %Metodo de Biseccion - Metodos Numericos Matlab clc; Fx=input('Ingrese la funcion: ','s'); a=input('Ingrese a : '); c=input('Ingrese c : '); e=input('Ingrese el error : '); x=a; Fa=eval(Fx); x=c; Fc=eval(Fx); fprintf('\n %6s %7s %8s %10s %8s %8s %8s \n ','A','B','C','F(a)','F(b)','F(c)','|c-a|'); while abs(c-a)>e b=(a+c)/2; x=b; Fb=eval(Fx); fprintf('\n %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f \n',a,b,c,Fa,Fb,Fc,abs(c-a)); if Fa*Fb<=0 c=b; Fc=Fb; else a=b; Fa=Fb; end end

fprintf('\nEl resultado sera %.4f\n',b); ezplot(Fx);%graficamos la funcion grid on;

otro mtodo con biseccion

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 raz en ese intervalo'); end rapson 01 x0=input('Ingrese el valor inicial: '); 02 tol=input('Ingrese el porcentaje de error: '); 03 f=input('Ingrese la funcin: '); 04 i=1; 05 fx(i)=x0;

06 07 syms x; 08 f1=subs(f,x,fx(i)); 09 z=diff(f); 10 d=subs(z,x,fx(i)); 11 12 ea(1)=100; 13 14 while abs(ea(i))>=tol; 15 16 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);

17 i=i+1; 18 end 19 fprintf('i 20 for j=1:i; fx(i) Error aprox (i) \n');

21 fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j)); 22 end

Tambin raphson

Use una variacin del programa utilizado por el autor, con el consiguiente cdigo: function Newtonraphson clc clear syms x; x0=input(Ingrese el valor inicial: ); tol=input(Ingrese el porcentaje de error: ); f=input(Ingrese la funcin: ); i=1; fx(i)=x0; 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 Si ponen al principio syms x, el programa reconoce a x como una variable simbolica y deja de dar errores. Adems hay que tener cuidado al meter la ecuacin al programa, siempre considerando a f(x)=0, y respetando la forma en como matlab escribe las ecuaciones.

Regula falsi
function x = regula_falsi(fun,a,b,maxiter) % Aproxima por el mtodo de la regula falsi una raz de la ecuacin fun(x)=0 fprintf(1, 'Mtodo de la regula falsi\n'); fprintf(1,'\n'); n=1; u=feval(fun,a); v=feval(fun,b); if sign(u)==sign(v) disp('ERROR:la funcion debe cambiar signo en a,b'); break; end; for n=1:1:maxiter c=a-(u*(b-a)/(v-u)); w=feval(fun,c); fprintf(1, 'n= %i, c= %f, f(c)= %e if sign(u)==sign(w) a = c; u=w; else b=c; v=w; end n=n+1; end; x=c

\n',n, c,w);

secante:

function a =secante(fun,x0,x1,tol,maxiter) % Aproxima por el mtodo de la secante una raiz de la ecuacion fun(x)=0 %cercana a x0, tomando como criterio de parada abs(fun(x))<tol o la cota sobre %el numero de iteraciones dada por maxiter. % % Variables de entrada:

% fun: funcion a calcular la raiz, se introduce en modo simbolico 'fun' % x0, x1: estimaciones iniciales para el proceso de iteracin % tol: tolerancia en error absoluto para la raiz % maxiter: maximo numero de iteraciones permitidas % % Variables de salida: % a: valor aproximado de la raiz fprintf(1, 'Metodo de la secante \n'); f0=subs(fun,x0); f1=subs(fun,x1); iter=1; while(abs(f1)>tol) & (iter<maxiter) a = x1-f1*((x1-x0)/(f1-f0)); % formula de iteracion f0=f1; f1=subs(fun,a); %Actualiza f0 y f1 fprintf(1, 'iter= %i, a= %x0,f= %e \n', iter,a ,f1) iter = iter + 1; % Cuenta los pasos x0=x1; x1=a; % actualiza x end % Salida

You might also like