UTFSM
Análisis numérico MAT-270
Ecuaciones y sistemas no lineales
1 Ecuaciones no lineales y sistemas no lineales
Un sistema no lineal es aquel sistema en donde la respuesta del sistema no es expresable como una suma
independiente de las entradas. Generalmente los vamos a expresar con polinomios de grado mayor a 1.
De manera mas formal, el principio de superposición no se cumple:
• T (αx + βy) ̸= αT (x) + βT (y)
Queremos resolver el problema: Dada f : R → R ó f : [a, b] → R, buscamos r ∈ R tal que f (r) = 0.
En esta sesión trabajaremos los métodos más relevantes para la búsqueda de raı́ces de una función.
2 Bisección
Es un método simple, pero muy robusto.
Es un método cerrado, es decir, requiere un intervalo para poder aproximar la raı́z.
Aquı́ es donde un intervalo correcto es de alta importancia.
Para definir el intervalo, supongamos que tenemos una función f continua, y elegimos dos puntos a0
y b0 , donde:
f (a0 ) · f (b0 ) < 0
f (a0 ) y f (b0 ) tienen signo opuesto, por TVI, existe una raı́z en este intervalo.
Definimos nuestro primer paso de la iteración x0 := (a0 + b0 )/2, vamos a tener tres casos al evaluar:
• f (x0 ) · f (a0 ) < 0, f tiene una raı́z en [a0 , x0 ], definimos a1 := a0 y b1 := x0
• f (x0 ) · f (b0 ) < 0, f tiene una raı́z en [x0 , b0 ], definimos a1 := x0 y b1 := b0
• f (x0 ) = 0, encontramos la raı́z.
Replicamos para los puntos a1 y b1 , definimos nuestro segundo paso x1 := (a1 + b1 )/2
• f (x1 ) · f (a1 ) < 0, f tiene una raı́z en [a1 , x1 ], definimos a2 := a1 y b2 := x1
• f (x1 ) · f (b1 ) < 0, f tiene una raı́z en [x1 , b1 ], definimos a2 := x1 y b2 := b1
• f (x1 ) = 0, encontramos la raı́z.
Ahora, vamos a necesitar criterios para terminar las iteraciones, uno de ellos puede ser simplemente
que, pasado n iteraciones, se termine de aplicar el algoritmo.
Generalmente, nos va a interesar cumplir cierta tolerancia. Ası́, definamos x∗ como el valor real de la
raı́z, y xn como x en la iteración n, podemos definir el error ek := |xn − x∗ |.
Con esto ya tenemos un criterio de termino según alguna tolerancia, simplemente vamos a querer que,
cuando ek < tol, el algoritmo termine. Esto lo podemos implementar con un ciclo while.
También, podemos calcular, en función del intervalo de inicio [a, b], cuantas iteraciones necesitaremos
para alcanzar cierta tolerancia:
b−a
log2 tol ≤n
No siempre vamos a tener el valor real x∗ de la raı́z, pero, podemos trabajar con el error:
en = |xn − xn−1 |, siendo xn la iteración actual, y xn−1 la anterior.
Convenientemente, este error siempre es mayor al error calculado con la raı́z real, además, esta
definición de error nos sera útil para los tres métodos vistos en esta sesión.
Y por lo tanto, tal como se vió en clases un criterio de detención es:
|xn − xn−1 | < tol
UTFSM
Análisis numérico MAT-270
Tomemos como ejemplo, el ejercicio de la sesión anterior. Calcular la raı́z de la ecuación f (x) =
ex+2 − 3.
El código en Matlab deberı́a asemejarse a lo siguiente:
syms x
f ( x ) = -3+ exp ( x +2) ;
tol = 10^ -9;
a = -2;
b =2;
x_0 =( a + b ) /2;
err = inf ;
i =0;
while ( err > tol )
if ( f ( x_0 ) * f ( b ) <0)
a = x_0 ;
end
if ( f ( a ) * f ( x_0 ) <0)
b = x_0 ;
end
x_1 =( a + b ) /2;
err = abs ( x_1 - x_0 ) ;
x_0 = x_1 ;
i = i +1;
end
sol = x_0
¿En que afectarı́a evaluar directamente, sin utilizar syms?
3 Punto fijo
Este método es abierto, es decir que necesita de un único valor inicial, por esto pueden divergir, sin
embargo, si convergen, logran hacerlo mucho mas rápido que métodos cerrados.
Al igual que bisección, tengamos una función f continua, en donde estamos interesados en encontrar
una raı́z f (x) = 0. Podemos reescribir esta ecuación de la siguiente forma:
x = g(x)
Este cambio lo podemos obtener manipulando algebraica-mente:
x2 +3
x2 − 2x + 3 = 0 => x = 2
O, podemos agregar x a ambos lados de la ecuación:
sin(x) = 0 => x = sin(x) + x
No cualquier manipulación de f (x) nos sera útil, como criterio relevante, requerimos que |g(x)′ | < 1.
En este mismo punto, nos convendrá definir un intervalo para realizar la evaluación de g(x)′ .
Figure 1: Convergencia vista visualmente
UTFSM
Análisis numérico MAT-270
Gráficamente, nos va a interesar que g(x)’ este por debajo de la linea y(x) = x. Para la figura,
podemos ver que para g(x)′ que se encuentre bajo y(x) = x(Linea azul), existe una convergencia clara
vista en las flechas, que se acercan cada vez a la intersección entre las curvas.
Por el contrario, para una g(x) que se sitúa sobre y(x) = x, diverge de alguna solución, visto en las
flechas rojas de la figura.
Sigamos con el ejemplo anterior, de f (x) = ex+2 − 3.
Claramente, esta función no es fácil de manipular algebraicamente, tratemos entonces sumando x a
ambos lados de la ecuación, ası́:
g(x) = ex+2 − 3 + x, con g(x)′ = ex+2 + 1, esta derivada, si estamos trabajando con syms, la podemos
calcular como diff(f(x),n). Si n no se especifica, Matlab toma como default la primera derivada.
Figure 2: Gráfico de g(x)′
Aquı́ podemos ver una desventaja del método de punto fijo, no siempre vamos a poder encontrar
una función conveniente para este, en estos casos vamos a requerir otro método iterativo para lograr la
aproximación.
A modo de ejemplo, calculemos con punto fijo la raı́z de x = √ 1 (convenientemente, ya tenemos
x2 +2
despejado en forma de g(x) = x).
El código deberı́a asemejarse a lo siguiente:
syms x
x0 =0;
f ( x ) =1/( sqrt (( x ^2) +2) ) ; % Primera iteracion realizada fuera del ciclo
x1 = f ( x0 ) ;
tol = 10^ -3;
tolc = inf ; % Asegura que se entre al while
i =1; % Se comienza el conteo desde 1 por hacer la primera iteracion antes
while tolc > tol ;
x0 = x1 ;
x1 = f ( x0 ) ; % Iteracion
tolc = abs ( x1 - x0 ) ;
i = i +1;
end
resultado = vpa ( x1 ) ;
En comparación a bisección, ¿Que método es mas rápido?. ¿Como podrı́amos optimizar este código?.¿En
que afecta el valor inicial x0 ? .
UTFSM
Análisis numérico MAT-270
4 Newton-Raphson
En la misma linea de Punto fijo, queremos encontrar una solución g(x) conveniente, y con un orden de
convergencia 2. Con este criterio, llegamos a la siguiente definición para el método:
f (x)
g(x) = x − f ′ (x)
Esta definición, nos entrega algunas observaciones importantes, sea x∗ raı́z de f (x):
• Si x∗ es raı́z simple, el método convergerá cuadraticamente.
• Si x∗ es raı́z múltiple, entonces el método converge linealmente.
Consideremos el ejercicio de calcular la raı́z de la ecuación f (x) = ex+2 − 3. Su derivada sera f ′ (x) =
ex+2 −3
ex+2 , ası́ g(x) = x − ff′(x)
(x) = x − ex+2 , con valor inicial x0 .
El código deberı́a tener el siguiente formato:
syms x
tic
x0 =0;
f ( x ) = -3+ exp ( x +2) ; % Primera iteracion realizada fuera del ciclo , si
utilizo en biseccion restar x
f_prim ( x ) = diff ( f ( x ) ) ;
g ( x ) =x -( f ( x ) / f_prim ( x ) ) ;
x1 = g ( x0 ) ;
tol = 10^ -3;
tolc = inf ; % Asegura que se entre al while
i =1; % Se comienza el conteo desde 1 por hacer la primera iteracion antes
while tolc > tol ;
x0 = x1 ;
x1 = g ( x0 ) ; % Iteracion
tolc = abs ( x1 - x0 ) ;
i = i +1;
end
resultado = vpa ( x1 )
toc
Si nos damos cuenta, la diferencia se encuentra en como definimos g(x) para la iteración.
¿Es este método superior a punto fijo?. ¿En que casos este método falla?
5 Newton-Raphson en sistemas
El método de Newton se puede aplicar para resolver sistemas de ecuaciones no lineales de la forma
f : Rn → Rn . Este método es iterativo y se basa en la aproximación sucesiva de la solución mediante la
linealización del sistema en un punto dado.
Dado un sistema de ecuaciones no lineales representado como f (x) = 0, donde x ∈ Rn , el método de
Newton busca una solución aproximada mediante la iteración:
xk+1 = xk − Df (xk )−1 f (xk )
donde Df (xk ) es la matriz Jacobiana de f (x) evaluada en el punto xk . La matriz Jacobiana Df
contiene las derivadas parciales de cada función componente de f (x) con respecto a cada variable del
sistema.
Para entender mejor cómo funciona el método, consideremos el siguiente sistema de ecuaciones no
lineales:
x21 + 2x22 − x2 − 2x3 = 0,
x21 − 8x22 + 10x3 = 0,
x21 − 7x2 x3 = 0.
syms x1 x2 x3
x = [ x1 ; x2 ; x3 ];
f ( x1 , x2 , x3 ) = [ x1 ^2 + 2* x2 ^2 - x2 - 2* x3 ;
x1 ^2 - 8* x2 ^2 + 10* x3 ;
x1 ^2 - 7* x2 * x3 ];
Df ( x1 , x2 , x3 ) = jacobian (f , x ) ;
UTFSM
Análisis numérico MAT-270
x0 = [1; 1; 1];
max_iter = 10;
for i = 1: max_iter
f_val = f ( x0 (1) , x0 (2) , x0 (3) ) ;
Df_val = Df ( x0 (1) , x0 (2) , x0 (3) ) ;
delta_x = Df_val \ f_val ;
x0 = x0 - delta_x ;
end
vpa ( x0 )
UTFSM-DMAT Análisis numérico MAT-270
6 ¿Porque usar mldivide en vez de inv(A)?
El uso de \,o mldivide, se emplea por un par de motivos importantes, la operación inv(A), en un problema
de Ax = b, tiende a ser menos estable numéricamente, o que frente a pequeños movimientos en las matrices
de entrada, puede responder de manera no controlada.
También, en aquellos casos que la matriz A no sea cuadrada, si no rectangular (nos faltan o sobran
datos), inv(A) no entrega ningún resultado, ya que espera una entrada cuadrada nxn.
Incluso, \ es mas rápido que calcular la inversa directamente.
Pongamos esto a prueba con el pequeño ejercicio a continuación:
N =10000;
A = rand ( N ) ;
b = rand (N ,1) ;
tic ;
inv ( A ) * b ;
toc
tic
A\b;
toc
Ojo con inv(A)*b, al ser una matriz de 10000 · 10000,dependiendo del computador, puede tomar
mucho tiempo.
Ejercicios
1. Encuentre la solución de 5x + ln x = 10000, con una presición de 10− 4 usando el método de Newton.
2. Considere d la suma de los primeros 3 dı́gitos de su RUT.
El costo de elaborar x litros de un detergente para pisos de una determinada marca, en pesos, esta
dado por la función
C(x) = 10000 · d + 200x + 300x2/3
Si sabemos que la ganancia por cada litro de detergente vendido es 2000 pesos:
(a) Demuestre que existe al menos un punto de equilibrio (el número de litros x∗ para el cual el
costo es igual a la ganancia).
(b) Realice 15 pasos con el método de Newton-Raphson para aproximar x∗
Profesor Gredy S. y Ayudante Claudio R. Pagina 6 de 6