Ejercicios videos
Método de bisección en octave
>> bisec(f,a,b,tol)
error: 'f' undefined near line 1 column 7
>> a = 3
a = 3
>> b = 4
b = 4
>> tol = 0.00001
tol = 0.0000100000
>> bisec('fbis1',a,b,tol)
0 3.0000000000 4.0000000000 3.5000000000 -17.1250000000
1 3.5000000000 4.0000000000 3.7500000000 -2.2656250000
2 3.7500000000 4.0000000000 3.8750000000 7.0119628906
3 3.7500000000 3.8750000000 3.8125000000 2.1569824219
4 3.7500000000 3.8125000000 3.7812500000 -0.0767822266
5 3.7812500000 3.8125000000 3.7968750000 1.0359497070
6 3.7812500000 3.7968750000 3.7890625000 0.4780120849
7 3.7812500000 3.7890625000 3.7851562500 0.2000122070
8 3.7812500000 3.7851562500 3.7832031250 0.0615844727
9 3.7812500000 3.7832031250 3.7822265625 -0.0076103210
10 3.7822265625 3.7832031250 3.7827148438 0.0269775391
11 3.7822265625 3.7827148438 3.7824707031 0.0096893311
12 3.7822265625 3.7824707031 3.7823486328 0.0010375977
13 3.7822265625 3.7823486328 3.7822875977 -0.0032958984
14 3.7822875977 3.7823486328 3.7823181152 -0.0011291504
15 3.7823181152 3.7823486328 3.7823333740 -0.0000457764
16 3.7823333740 3.7823486328 3.7823410034 0.0004959106
17 3.7823333740 3.7823410034 3.7823371887 0.0002250671
18 3.7823333740 3.7823371887 3.7823352814 0.0000896454
19 3.7823333740 3.7823352814 3.7823343277 0.0000219345
20 3.7823333740 3.7823343277 3.7823338509 -0.0000119209
21 3.7823338509 3.7823343277 3.7823340893 0.0000050068
22 3.7823338509 3.7823340893 3.7823339701 -0.0000034571
23 3.7823339701 3.7823340893 3.7823340297 0.0000007749
ans = 3.7823340297
METODO DE LA BISEECION EN MATLAB
Método de bisección_segundo video
>> edit biseccion.m
>> f=@(x)x^2-2;
>> raiz=biseccion(f,0,3,0.001)
raiz = 1.4143
El valor de c en cada iteración
>> edit biseccion.m
>> f=@(x)x^2-2;
>> raiz=biseccion(f,0,3,0.001)
c = 1.500000
c = 0.750000
c = 1.125000
c = 1.312500
c = 1.406250
c = 1.453125
c = 1.429688
c = 1.417969
c = 1.412109
c = 1.415039
c = 1.413574
raiz = 1.4143
Ejercicio propuesto en clase
clc;
clear;
% Definir puntos
X = [-4 -2 0 2 6];
Y = (X.^3 - 3*X.^2 + 6*X + 30) ./ (X.^2 + 9);
% Función para calcular el polinomio de Lagrange
function C = lagrange_coeffs(X, Y)
n = length(X);
C = zeros(1, n);
for i = 1:n
L = poly(X([1:i-1, i+1:end])); % Polinomio base L_i(x)
L = L / polyval(L, X(i)); % Normalización para L_i(X_i) = 1
C = C + Y(i) * L; % Construcción del polinomio
end
C = lagrange_coeffs(X, Y);
% Graficar f(x) y su polinomio de Lagrange
x = -5:0.1:7;
f = @(x) (x.^3 - 3*x.^2 + 6*x + 30) ./ (x.^2 + 9);
y = f(x);
y1 = polyval(C, x); % Evaluar el polinomio de Lagrange
figure;
plot(x, y, 'b', 'linewidth', 2); % Función original
hold on;
plot(x, y1, 'm', 'linewidth', 2); % Polinomio de Lagrange
grid on;
legend('f(x)', 'Lagrange P(x)');
hold off;
% -------------------------------
% Método de Bisección
% -------------------------------
function root = bisection_method(func, a, b, tol, max_iter)
if func(a) * func(b) >= 0
error("El intervalo [%f, %f] no es válido para bisección.", a, b);
end
iter = 0;
while (b - a) / 2 > tol && iter < max_iter
c = (a + b) / 2;
if func(c) == 0
break;
elseif func(a) * func(c) < 0
b = c;
else
a = c;
end
iter = iter + 1;
end
root = (a + b) / 2;
end
% Encontrar raíz de f(x)
intervalo_f = [-4, 6]; % Ajustar según el comportamiento de la función
tol = 1e-6;
max_iter = 100;
try
raiz_f = bisection_method(f, intervalo_f(1), intervalo_f(2), tol, max_iter);
fprintf("Raíz de f(x) encontrada en x = %.6f\n", raiz_f);
catch err
fprintf("Error en bisección para f(x): %s\n", err.message);
end
% Encontrar raíz del polinomio de Lagrange
p = @(x) polyval(C, x);
intervalo_p = [-4, 6]; % Ajustar según el polinomio
try
raiz_p = bisection_method(p, intervalo_p(1), intervalo_p(2), tol, max_iter);
fprintf("Raíz del polinomio de Lagrange en x = %.6f\n", raiz_p);
catch err
fprintf("Error en bisección para P(x): %s\n", err.message);
end