octave:1> function fixed_point(g, p0, N)
% fixed_point(g, p0, N) aproxima la raíz de la ecuación f(x)=0
% g debe ser una función anónima ingresada como @(x) <expresión>
% p0 es la aproximación inicial y N es el número máximo de iteraciones.
if ~isa(g, 'function_handle')
error('g debe ser una función anónima, por ejemplo: @(x) cos(x)');
end
i = 1;
p(1) = p0; % Primera aproximación
tol = 1e-5; % Tolerancia
while i <= N
p(i+1) = g(p(i));
if abs(p(i+1) - p(i)) < tol
fprintf('El procedimiento fue exitoso luego de %d iteraciones\n', i);
fprintf('La raíz de la ecuación es: %.10f\n', p(i+1));
return;
end
i = i + 1;
end
% Si el procedimiento falló
if abs(p(i) - p(i-1)) > tol || i > N
disp('El procedimiento falló');
fprintf('El procedimiento falló después de %d iteraciones\n', N);
disp('La condición |p(i+1) - p(i)| < tol no se satisfizo');
fprintf('Tolerancia utilizada: %.10e\n', tol);
disp('Si hay divergencia, intenta otro p0 o reescribe g(x).');
end
end
octave:2> function fixed_point(p0, N)
% Método del Punto Fijo en Octave en línea
% Se debe definir la función g directamente en el código
% Define la función g aquí (cambia esto según tu problema)
g = @(x) exp(-x); % Ejemplo con g(x) = e^(-x)
i = 1;
p(1) = p0; % Primera aproximación
tol = 1e-5; % Tolerancia
while i <= N
p(i+1) = g(p(i));
if abs(p(i+1) - p(i)) < tol
fprintf('El procedimiento fue exitoso luego de %d iteraciones\n', i);
fprintf('La raíz de la ecuación es: %.10f\n', p(i+1));
return;
end
i = i + 1;
end
% Si el procedimiento falló
if abs(p(i) - p(i-1)) > tol || i > N
disp('El procedimiento falló');
fprintf('El procedimiento falló después de %d iteraciones\n', N);
disp('La condición |p(i+1) - p(i)| < tol no se satisfizo');
('Tolerancia utilizada: %.10e\n', tol);
end
end
octave:3> fixed_point(0.5, 50)
El procedimiento fue exitoso luego de 18 iteraciones
La raíz de la ecuación es: 0.5671407633
octave:4> function fixed_point(p0, N)
% Método del Punto Fijo para la función dada
% Se debe definir la función g directamente en el código
% Define la función g(x) (tu función de iteración)
g = @(x) x - (x.^3 + 4*x.^2 - 10) ./ (3*x.^2 + 8*x);
i = 1;
p(1) = p0; % Primera aproximación
tol = 1e-5; % Tolerancia
while i <= N
p(i+1) = g(p(i));
if abs(p(i+1) - p(i)) < tol
fprintf('El procedimiento fue exitoso luego de %d iteraciones\n', i);
fprintf('La raíz de la ecuación es: %.10f\n', p(i+1));
return;
end
i = i + 1;
end
% Si el procedimiento falló
if abs(p(i) - p(i-1)) > tol || i > N
disp('El procedimiento falló');
fprintf('El procedimiento falló después de %d iteraciones\n', N);
disp('La condición |p(i+1) - p(i)| < tol no se satisfizo');
fprintf('Tolerancia utilizada: %.10e\n', tol);
end
end
octave:5> fixed_point(1, 50)
El procedimiento fue exitoso luego de 4 iteraciones
La raíz de la ecuación es: 1.3652300134