Para usar este método es necesario conocer el intervalo donde la función f corta al eje x, ya que este método une con una línea donde se representan los dos extremos del intervalo en la función, es decir pasa una línea por dos puntos que se encuentran en la función f, esta línea obligatoria-mente cortara el eje x, este punto donde corta es x el cual evaluaremos en la función para ver si da 0 (raíz), si no es el caso entonces con esta nueva x formaremos un intervalo con uno de los extremos del intervalo anterior, se escoge dependiendo de donde se encuentre el cambio de signo con respecto a x. A esto se debe el nombre, ya que donde corta la línea creada puede o no puede ser la posición verdadera.
PSEUDOCÓDIGO REGLA FALSA
Leer Xi, Xs, Tolerancia, Iter
Yi = f(Xi)
Ys = f(Xs)
Si Yi = 0 Entonces
Muestre: ‘Xi es Raiz’
Sino
Si Ys = 0 Entonces
Muestre: ‘Xs es Raiz’
Sino
Si Yi*Ys < 0 Entonces
Xm= Xi – ((Yi*(Xs – Xi))/(Ys – Yi))
Contador = 1
Ym = f(Xm)
Error = Tolerancia + 1
Mientras Error > Tolerancia & Ym ~= 0 & Contador < Iter
Si Yi*Ym < 0 Entonces
Xs= Xm
Ys = Ym
Sino
X i= Xm
Yi = Ym
Fin Si
Xaux = Xm
Xm= Xi – ((Yi*(Xs – Xi))/(Ys – Yi))
Ym = f(Xm)
Error = Abs(Xm - Xaux)
Contador = Contador + 1
Fin Mientras
Si Ym = 0 Entonces
Muestre: ‘Xm es Raíz’
Sino Si Error < Tolerancia Entonces
Muestre: ‘Xm es aproximación a una raíz con una toleracia ‘Tolerancia’’
Sino
Muestre: ‘Fracaso en ‘Iter’ iteraciones’
Fin Si
Fin Si
Fin Si
Fin Si
Fin Si
Fin Proceso
CODIGO REGLA FALSA
Clc;clear
fprintf ('metodo Regla falsa');
disp(' ');
f=input('ingrese la funcion a evaluar f=','s');
funcion= inline (f);
a= input('ingrese intervalo inferior a= ');
b= input('ingrese intervalo superior b = ');
tol= input('defina una tolerancia = ');
n=ceil(log((b-a)/tol)/log(2))+2;
f1=funcion(a);
f2=funcion(b);
if f1==0
fprintf ('la raiz fue encontrada en a=%d',a);
elseif f2==0
fprintf ('la raiz fue encontrada en b=%d',b);
elseif f1*f2>0;
fprintf ('no se encontro raiz en el intervalo');
disp (' ');
elseif f1*f2<0
pm=a-((funcion(a)*(b-a))/(funcion(b)-funcion(a)));
f3=funcion(pm);
error=tol +1;
iter=0;
fprintf(' n a b pm f3 error \n')
cont=1;
while iter<=n && f3~=0 && error>tol
fprintf('%g %f %f %f %f %f \n',iter,a,b,pm,f3,error)
if f1*f3<0
b=pm;
else
a=pm;
end
aux=pm;
pm=a-((funcion(a)*(b-a))/(funcion(b)-funcion(a)));
error =abs(pm-aux);
iter=iter +1;
f3=funcion(pm);
end
disp (' ');
fprintf('%g %f %f %f %f %f \n',iter,a,b,pm,f3,error)
disp (' ');
if f3==0;
fprintf('la raiz es pm = %f y se encontro en el error = %f \n',pm,error);
elseif error<tol
fprintf('se encontro una aproximacion a la raiz en pm = %f y se encontro en el error = %f \n',pm,error);
else
fprintf('el proceso fracaso')
end
end