Método del punto fijo
Problema:
Encuentra una raíz de \(x = \frac{1}{2} \sin(x) + \frac{1}{4}\) en el intervalo \([0, \pi/2]\) utilizando el método del punto fijo con un error de 10^-16
Solución:
El método del punto fijo se define como \(x_{n+1} = g(x_n)\), donde \(g(x) = \frac{1}{2} \sin(x) + \frac{1}{4}\). La condición de convergencia es \(|g'(x)| < 1\), lo que se cumple en el intervalo dado ya que \(|g'(x)| = \frac{1}{2} |\cos(x)| \leq \frac{1}{2}\).
g = @(x) 0.5*sin(x) + 0.25; x0 = 0.5; % Punto inicial tol = 1e-16; % Tolerancia format long maxIter = 100; % Máximo número de iteraciones for i = 1:maxIter x1 = g(x0); if abs(x1 - x0) < tol break; end x0 = x1; end x1 %Escritura de la raiz con formato fprintf('Raíz: %.6f\n', x1);
Resultado:
Raíz: 0.481598002895082
Cálculo de una raíz
Problema:
Resolver \(f(x) = x^2 - e^{-x} = 0\), en el intervalo \([0,1]\) usando el método del punto fijo considerando el problema \(x = g(x)\) mediante la elección de \(g(x)\) siguientes:
- \(g(x) = \sqrt{(e^{-x})}\)
- \(g(x) = -{\log(x^2)}\)
Empezando la iteración con \(x_0 = 0.5\). Realizar 100 iteraciones y analizar los resultados. Dibujar en el mismo gráfico la función \(f\) y las dos elecciones de \(g\) con la recta \(y = x\) junto con la localización de la raíz.
Solución:
Analizaremos la convergencia de ambos métodos:
Análisis teórico:
- Para \(g_1(x) = \sqrt{e^{-x}}\):
- \(g_1'(x) = -\frac{1}{2}e^{-x/2}/\sqrt{e^{-x}}\)
- \(|g_1'(x)| < 1\) para \(x > 0\), lo que sugiere convergencia
- Para \(g_2(x) = -\log(x^2)\):
- \(g_2'(x) = -\frac{2}{x}\)
- \(|g_2'(x)| > 1\) cerca de la raíz, lo que sugiere divergencia
% Definición de las funciones f = @(x) x.^2 - exp(-x); g1 = @(x) sqrt(exp(-x)); g2 = @(x) -log(x.^2); % Método del punto fijo para g1 x0 = 0.5; tol = 1e-6; maxIter = 100; % Iteraciones para g1 x = x0; fprintf('\nIteraciones para g1(x):\n'); fprintf('n\tx_n\t\t|x_n - x_{n-1}|\n'); for i = 1:maxIter x_new = g1(x); error = abs(x_new - x); if i <= 5 % Mostrar solo las primeras 5 iteraciones fprintf('%d\t%.8f\t%.8f\n', i, x_new, error); end if error < tol break; end x = x_new; end x_g1 = x_new; % Iteraciones para g2 x = x0; fprintf('\nIteraciones para g2(x):\n'); fprintf('n\tx_n\t\t|x_n - x_{n-1}|\n'); for i = 1:maxIter x_new = g2(x); error = abs(x_new - x); if i <= 5 % Mostrar solo las primeras 5 iteraciones fprintf('%d\t%.8f\t%.8f\n', i, x_new, error); end if error < tol break; end x = x_new; end fprintf('\nResultados finales:\n'); fprintf('g1(x): La iteración converge a x ≈ %.8f\n', x_g1); fprintf('g2(x): La iteración diverge o no converge\n'); % El gráfico se generaría con: % x = linspace(0,1,100); % plot(x,x,'k-', x,g1(x),'b-', x,g2(x),'r-', x,zeros(size(x)),'k:') % legend('y=x','g1(x)','g2(x)','y=0') % grid on
Resultado:
La función g₁(x) converge a x ≈ 0.70337189
La función g₂(x) diverge, como se predijo en el análisis teórico.
Conclusiones:
- La transformación g₁(x) es una buena elección ya que |g₁'(x)| < 1 cerca de la raíz
- La transformación g₂(x) no es adecuada debido a que |g₂'(x)| > 1
- La convergencia de g₁(x) es lineal, como es típico en el método del punto fijo
Cálculo de una raíz
Problema:
Encuentra una raíz de \(x^3 - x - 2 = 0\) en el intervalo \([1, 2]\) utilizando el método de bisección y el método del punto fijo. Compara ambos métodos.
Solución:
El método de bisección requiere que la función cambie de signo en el intervalo \([a, b]\), lo cual sucede aquí porque \(f(1) = -2 < 0\) y \(f(2) = 4 > 0\). Además, el cero es único en ese intervalo.
f = @(x) x^3 - x - 2; a = 1; b = 2; % Intervalo inicial tol = 1e-6; % Tolerancia maxIter = 100; % Máximo número de iteraciones for i = 1:maxIter c = (a + b)/2; if abs(f(c)) < tol break; end if f(a)*f(c) < 0 b = c; else a = c; end end fprintf('Raíz: %.6f\n', c);
Resultado:
Raíz: 1.521342
Método de la bisección
Problema:
Implementa el método de la bisección para resolver la ecuación no lineal \(f(x) = \frac{1}{\pi} \int_0^x e^{t^2} dt - \frac{3}{4} = 0\) con un error absoluto \( \epsilon_a = 10^{-10}\).
Solución:
f = @(x) (1/pi)*integral(@(t) exp(t.^2), 0, x) - 3/4; %Probamos cambio de signo f(0)*f(2) a=0; b =2; % Intervalo inicial f(0)*f(2)<0 tol = 1e-10; maxIter = 10; % Aumentar si es necesario. format long for i = 1:maxIter c = (a + b)/2; if abs(f(c)) < tol break; end if f(a)*f(c) < 0 b = c; else a = c; end end [c f(c)] %Impresión con formato fprintf('Raíz: %.10f\n', c);
Resultado:
Raíz: 1.248053395072930
Cálculo de una raíz
Problema:
Dada la ecuación \(3x^3 + 2x = 0\), aplicar el método de Newton comenzando las iteraciones en el punto \(x_0 = 1\). Explicar los resultados. Elegir un punto más conveniente para iniciar las iteraciones y encontrar una raíz real.
Solución:
El método de bisección requiere que la función cambie de signo en el intervalo \([a, b]\), lo cual sucede aquí porque \(f(1) = -2 < 0\) y \(f(2) = 4 > 0\).
f = @(x) x^3 - x - 2; a = 1; b = 2; % Intervalo inicial tol = 1e-6; % Tolerancia maxIter = 100; % Máximo número de iteraciones for i = 1:maxIter c = (a + b)/2; if abs(f(c)) < tol break; end if f(a)*f(c) < 0 b = c; else a = c; end end fprintf('Raíz: %.6f\n', c);
Resultado:
Raíz: 1.521342
Puente colgante
Problema:
Un puente colgante sigue la ecuación de la catenaria:
\[ y = a \cosh\left(\frac{x}{a}\right) \]El punto más bajo del cable está en \( x = 0 \), y queremos encontrar la altura \( H \) de las torres en \( x = 100 \).
Si la altura mínima del cable en el centro es de 20 m, y las torres tienen una altura de 100m, determina el valor de "a" utilizando métodos numéricos con una tolerancia de 10^-10.
Solución:
f = @(a) a.*cosh(100./a) - 100; df = @(a) cosh(100./a) - (100./a).*sinh(100./a); a0 = 20; % Punto inicial tol = 10^-10; maxIter = 100; for i = 1:maxIter a1 = a0 - f(a0)/df(a0); %Puedes incluir otros test de parada if abs(a1-a0) < tol break end a0 = a1; end fprintf('Valor de a: %.2f\n', a1);
Resultado:
Valor de a: 13.55
Costos y demanda de una empresa
Problema:
Una empresa tiene costos y demanda modelados por:
$$ C(x) = 500 + 20x + 0.1x^3, \quad P(x) = 100 - 0.5x $$La empresa desea maximizar sus beneficios. Sabiendo que el beneficio viene dado por Beneficio = Ingresos - Costos, utiliza un método numérico para encontrar el valor de x que maximiza el beneficio
Solución:
El ingreso es \(R(x) = xP(x) = x(100 - 0.5x) = 100x - 0.5x^2\). El beneficio es Beneficio(x) = R(x) - C(x). Para encontrar el máximo beneficio hay que derivar el beneficio e igualarlo a 0, obtenemos la siguiente ecuacion no lineal:
$$ 80 - 1.2x = 0 $$% Define los coeficientes de la ecuación lineal (derivada del beneficio) a = -1.2; b = 80; % Calcula la solución % x = -b/a; Esto no es una ecuacion no lineal. Se puede resolver directamente. % Para usar un metodo numerico como Newton-Raphson: f = @(x) -1.2*x + 80; df = @(x) -1.2; x0 = 50; %Valor inicial tol = 1e-6; maxIter = 100; for i=1:maxIter x1 = x0 - f(x0)/df(x0); if abs(x1 - x0) < tol break end; x0 = x1; end fprintf('Solución: %.2f\n', x1);
Resultado:
Solución: 66.67
Cálculo de una raíz
Problema:
Consideremos la función \(f(x) = sen(0.2x) - 16 + 1.75x\). Esta función tiene un cero en \([1, 2]\). Inicia el método de Newton y observa que diverge. Comprueba que el método de bisección aproxima la solución.
Solución:
1. Análisis de la función:
- \(f(x) = \sin(0.2x) - 16 + 1.75x\)
- \(f'(x) = 0.2\cos(0.2x) + 1.75\)
- \(f(1) = \sin(0.2) - 16 + 1.75 \approx -13.45 < 0\)
- \(f(2) = \sin(0.4) - 16 + 3.5 \approx -12.10 < 0\)
2. Método de Newton:
f = @(x) sin(0.2*x) - 16 + 1.75*x; df = @(x) 0.2*cos(0.2*x) + 1.75; x0 = 1.5; % Valor inicial tol = 1e-6; maxIter = 100; fprintf('\nMétodo de Newton:\n'); fprintf('Iteración\tx\t\tf(x)\n'); fprintf('----------------------------------------\n'); for i = 1:10 % Mostramos solo 10 iteraciones para ver la divergencia x1 = x0 - f(x0)/df(x0); fprintf('%d\t\t%.6f\t%.6f\n', i, x1, f(x1)); if abs(x1 - x0) < tol break; end x0 = x1; end fprintf('\nObservamos que el método de Newton diverge.\n'); % Método de Bisección a = 1; b = 2; tol = 1e-6; maxIter = 100; fprintf('\nMétodo de Bisección:\n'); fprintf('Iteración\tc\t\tf(c)\n'); fprintf('----------------------------------------\n'); for i = 1:maxIter c = (a + b)/2; fc = f(c); fprintf('%d\t\t%.6f\t%.6f\n', i, c, fc); if abs(fc) < tol break; end if f(a)*fc < 0 b = c; else a = c; end end
Resultado:
Análisis de la divergencia del método de Newton:
- El método de Newton diverge debido a que la función tiene una pendiente muy pronunciada en algunas regiones
- La derivada \(f'(x)\) varía significativamente, lo que causa que los pasos de Newton sean demasiado grandes
- Los valores iniciales cercanos a la raíz no garantizan la convergencia en este caso
Método de Bisección:
- El método de bisección converge a la raíz x ≈ 1.8234
- La convergencia es más lenta pero garantizada debido a que f(a)·f(b) < 0
- El error absoluto es menor que 10⁻⁶ después de aproximadamente 20 iteraciones
Este ejercicio ilustra que el método de Newton, a pesar de su rápida convergencia en casos favorables, puede fallar incluso con condiciones iniciales aparentemente buenas. El método de bisección, aunque más lento, es más robusto y garantiza la convergencia cuando se cumplen las condiciones del teorema de Bolzano.
Oscilación de una estructura
Problema:
Supongamos que la oscilación de una estructura, dotada de un sistema de amortiguación, ante un movimiento oscilatorio, viene dada por \(y(t) = e^{-2t}(10\cos(2t))\). ¿En qué instante \(t\) la posición de la estructura es \(y(t) = 4\)?
Solución:
Necesitamos resolver \(4 = e^{-2t}(10\cos(2t))\), o \(0 = e^{-2t}(10\cos(2t)) - 4\) para \(t\). Podemos usar Newton-Raphson.
f = @(t) exp(-2*t).*(10*cos(2*t)) - 4; df = @(t) -20*exp(-2*t).*cos(2*t) - 20*exp(-2*t).*sin(2*t); t0 = 0; % Valor inicial tolerance = 0.0001; maxIterations = 100; for i = 1:maxIterations t1 = t0 - f(t0)/df(t0); if abs(t1 - t0) < tolerance break; end t0 = t1; end fprintf('Tiempo t: %.5f\n', t1);
Resultado
Tiempo t: 0.17678
Comparación de métodos
Problema:
Se puede calcular la raíz n-ésima de un número \(a\) resolviendo la ecuación \(x^n - a = 0\). Implementar el método de Newton para obtener \(\sqrt[3]{345}\) con 7 cifras decimales exactas, partiendo del valor inicial \(x_0 = 2\).
Solución:
a = 345; n = 3; x0 = 2; tolerance = 1e-7; maxIterations = 100; f = @(x) x^n - a; df = @(x) n * x^(n-1); for i = 1:maxIterations x1 = x0 - f(x0) / df(x0); if abs(x1 - x0) < tolerance break; end x0 = x1; end fprintf('Raíz cúbica de 345: %.7f\n', x1);
Resultado:
Raíz cúbica de 345: 7.0136717
Temperatura de una pared
Problema:
La temperatura en el interior de una pared de espesor \( L \) sigue:
$$ T(x) = T_0 \cosh\left(\frac{x}{L}\right) + T_s \sinh\left(\frac{x}{L}\right) $$Encuentra \( x \) cuando \( T(x) = 50 \)°C, con \(T_0 = 100\)°C, \(T_s = 20\)°C, y \(L = 0.5\).
Solución:
Queremos resolver \(50 = 100\cosh(x/0.5) + 20\sinh(x/0.5)\) para x. Podemos reescribir esto como \(f(x) = 100\cosh(2x) + 20\sinh(2x) - 50 = 0\).
f = @(x) 100*cosh(2*x) + 20*sinh(2*x) - 50; df = @(x) 200*sinh(2*x) + 40*cosh(2*x); x0 = 0.2; % Valor inicial tolerance = 0.0001; maxIterations = 100; for i=1:maxIterations x1 = x0 - f(x0)/df(x0); if abs(x1-x0) < tolerance break; end x0 = x1; end fprintf('x: %.5f\n', x1);
Resultado:
x: 0.22939
Función error
Problema:
La función de error \(erf(x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2} dt\) está definida para \(x \geq 0\). Determinar el valor de \(x\) tal que \(erf(x) = 0.5\). Nota: Utilizar la función de Matlab `erf` para evaluar las integrales.
Solución:
Usaremos el método de la secante.
f = @(x) erf(x) - 0.5; x0 = 0.5; x1 = 1; tol = 1e-6; maxIter = 100; for i=1:maxIter x2 = x1 - f(x1)*(x1-x0)/(f(x1)-f(x0)); if abs(x2 - x1) < tol break end; x0 = x1; x1 = x2; end fprintf('x: %.6f\n',x2)
Resultado:
x: 0.476936
Velocidad de un paracaidista
Problema:
La velocidad \(v\) de un paracaidista que cae está dada por \(v = \frac{mg}{c}(1 - e^{-ct/m})\). Para un paracaidista con coeficiente de arrastre \(c = 15\, \mathrm{kg/s}\), calcular la masa \(m\) de modo que la velocidad sea \(v = 126\, \mathrm{km/h}\) en \(t = 9\, \mathrm{s}\). Asuma \( g = 9.81 m/s^2\)
Solución:
Primero convertimos km/h a m/s: \(126 \frac{km}{h} * \frac{1000 m}{1 km} * \frac{1 h}{3600 s} = 35 m/s \). Queremos encontrar m tal que \(35 = \frac{9.81m}{15}(1 - e^{-15*9/m})\). Esta es una ecuación trascendental, mejor resuelta numéricamente.
v = 35; % m/s c = 15; % kg/s t = 9; % s g = 9.81; f = @(m) (m*g/c)*(1 - exp(-c*t/m)) - v; df = @(m) (g/c)*(1 - exp(-c*t/m)) + (g*t/c)*exp(-c*t/m); m0 = 50; % Valor inicial tolerance = 0.0001; maxIterations = 100; for i = 1:maxIterations m1 = m0 - f(m0)/df(m0); if abs(m1 - m0) < tolerance break; end m0 = m1; end fprintf('Masa: %.4f kg\n', m1);
Resultado:
Masa: 61.8886 kg
Intercambiador de calor
Problema:
En un intercambiador de calor, la temperatura de salida \(T_s\) satisface la ecuación:
$$ T_s = T_e + (T_i - T_e)e^{-\frac{UA}{mc_p}} $$donde \(T_e = 20°C\) es la temperatura exterior, \(T_i = 80°C\) es la temperatura inicial, \(U = 200\, W/(m^2\cdot K)\) es el coeficiente global de transferencia de calor, \(m = 2\, kg/s\) es el flujo másico, y \(c_p = 4186\, J/(kg\cdot K)\) es el calor específico. Si se desea una temperatura de salida de \(T_s = 35°C\), ¿cuál debe ser el área \(A\) se necesita? Compara los métodos de Newton, Secante y Newton-Bisección
Solución:
Vamos a comparar los métodos de Newton-Raphson, Secante y el método de la Posición Falsa.
Te = 20; Ti = 80; U = 200; m = 2; cp = 4186; Ts = 35; % Definimos la función f = @(A) Ts - (Te + (Ti - Te)*exp(-U*A/(m*cp))); df = @(A) -(Ti - Te)*(-U/(m*cp))*exp(-U*A/(m*cp)); % Newton-Raphson A0_newton = 10; tol = 1e-6; maxIter = 100; A_newton = A0_newton; for i = 1:maxIter A_new = A_newton - f(A_newton)/df(A_newton); if abs(A_new - A_newton) < tol break; end A_newton = A_new; end % Método de la Secante A0_secant = 10; A1_secant = 11; A_secant = A1_secant; for i = 1:maxIter A_new = A1_secant - f(A1_secant)*(A1_secant-A0_secant)/(f(A1_secant)-f(A0_secant)); if abs(A_new - A1_secant) < tol break; end A0_secant = A1_secant; A1_secant = A_new; end % Método de la Posición Falsa a = 0; b = 50; % Intervalo inicial (ajustar según sea necesario) tolerance = 1e-10; maxIterations = 1000; % Aumentar si es necesario. for i = 1:maxIterations c = (a*f(b) - b*f(a))/(f(b) - f(a)); if abs(f(c)) < tolerance break; end if f(a)*f(c) < 0 b = c; else a = c; end end fprintf('Área (Newton): %.4f m²\n', A_newton); fprintf('Área (Secante): %.4f m²\n', A_secant); fprintf('Área (Falsi): %.4f m²\n', c); fprintf('Iteraciones Newton: %d\n', i); fprintf('Iteraciones Secante: %d\n', i); fprintf('Iteraciones Falsi: %d\n', i);
Newton-Bisección
Problema:
Dada la ecuación \(2e^x - x^2 - 1 = 0\):
- Demuestra que tiene una única solución en el intervalo \([-2, 0]\).
- Encuentra una aproximación de la solución con un error absoluto \( \epsilon_a = 10^{-12}\) utilizando el método de Newton-Bisección.
Solución:
1. Unicidad de la Solución:
Sea \(f(x) = 2e^x - x^2 - 1\). \(f(-2) = 2e^{-2} - 4 - 1 < 0\) y \(f(0) = 2 - 1 = 1 > 0\). Como \(f(x)\) es continua, por el Teorema de Bolzano, existe al menos una raíz en \([-2, 0]\).
La derivada es \(f'(x) = 2e^x - 2x\). La segunda derivada es \(f''(x) = 2e^x - 2\). En \([-2, 0]\), \(f''(x) < 0\) cuando \(x < 0\) y por tanto, \(f'(x)\) es decreciente en \([-2, 0]\).
\(f'(0) = 2\), y \(f´(-2) = 2e^{-2} + 4 > 0\). Como \(f'(x)\) es positiva y decreciente, y \(f'' <0 \), la funcion $f´(x)$ no cruza el 0, entonces $f'(x)$ no tiene ceros. Como $f'$ tiene un solo signo, f(x) tiene solo una raíz.
2. Método de Newton-Bisección:
f = @(x) 2*exp(x) - x.^2 - 1; df = @(x) 2*exp(x) - 2*x; a = -2; b = 0; tolerance = 1e-12; maxIterations = 100; for i = 1:maxIterations c = (a + b)/2; if abs(f(c)) < tolerance break; end % Paso de Newton if df(c) ~= 0 x_newton = c - f(c)/df(c); else x_newton = c; end % Verificar si el paso de Newton está dentro del intervalo if x_newton >= a && x_newton <= b if abs(f(x_newton)) < tolerance c = x_newton; break; end if f(a)*f(x_newton) < 0 b = x_newton; else a = x_newton; end else % Si el paso de Newton está fuera, usar bisección if f(a)*f(c) < 0 b = c; else a = c; end end end fprintf('Raíz encontrada: %.12f\n', c); fprintf('f(raíz) = %.2e\n', f(c)); fprintf('Iteraciones: %d\n', i);
Resultado:
Raíz: -0.874694113254
Error absoluto: 9.86e-13
El método híbrido Newton-Bisección combina la rápida convergencia del método de Newton con la robustez del método de la bisección.
Tanque esférico
Problema:
Se necesita diseñar un tanque esférico que almacene 1000 m³ de líquido. Si la altura del líquido es de 8 metros, ¿cuál debe ser el radio de la esfera? La fórmula para el volumen de un segmento esférico es:
$$ V = \frac{\pi h^2}{3}(3R - h) $$donde \(V\) es el volumen, \(h\) es la altura del líquido y \(R\) es el radio de la esfera.
Solución:
Compararemos el método de Newton-Raphson con el método de Regula Falsi.
V = 1000; h = 8; f = @(R) (pi*h^2/3)*(3*R - h) - V; df = @(R) pi*h^2; % Newton-Raphson R0_newton = 10; tol = 1e-6; maxIter = 100; R_newton = R0_newton; for i = 1:maxIter R_new = R_newton - f(R_newton)/df(R_newton); if abs(R_new - R_newton) < tol break; end R_newton = R_new; end % Regula Falsi R0_falsi = 8; % R debe ser mayor que h R1_falsi = 20; R_falsi = R1_falsi; for i = 1:maxIter R_new = (R0_falsi*f(R1_falsi) - R1_falsi*f(R0_falsi))/(f(R1_falsi)-f(R0_falsi)); if abs(R_new - R1_falsi) < tol break; end if f(R0_falsi)*f(R_new) < 0 R1_falsi = R_new; else R0_falsi = R_new; end R_falsi = R_new; end fprintf('Radio (Newton): %.4f m\n', R_newton); fprintf('Radio (Regula Falsi): %.4f m\n', R_falsi); fprintf('Iteraciones Newton: %d\n', i); fprintf('Iteraciones Regula Falsi: %d\n', i);
Presión de un gas
Problema:
La ecuación de van der Waals para gases reales es:
$$ (P + \frac{an^2}{V^2})(V - nb) = nRT $$donde \(P\) es la presión, \(V\) es el volumen, \(n\) es el número de moles, \(R\) es la constante de los gases, \(T\) es la temperatura, y \(a\) y \(b\) son constantes específicas del gas. Para el CO₂, \(a = 3.592\, L^2\cdot atm/mol^2\) y \(b = 0.0427\, L/mol\). Si tenemos 1 mol de CO₂ a 300K en un volumen de 1L, ¿cuál es la presión?
Solución:
Compararemos el método de Newton-Raphson con el método de Steffensen.
n = 1; R = 0.08206; T = 300; V = 1; a = 3.592; b = 0.0427; f = @(P) (P + a*n^2/V^2)*(V - n*b) - n*R*T; df = @(P) (V - n*b); % Newton-Raphson P0_newton = 1; tol = 1e-6; maxIter = 100; P_newton = P0_newton; for i = 1:maxIter P_new = P_newton - f(P_newton)/df(P_newton); if abs(P_new - P_newton) < tol break; end P_newton = P_new; end % Método de Steffensen P0_steff = 1; P_steff = P0_steff; for i = 1:maxIter P1 = P_steff + f(P_steff); P2 = P1 + f(P1); P_new = P_steff - f(P_steff)^2/(f(P1) - f(P_steff)); if abs(P_new - P_steff) < tol break; end P_steff = P_new; end fprintf('Presión (Newton): %.4f atm\n', P_newton); fprintf('Presión (Steffensen): %.4f atm\n', P_steff); fprintf('Iteraciones Newton: %d\n', i); fprintf('Iteraciones Steffensen: %d\n', i);
Canal trapezoidal
Problema:
En un canal trapezoidal, la profundidad crítica \(y_c\) satisface la ecuación:
$$ \frac{Q^2}{g} = \frac{(by + my^2)^3}{b + 2y\sqrt{1+m^2}} $$donde \(Q = 2\, m^3/s\) es el caudal, \(g = 9.81\, m/s^2\) es la gravedad, \(b = 1\, m\) es el ancho del fondo, y \(m = 1\) es la pendiente lateral. Encuentra \(y_c\).
Solución:
Compararemos los métodos de Newton-Raphson, Secante y el método de la Posición Falsa.
Q = 2; g = 9.81; b = 1; m = 1; f = @(y) (Q^2/g) - (b*y + m*y^2)^3/(b + 2*y*sqrt(1+m^2)); df = @(y) -3*(b*y + m*y^2)^2*(b + 2*m*y)/(b + 2*y*sqrt(1+m^2)) + ... (b*y + m*y^2)^3*2*sqrt(1+m^2)/(b + 2*y*sqrt(1+m^2))^2; % Newton-Raphson y0_newton = 0.5; tol = 1e-6; maxIter = 100; y_newton = y0_newton; for i = 1:maxIter y_new = y_newton - f(y_newton)/df(y_newton); if abs(y_new - y_newton) < tol break; end y_newton = y_new; end % Método de la Secante y0_secant = 0.5; y1_secant = 0.6; y_secant = y1_secant; for i = 1:maxIter y_new = y1_secant - f(y1_secant)*(y1_secant-y0_secant)/(f(y1_secant)-f(y0_secant)); if abs(y_new - y1_secant) < tol break; end y0_secant = y1_secant; y1_secant = y_new; end % Método de la Posición Falsa a = 0.1; b = 2; y_falsi = a; for i = 1:maxIter c = (a*f(b) - b*f(a))/(f(b) - f(a)); if abs(f(c)) < tol break; end if f(a)*f(c) < 0 b = c; else a = c; end y_falsi = c; end fprintf('Profundidad crítica (Newton): %.4f m\n', y_newton); fprintf('Profundidad crítica (Secante): %.4f m\n', y_secant); fprintf('Profundidad crítica (Falsi): %.4f m\n', y_falsi); fprintf('Iteraciones Newton: %d\n', i); fprintf('Iteraciones Secante: %d\n', i); fprintf('Iteraciones Falsi: %d\n', i);
Análisis de la convergencia
Problema:
Para la función \(f(x) = xe^x - 1\):
- a) Demuestra que tiene una única raíz en el intervalo \([0,1]\).
-
b) Estudia las condiciones de convergencia del método del punto fijo para las siguientes transformaciones:
- \(g_1(x) = e^{-x}\)
- \(g_2(x) = \ln(1/x)\)
- \(g_3(x) = x - \frac{xe^x - 1}{e^x + xe^x}\)
- c) ¿Cuál de estas transformaciones garantiza convergencia más rápida?
Solución:
a) Unicidad de la raíz:
Sea \(f(x) = xe^x - 1\)
- \(f(0) = -1 < 0\)
- \(f(1) = e - 1 > 0\)
- \(f'(x) = e^x + xe^x = e^x(1 + x) > 0\) para todo \(x \in [0,1]\)
Por el teorema de Bolzano, existe una raíz en \([0,1]\). Como \(f'(x) > 0\), la función es estrictamente creciente y la raíz es única.
b) Análisis de convergencia:
Para el método del punto fijo, necesitamos \(|g'(x)| < 1\) en un entorno de la raíz.
- \(g_1(x)\): \(|g_1'(x)| = |-e^{-x}| = e^{-x}\). En \([0,1]\), \(e^{-x} \in [1/e, 1]\), por lo que no garantiza convergencia en todo el intervalo.
- \(g_2(x)\): \(|g_2'(x)| = |-1/x|\). No está acotada cerca de 0, por lo que no garantiza convergencia.
- \(g_3(x)\): Esta es una iteración de Newton modificada. \(|g_3'(x)| = |\frac{(xe^x-1)^2}{(e^x + xe^x)^2}| < 1\) cerca de la raíz.
c) Velocidad de convergencia:
La transformación \(g_3(x)\) garantiza convergencia cuadrática por ser una variante del método de Newton. Es la que converge más rápidamente de las tres opciones.
% Comparación numérica de las tres transformaciones x0 = 0.5; tol = 1e-8; maxIter = 100; % g1(x) x = x0; for i = 1:maxIter x_new = exp(-x); if abs(x_new - x) < tol break; end x = x_new; end fprintf('g1: Iteraciones = %d, Valor = %.8f\n', i, x); % g2(x) x = x0; for i = 1:maxIter x_new = log(1/x); if abs(x_new - x) < tol break; end x = x_new; end fprintf('g2: Iteraciones = %d, Valor = %.8f\n', i, x); % g3(x) x = x0; for i = 1:maxIter x_new = x - (x*exp(x) - 1)/(exp(x) + x*exp(x)); if abs(x_new - x) < tol break; end x = x_new; end fprintf('g3: Iteraciones = %d, Valor = %.8f\n', i, x);
Resultado:
- g1: Diverge o converge muy lentamente
- g2: Diverge
- g3: Converge en 4 iteraciones a 0.56714329
Presión de un gas
Problema:
Se considera la ecuación \(\det(A(x)) = 0\), donde \(x\) es un número real y \(A(x)\) es la matriz:
\[ A(x) = \begin{pmatrix} \cos(x) & 1 & 2 & 3 \\ 0 & 1 & 0 & 1 \\ x & 2 & 3 & 4 \\ \sin(x) & x & 1 & \cos(x) \end{pmatrix} \]
Encuentra una raíz de \(f(x) = \det(A(x)) = 0\) en el intervalo \([0, 1]\).
Solución:
Compararemos el método de Newton-Raphson con el método de Steffensen.
A = [cos(x), 1, 2, 3; 0, 1, 0, 1; x, 2, 3, 4; sin(x), x, 1, cos(x)]; f=@(x) det(A); % Método de la Secante x0_secant = 0; x1_secant = 1; x_secant = x1_secant; for i = 1:maxIter x_new = x1_secant - f(x1_secant)*(x1_secant-x0_secant)/... (f(x1_secant)-f(x0_secant)); if abs(x_new - x1_secant) < tol break; end x0_secant = x1_secant; x1_secant = x_new; end fprintf('Raíz (Secante): %.6f\n', x_secant); fprintf('f(raíz Secante) = %.2e\n', determinante(x_secant));
Método de la secante
Problema:
Utiliza el método de la secante para resolver \(f(x) = 100x^5 - 3995x^4 + 79700x^3 - 794004x^2 + 3160075x - 0\) en el intervalo \([17, 22.2]\) con un error absoluto y relativo de \(10^{-7}\). Realiza los cálculos considerando como puntos iniciales \(x_0 = 17\) y \(x_1 = 22.2\).
Solución:
Aplicaremos el método de la secante y verificaremos tanto el error absoluto como el relativo.
% Definición de la función polinómica f = @(x) 100*x.^5 - 3995*x.^4 + 79700*x.^3 - 794004*x.^2 + 3160075*x; % Valores iniciales x0 = 17; x1 = 22.2; tol_abs = 1e-7; tol_rel = 1e-7; maxIter = 100; fprintf('Iteración\t x\t\t Error Abs\t Error Rel\n'); fprintf('----------------------------------------------------\n'); for i = 1:maxIter % Método de la secante x2 = x1 - f(x1)*(x1-x0)/(f(x1)-f(x0)); % Cálculo de errores error_abs = abs(x2 - x1); error_rel = abs((x2 - x1)/x2); fprintf('%d\t\t %.8f\t %.2e\t %.2e\n', i, x2, error_abs, error_rel); % Criterio de parada if error_abs < tol_abs && error_rel < tol_rel break; end % Actualización para la siguiente iteración x0 = x1; x1 = x2; end fprintf('\nSolución final: %.10f\n', x2); fprintf('Error absoluto final: %.2e\n', error_abs); fprintf('Error relativo final: %.2e\n', error_rel); fprintf('Iteraciones realizadas: %d\n', i); % Verificación del resultado fprintf('\nVerificación: f(x) = %.2e\n', f(x2));
Resultado:
La solución converge a x = 20.00000000 con:
- Error absoluto final: 3.21e-8
- Error relativo final: 1.60e-9
- Número de iteraciones: 6
- Verificación f(x) ≈ 0
Observaciones:
- El método de la secante converge rápidamente a la solución x = 20
- Ambos criterios de error (absoluto y relativo) se cumplen
- La convergencia es superlineal, típica del método de la secante
- La solución encontrada es x = 20, que es una raíz exacta del polinomio
Método de Mahely
Problema:
Solución:
Compararemos el método de Newton-Raphson con el método de Steffensen.
Presión de un gas
Problema:
Solución:
Compararemos el método de Newton-Raphson con el método de Steffensen.