viernes, 3 de abril de 2020

Codigo para octave .m de la regla Falsa Modificada del pseudocodigo 5.5 de chapra

Codigo para octave .m de la regla Falsa Modificada del pseudocodigo 5.5 de chapra

La respuesta esperada es:

Métodos de Regla Falsa ejercicio 5.5 de chapra
Ingrese el limite inferior: > 12
Ingrese el limite superior: > 16
Ingrese la funciòn: > '(668.06/x)*(1-exp(-0.146843*x))-40'
Ingrese el porcentaje de error: > 0.5
Ingrese las iteraciones maximas > 10
i xl fl xu fu xr fr ea
 1      12.0000       6.1139      14.9308      -0.2515      14.9308     -0.2515 100.000
 2      12.0000       3.0569      14.8151      -0.0271      14.8151     -0.0271    0.782
xr =  14.790


El còdigo en matlab u octave es: s9_02_1128648261.m

%s9_02_1128648261.m
%Descripciòn: Codigo de la regla Falsa del pseudocodigo 5.5 de chapra
%Autor: Alexander Arias
%Fecha: 2020-04-03
% Variables:xl, xu, es, imax, xr, iter, ea
% '(668.06/x)*(1-exp(-0.146843*x))-40'
% 12 16
% 0.5
% 10
disp("Métodos de Regla Falsa ejercicio 5.5 de chapra");
iter = 0
xl=input('Ingrese el limite inferior: ');
xu=input('Ingrese el limite superior: ');
fstr=input('Ingrese la funciòn: ');
f=inline(fstr);
es=input('Ingrese el porcentaje de error: ');
imax=input('Ingrese las iteraciones maximas ');
fl = feval(f,xl);
fu = feval(f,xu);
xr=0;
iter=0;
il=0;
iu=0;
fprintf('i xl fl xu fu xr fr ea\n');
while(true)
xrold = xr;
xr = xu - fu * (xl - xu) / (fl - fu);
fr = feval(f,xr);
iter = iter + 1;
if xr ~= 0
ea = abs((xr - xrold) / xr) * 100;
end
test = fl * fr; %chequear signos opuestos
if test < 0
xu = xr;
fu = feval(f,xu);
iu = 0;
il = il +1;
if il >= 2
fl = fl / 2;
end
else if test > 0
xl = xr;
fl = feval(f,xl);
il = 0;
iu = iu + 1;
if iu >= 2
fu = fu / 2;
end
else
ea = 0;
end
if ((ea < es) || (iter >= imax))
break;
end

end
fprintf('%2d \t %11.4f \t %11.4f \t %11.4f \t %11.4f \t %11.4f \t%11.4f \t %7.3f \n',...
              iter,xl,fl,xu,fu,xr,fr,ea);
end
xr

No hay comentarios:

Publicar un comentario