Function [p,Q]=steff(p0,delta,epsilon,max1)
%Ingreso - f es la funcion ingresada como string 'f'
% - df es la derivada f ingresada como string 'df'
% - p0 es la aproximación inicial a un cero de f
% -f delta es la tolerancia para p0
% - epsilon es la tolerancia para los valores de la función y
% - max1 es el número máximo de iteraciones
%Salida - p es la aproximación de Steffensen al cero
% - Q es una matriz conteniendo la secuencia de Steffensen
%Inicializar la matriz R
f = input('Ingrese f(x) entre comillas en términos de x: ');
df = input('Ingrese la derivada de f(x) entre comillas, en términos de x: ');
f = inline(f,'x');
df = inline(df,'x');
R = zeros(max1,3);
R(1,1)=p0;
for k=1:max1
for j=2:3
%Cálculo del Denominador en el método de Newton-Raphson
nrdenom=feval(df,R(k,j-1));
%Condicional calcula las aproximaciones de Newton-Raphson
if nrdenom==0
'división cero en el método de Newton-Raphson '
break
else
R(k,j)=R(k,j-1)-feval(f,R(k,j-1))/nrdenom;
end
%Cálculo de Denominador en el proceso de aceleración de Aitkens
aadenom=R(k,3)-2*R(k,2)+R(k,1);
% condicional en las aproximaciones de Aitkens
if aadenom==0
'división por cero en aceleración de Aitkens '
break
else
R(k+1,1)=R(k,1)-(R(k,2)-R(k,1))^2/aadenom;
end
%Corte y salida del programa si ocurre división por cero
if (nrdenom==0)||(aadenom==0)
break
end
%criterio de parada; se determinan p y matriz Q
err=abs(R(k,1)-R(k+1,1));
relerr=err/(abs(R(k+1,1))+delta);
y=feval(f,R(k+1,1));
if (err<delta)||(relerr<delta)||(y<epsilon)
p=R(k+1,1);
Q=R(1:k+1,:);
break
end
[p, Q] = steff(0.25*pi, 0.01, 0.01, 4)
Ingrese f(x) entre comillas en términos de x: 'cos(x)-x'
Ingrese la derivada de f(x) entre comillas, en términos de x: '(x)-sin(x)-1'
p = 0.73819
Q =
0.78540 0.70046 0.76834
0.73819 0.00000 0.00000
% Método de Steffensen para f(x) = cos(x) - x
% Definir la función
f = @(x) cos(x) - x;
% Valor inicial
y0 = 0.5;
% Tolerancia y número máximo de iteraciones
tol = 1e-6;
max_iter = 20;
% Mostrar cabecera
fprintf('Iter\t y_n\t\t f(y_n)\t\t y_{n+1}\t\t Error\n');
for n = 1:max_iter
fy = f(y0);
ffy = f(fy);
% Calcular y_{n+1}
y1 = y0 - (fy^2)/(ffy - 2*fy + y0);
% Mostrar valores
fprintf('%d\t %.6f\t %.6f\t %.6f\t %.6e\n', n, y0, fy, y1, abs(y1-y0));
% Verificar criterio de parada
if abs(y1 - y0) < tol
fprintf('\nRaíz aproximada: %.6f encontrada en %d iteraciones.\n', y1, n);
break;
end
% Actualizar y0 para la siguiente iteración
y0 = y1;
end
if n == max_iter
fprintf('\nSe alcanzó el número máximo de iteraciones sin converger.\n');
end
1 0.500000 0.377583 0.019665 4.803347e-01
2 0.019665 0.980141 0.426068 4.064029e-01
3 0.426068 0.484530 2.072110 1.646042e+00
4 2.072110 -2.552689 1.339838 7.322725e-01
5 1.339838 -1.110927 1.098624 2.412140e-01
6 1.098624 -0.643802 0.990400 1.082238e-01
7 0.990400 -0.442045 0.929724 6.067656e-02
8 0.929724 -0.331668 0.891398 3.832575e-02
9 0.891398 -0.263073 0.865244 2.615331e-02
10 0.865244 -0.216790 0.846386 1.885801e-02
11 0.846386 -0.183693 0.832213 1.417394e-02
12 0.832213 -0.158971 0.821208 1.100441e-02
13 0.821208 -0.139871 0.812439 8.768866e-03
14 0.812439 -0.124710 0.805301 7.138088e-03
15 0.805301 -0.112407 0.799386 5.914838e-03
16 0.799386 -0.102240 0.794411 4.975489e-03
17 0.794411 -0.093706 0.790171 4.239568e-03
18 0.790171 -0.086448 0.786518 3.652979e-03
19 0.786518 -0.080204 0.783340 3.178335e-03
20 0.783340 -0.074779 0.780551 2.789162e-03
>> if n == max_iter
fprintf('\nSe alcanzó el número máximo de iteraciones sin converger.\n');
end
.tlSCCnet"tte"al fcn
Codigo de octave