Algoritmos para El Método de La Regla Falsa en MatLab1.0
Algoritmos para El Método de La Regla Falsa en MatLab1.0
Algoritmos para El Método de La Regla Falsa en MatLab1.0
Código 1
function [tabla, XR, ER, iteracion] = reglaFalsa(f, limInf, limSup,
numIter)
% INPUT:
% f = función
% limInf = Límite inferior.
% limSup = Límite superior.
% numIter = Número de iteraciones.
% OUTPUT:
% M = Tabla de resultados
% XR = Ultima iteración de la raíz de la función.
% ER = Ultima iteracion del error relativo.
% Iteracion = Número de iteraciones
fxa = f(limInf);
fxb = f(limSup);
%Condicion para evaluar si existe una raiz en el intervalo
if fxa * fxb > 0
msjerror('No existe una raíz en el intervalo indicado!');
end
for i = 1:numIter - 1
xr(i) = limSup(i) - fxb(i) * ((limSup(i) - limInf(i)) / (fxb(i) -
fxa(i))); %Punto medio actual.
fxr(i) = f(xr(i)); %Evalua en el punto medio actual.
if f(xr(i)) * f(limInf(i)) > 0 %Si esta condición se cumple, la raíz
no existe en el limInf y xr
limInf(i+1) = xr(i); %xr es el nuevo límite inferior.
limSup(i+1) = limSup(i); %El valor de limSup se mantiene.
fxa(i+1) = f(limInf(i+1));
fxb(i+1) = f(limSup(i+1));
elseif f(xr(i)) * f(limSup(i)) > 0 %Si esta condición se cumple, la
raíz no existe en xr y limSup
limInf(i+1) = xr(i); %xr es el nuevo límite superior.
limSup(i+1) = limInf(i); %El valor de limInf se mantiene igual.
fxa(i+1) = f(limInf(i+1));
fxb(i+1) = f(limSup(i+1));
end
try
xr(i+1)=limSup(i+1)-fxb(i+1)*((limSup(i+1)-limInf(i+1))/(fxb(i+1)-
fxa(i+1))); %Actulizamos el valor de xr
catch
error('Demasiadas iteraciones');
end
fxr(i+1)=f(xr(i+1));
error(i+1)=abs((xr(i+1)-xr(i))/xr(i+1))*100; %Calcula el error
relativo actual
end
%Mostrar tabla
encabezado = {'limInf', 'xr', 'limSup', 'f(a)', 'f(xr)', 'f(b)', 'Error
relativo (%)'};
cuerpo = num2cell([limInf', xr', limSup', fxa', fxr', fxb', error']);
tabla = [encabezado; cuerpo];
XR = xr(end);
ER = error(end);
iteracion = i+1;
%Mostrar resultados
resultado = f(XR);
disp(['Funcion: ' func2str(f) ' con un valor de: ' num2str(XR) ', el
resultado es: ' num2str(resultado)]);
disp(['Error relativo (%): ' num2str(ER)]);
disp(['Número de iteraciones: ' num2str(iteracion)]);
Código 2
function [M, XR, ER, Iter] = ReglaFalsaFcn(f, xl, xu, Niter, Tol)
%Autor: Rolando Valdez Guzmán
%Alias: Tutoingeniero
%Canal de Youtube: https://www.youtube.com/channel/UCU1pdvVscOdtLpRQBp-
TbWg
%Versión: 2.0
%Actualizado: 30/jul/2020
% VARIABLES DE SALIDA:
%METODOS DE SOLUCION
%Método 1: Si Niter está vacío (Niter = []) entonces se debe especificar
un
%error relativo mínimo para converger.
%Método 2: Si Tol está vacío (Tol = []) entonces se debe especificar un
%número máximo de iteraciones para el código. Es posible que un número
muy
%grande de iteraciones cree un error y un mensaje aparecerá sugiriendo
%reducir el número de iteraciones.
if fxl * fxu > 0 %Esta propiedad es la que hace que éste sea un método
cerrado.
error('No hay una raíz en ese intervalo!');
end
for i = 1:Niter - 1
xr(i) = xu(i) - fxu(i) * ((xu(i) - xl(i)) / (fxu(i) - fxl(i)));
%Calcula el punto medio falso actual.
fxr(i) = f(xr(i)); %Evalua la función en el punto medio falso actual.
fxr(i+1) = f(xr(i+1));
Error(i+1) = abs((xr(i+1) - xr(i)) / xr(i+1)) * 100; %Calcula el
error relativo actual
Para evaluar
[M, XR, ER, Iter] = ReglaFalsaFcn(@(x)((1/(exp(x)))+(3*x)), -2, -1, [], 0.001)
Código 3
function y=falsap(fun, an,bn,tol)
u=subs(fun,an);
v=subs(fun,bn);
a=an;
b=bn;
while abs(u)>tol
p=a-u*(b-a)/(v-u);
w=subs(fun,p);
if u*v<0;
a=an;
b=p;
else
a=p;
b=bn;
end
u=subs(fun,a);
v=subs(fun,b);
end
p
Para evaluar