Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
TEMA 4. ECUACIONES Y SISTEMAS DE ECUACIONES ALGEBRAICAS
1 −3 −4 12
2 ↓ 2 −2 12
1 −1 −6 0
El resto es cero, por tanto x = 2 es raíz. Además, este método proporciona el polinomio cociente:
x3 − 3x2 − 4x + 12
= x2 − x − 6 (4.6)
x−2
Por eso,
x3 − 3x2 − 4x + 12 = x2 − x − 6 (x − 2)
(4.7)
Para obtener la siguiente raíz, habría que probar con divisores de 6. Si se prueba de nuevo x = 2,
1 −1 −6
2 ↓ 2 2
1 1 −4
La división no conduce a resto cero y por tanto esta no sería una raíz del último polinomio. Sin embargo,
si se prueba x = −2, entonces,
1 −1 −6
−2 ↓ −2 6
1 −3 0
se obtiene una división con resto cero.
Finalmente, el polinomio se ha descompuesto como producto de binomios:
x3 − 3x2 − 4x + 12 = (x − 3) (x + 2) (x − 2) (4.8)
tomar un polinomio y aplicar un método de resolución de ecuaciones no lineales hasta obtener una
raíz,
si el grado del polinomio cociente es mayor que dos, volver al primer punto y aplicar de nuevo el
método. Si el grado es dos o menos, se pueden resolver las últimas raíces por las fórmulas de la
ecuación de segundo grado o de la ecuación lineal.
P (xi )
xi+1 = xi − (4.9)
P ′ (xi )
Pues bien, la manera de evaluar el polinomio que propone Honer permite calcular simultáneamente
el valor de P (xi ) y P ′ (xi ). Además, cuando se alcanza la convergencia y se encuentra la raíz, también es
posible conocer los coeficientes del polinomio cociente para seguir con la iteración hasta encontrar todas
las raíces.
En los apuntes se dice que para evaluar P (x) se emplee una manera alternativa a las que se han
mostrado más arriba en las expresiones (4.1) y (4.2).
En concreto se dice que,
bn−2
b1
b0
por tanto estos coeficientes se pueden calcular recursivamente: a partir de bn se calcula bn−1 y luego
bn−2 , etc.
En los apuntes se comprueba que, para cualquier x, el valor del polinomio calculado mediante la
expresión (4.1) o (4.2) coincide con el que se obtiene aplicando la expresión (4.10). En particular, para
un x = x0 resulta que,
P (x0 ) = b0
′ (4.14)
P (x0 ) = Q(x0 )
Además, supuesto que se ha llegado a la convergencia y x = x0 es raíz del polinomio,
P (x)
= Q(x) (4.15)
x − x0
Y entonces Q(x) sería el polinomio cociente con el que habría que trabajar para seguir buscando las
raíces.
Por eso, la aplicación del algoritmo de Newton-Raphson al polinomio quedaría:
2. Una vez que se alcance la convergencia, se efectúa la división del polinomio entre el binomio solución
(expresión (4.15)),
3. Se itera de nuevo con el polinomio cociente conforme lo establecido en el punto 1 siempre y cuando
sea de grado superior a 2.
4.7.2. Introducción
Tal como se dice en los apuntes, se trata de resolver un sistema de ecuaciones de la forma,
f1 (x1 , x2 , . . . , xn ) = 0
f2 (x1 , x2 , . . . , xn ) = 0
.. (4.17)
.
fn (x1 , x2 , . . . , xn ) = 0
Este sistema puede reescribirse para adaptarlo a la forma general que expresa la ecuación (4.17),
k2
k1 e + k3 − 10 = 0
k1 e2k2 + 2k3 − 12 = 0 (4.19)
3k2
k1 e + 3k3 − 15 = 0
Esta última expresión describe tres relaciones que ligan las tres variables (o incógnitas) k1 , k2 y k3 .
Lógicamente las técnicas para resolver sistemas de ecuaciones lineales no sirven en este caso porque las
relaciones entre las incógnitas no son lineales. De ahí que hagan falta técnicas específicas.
f1 (x1 , x2 , . . . , xn ) = 0 x1 = g1 (x1 , x2 , . . . , xn )
f2 (x1 , x2 , . . . , xn ) = 0 x2 = g2 (x1 , x2 , . . . , xn )
.. → . (4.20)
.
..
fn (x1 , x2 , . . . , xn ) = 0 xn = gn (x1 , x2 , . . . , xn )
Hay que aclarar que no es preciso despejar x1 de la primera ecuación, x2 de la segunda, etc. Se puede
escoger cualquier combinación de incógnitas y ecuaciones con tal de que cada ecuación se emplee una
sola vez y todas las incógnitas se expresen explícitamente.
Referido de nuevo este planteamiento general al problema de la caracterización de pesos, la iteración
se podría plantear así:
10 − k3i
k1i+1 = i
ek2
ln (12 − 2k3i ) − ln k1i
k2i+1 = (4.22)
2
i 3k2i
15 − k1 e
k3i+1 =
3
Donde se ha tomado la primera ecuación de la expresión (4.19) para despejar k1 , la segunda para obtener
una expresión de k2 y la tercera para k3 .
Es importante tener en cuenta que en este caso particular, cada una de las expresiones de las k ′ s ha
resultado dependiente de las otras k ′ s y no de la que se está despejando (la expresión de k1 no depende
de k1 , la de k2 no depende de k2 , ...). En un caso general, cada una de las incógnitas dependería de sí
misma, además de depender de las otras.
Además, hay que hacer notar que la expresión (4.22) es una de las maneras de poner las incógnitas en
función de ellas mismas, pero no la única. Cuando se trató la resolución de las ecuaciones no lineales por
el método de la Iteración de punto fijo o punto simple ya se puso de manifiesto esta circunstancia. En
el caso de los sistemas de ecuaciones el número de variaciones posibles es mayor y el comportamiento de
cada una de ellas puede ser distinto (convergencia o no). Se anima al estudiante a buscar otras maneras
de despejar las incógnitas en este problema e incluso a calcular el número total de formas posibles.
El algoritmo sería:
1. Partir de un x0 = {x0 , x1 , . . . , xn } cualquiera (preferiblemente próximo a la solución) y encontrar
una nueva solución aplicando la fórmula iterativa de la expresión (4.21),
2. Comprobar la variación relativa entre la nueva solución y la anterior (error relativo aproximado),
3. Si el error relativo aproximado es mayor que el establecido (no ha convergido a la solución), conti-
nuar iterando (obtener una nueva solución a partir de la última). Cuando el error esté por debajo
del admisible se ha alcanzado la solución.
Para calcular el error relativo aproximado hay que comparar dos soluciones consecutivas. Teniendo
en cuenta que las soluciones que se van obteniendo en cada iteración están constituidas por varios valores
(un vector), puede no resultar claro cómo efectuar la comparación entre ellas. Este asunto se discutió en
clase al hablar de los métodos iterativos para la solución de sistemas de ecuaciones lineales. Entonces se
dijo que hay que evaluar cómo de grande es el vector diferencia entre las dos soluciones. Para hacerlo, se
puede tomar la mayor las componentes en valor absoluto de ese vector diferencia. Alternativamente, se
pueden sumar los valores absolutos de todas las componentes del vector deferencia o, también, calcular
la raíz cuadrada de la suma de los cuadrados de las componentes. Estos tres criterios corresponden
respectivamente a evaluar la norma natural infinito, la norma natural 1 y la norma natural 2 (módulo)
del vector diferencia.
Entonces el criterio de parada se puede expresar matemáticamente de la siguiente manera:
∥xi+1 − xi ∥
< tol (4.23)
∥xi+1 ∥
donde la doble barra vertical que encierra los vectores significa norma. Tal como se ha dicho es equivalente
usar la norma 1, la norma 2 o la infinito, aunque seguramente preferiremos la 2, que coincide con el módulo
del vector.
No hay que olvidarse de incluir un máximo de iteraciones para evitar una iteración infinita si el
proceso no convergiese.
No resulta difícil realizar un programa en Matlab que lleve a cabo esta iteración. Se incluye a con-
tinuación una propuesta, pero se recomienda que cada uno lo intente por su cuenta antes de mirar el
código.
function [x,ite,err] = pfijoSmas(sistema,x0,erradm,maxite)
% [x,ite,err] = pfijoSmas(sistema,x0,erradm,maxite)
% Resuelve un sistema de ecuaciones algebraicas mediante la iteración de punto fijo.
% Se parte de la solución inicial x0. Las expresiones de cada incógnita en función
% de las actuales están definidas en el fichero "sistema".
if nargin < 1, error('Es necesario proporcionar un fichero de definición del sistema'); end
if nargin < 2, error('Es necesario proporcionar una solución inicial'); end
if nargin < 3, erradm=1.0e-8; end
if nargin < 4, maxite=100; end
% La nueva solución tiene que tener las mismas dimensiones que la inicial para que se puedan restar
% los vectores al calcular el error.
x=zeros(size(x0));
end
k_nueva=zeros(size(k)); % para que el nuevo vector tenga las mismas dimensiones que el de entrada
k_nueva(1)=(10-k(3))/exp(k(2));
k_nueva(2)=(log(12-2*k(3))-log(k(1)))/2;
k_nueva(3)=(15-k(1)*exp(3*k(2)))/3;
end
que la iteración de punto fijo no converge aunque se parta de valores muy próximos a la solución. Las
únicas modificaciones que caben en el algoritmo tienen que ver con la forma de despejar las variables: se
podría usar la primera ecuación para despejar k2 ó k3 , la segunda para despejar k1 ó k3 , etc. ¿Converge
de esta manera?.
De esta manera, no es necesario un nuevo programa para la iteración de Seidel. Basta con que el fichero
en que se codifica el sistema refleje que las incógnitas ya calculadas se emplean en las expresiones de las
siguientes. En concreto, en el caso del problema de la caracterización del terreno, si se despeja k1 de la
primera ecuación, k2 de la segunda y k3 de la tercera, tal como se había hecho anteriormente (ecuación
(4.22)), la iteración de Seidel se particularizaría expresando las incógnitas de la siguiente manera:
10 − k3i
k1i+1 = i
ek 2
ln (12 − 2k3i ) − ln k1i+1
k2i+1 = (4.25)
2
i+1
15 − k1i+1 e3k2
k3i+1 =
3
Esta expresión se puede trasladar a un fichero .m de Matlab que difiere poco del que se ha presentado
antes:
function k = kasSeidel(k)
%k = kasSeidel(k)
% Calcula los valores de cada k en función de los ellos mismos
k(1)=(10-k(3))/exp(k(2));
k(2)=(log(12-2*k(3))-log(k(1)))/2;
k(3)=(15-k(1)*exp(3*k(2)))/3;
end
produce el resultado
ans =
9.7287
-0.5474
4.3723
que es solución del sistema, aunque no cumple las condiciones del enunciado del problema porque se decía
que el valor de k2 tenía que ser positivo. Se recomienda probar a resolver el problema con diferentes puntos
para el inicio de la iteración. En algunos casos se comprobará que no converge y, en los que converge,
probablemente el valor de k2 seguirá sin cumplir las condiciones del modelo matemático que caracteriza
el terreno.
El valor de las funciones f1 , f2 , . . . , fn en xs = {xs1 , xs2 , . . . , xsn } se puede escribir a partir del valor en
cualquier otro punto xi = {xi1 , xi2 , . . . , xin } mediante un desarrollo en serie:
∂f1 s ∂f1 s ∂f1 s
f1 (xs1 , xs2 , . . . , xsn ) = f1 (xi1 , xi2 , . . . , xin ) + (x1 − xi1 ) + (x2 − xi2 ) + . . . + (xn − xin ) + . . .
∂x ∂x ∂x
1 2 n
∂f ∂f ∂f2 s
f2 (xs1 , xs2 , . . . , xsn ) = f2 (xi1 , xi2 , . . . , xin ) + 2 (xs1 − xi1 ) + 2 (xs2 − xi2 ) + . . . +
(x − xin ) + . . .
∂x1 ∂x2 ∂xn n
..
.
f (xs , xs , . . . , xs ) = f (xi , xi , . . . , xi ) + ∂fn (xs − xi ) + ∂fn (xs − xi ) + . . . + ∂fn (xs − xi ) + . . .
n 1 n n 1 n
2 2
∂x1 1 1
∂x2 2 2
∂xn n n
(4.27)
Recuérdese que este desarrollo supone la suma de infinitos términos y que la expresión anterior solo
representa explícitamente los de orden cero y uno. Suponiendo que estos sean los más significativos y
que puedan despreciarse los de orden 2 y superiores, la expresión se transformaría en:
∂f1 s ∂f1 s ∂f1 s
f1 (xs1 , xs2 , . . . , xsn ) ≈ f1 (xi1 , xi2 , . . . , xin ) + (x1 − xi1 ) + (x2 − xi2 ) + . . . + (xn − xin )
∂x ∂x ∂x
1 2 n
∂f ∂f ∂f2 s
f2 (xs1 , xs2 , . . . , xsn ) ≈ f2 (xi1 , xi2 , . . . , xin ) + 2 (xs1 − xi1 ) + 2 (xs2 − xi2 ) + . . . +
(x − xin )
∂x1 ∂x2 ∂xn n (4.28)
.
..
∂f ∂f ∂f
fn (xs1 , xs2 , . . . , xsn ) ≈ fn (xi1 , xi2 , . . . , xin ) + n (xs1 − xi1 ) + n (xs2 − xi2 ) + . . . + n (xsn − xin )
∂x1 ∂x2 ∂xn
Si se tiene en cuenta, a su vez, que el valor de las funciones en la solución es cero, tal como dice la
ecuación (4.26), entonces:
∂f1 s ∂f1 s ∂f1 s
0 ≈ f1 (xi1 , xi2 , . . . , xin ) + (x1 − xi1 ) + (x2 − xi2 ) + . . . + (xn − xin )
∂x ∂x ∂x
1 2 n
∂f ∂f ∂f1 s
0 ≈ f2 (xi1 , xi2 , . . . , xin ) + 2 (xs1 − xi1 ) + 2 (xs2 − xi2 ) + . . . +
(x − xin )
∂x1 ∂x2 ∂xn n (4.29)
...
∂f ∂f ∂f
0 ≈ fn (xi1 , xi2 , . . . , xin ) + n (xs1 − xi1 ) + n (xs2 − xi2 ) + . . . + n (xsn − xin )
∂x1 ∂x2 ∂xn
y, escrito en forma matricial:
∂f1 ∂f1 ∂f1
i i i ... (xs1 − xi1 )
0 f1 (xi1 , xi2 , . . . , xin ) ∂x1
∂f2
∂x2
∂f2
∂xn
∂f1
(xs2 − xi2 )
0
f2 (x1 , x2 , . . . , xn )
...
∂x1 ∂x2 ∂xn
.. ≈ .. + .. .. .. .. .. (4.30)
. . .
. . . .
fn (xi1 , xi2 , . . . , xin )
s
0 ∂fn ∂fn ∂fn (xn − xin )
∂x1 ∂x2 ... ∂xn
Si se llama Fi al valor de las funciones evaluadas en xi , Ji al valor de las derivadas parciales de las
funciones respecto a las variables (la matriz jacobiana) evaluadas en xi y ∆xis a las diferencias entre los
valores solución y los representados por xi (∆xis = xs − xi ), la expresión anterior (4.30) se reescribe de
forma más compacta,
0 ≈ Fi + Ji ∆xis (4.31)
Esta última ecuación permitiría calcular ∆xis :
donde,
∆xi = xi+1 − xi (4.35)
Hay que tener en cuenta, tal como se ha dicho en clase, que si es posible, hay que evitar el cálculo de
matrices inversas. Por este motivo, la iteración de la expresión (4.34) se plantea en forma de sistema de
ecuaciones lineales donde el vector de incógnitas es ∆xi :
Calculado el valor de las incógnitas, ∆xi se puede despejar el valor del nuevo vector solución en la
iteración i + 1.
xi+1 = xi + ∆xi (4.37)
El algoritmo sería:
1. Dado un sistema de ecuaciones, preparar un fichero para calcular las imágenes de las funciones
para un determinado valor de las incógnitas y otro fichero para calcular el valor de las derivadas
parciales de cada función respecto a cada variable.
3. Comprobar la variación relativa entre la nueva solución y la anterior (error relativo aproximado),
4. Si el error relativo aproximado es mayor que el establecido (no ha convergido a la solución), conti-
nuar iterando (obtener una nueva solución a partir de la última). Cuando el error esté por debajo
del admisible se ha alcanzado la solución.
function F = presiones(k)
% F = presiones(k)
% Evaluación del vector de funciones como F(k)=0 en la caracterización del terreno.
F = [k(1)*exp(k(2))+k(3)-10;
k(1)*exp(2*k(2))+2*k(3)-12;
k(1)*exp(3*k(2))+3*k(3)-15];
end
Para calcular el Jacobiano hay que derivar cada ecuación respecto a las variables:
∂f ∂f1 ∂f1
1
ek 2 k1 ek2
∂k1 ∂k2 ∂k3 1
∂f2 ∂f2 ∂f2 2k2
J = ∂k1 ∂k2 ∂k3 = e 2k1 e2k2 2 (4.38)
3k2
∂f3 ∂f3 ∂f3 e 3k1 e3k2 3
∂k1 ∂k2 ∂k3
Estas expresiones trasladadas a un fichero de Matlab que se puede llamar jacobiano.m serían:
function J = jacobiano(k)
% J = jacobiano(k)
% Calcula el jacobiano del sistema de ecuaciones que caracterizan la cohesión de un terreno
J = [exp(k(2)) k(1)*exp(k(2)) 1;
exp(2*k(2)) 2*k(1)*exp(2*k(2)) 2;
exp(3*k(2)) 3*k(1)*exp(3*k(2)) 3];
end
Ahora hay que programar el algoritmo de Newton. Se puede hacer partiendo del otro programa para
resolver sistemas de ecuaciones no lineales. Se recomienda intentarlo antes de mirar el código.
function [x,ite,err] = newton(ecuaciones,jacobiano,x,erradm,maxite)
% [x,ite,err] = newton(ecuaciones,jacobiano,x0,erradm,maxite)
% A partir de un valor inicial estimado del vector x calcula los valores
% de la solución de un sistema de ecuaciones no lineales por el método de
% Newton. Hace falta proporcionar una función que calcule los valores de
% las funciones y otra que calcule el valor del jacobiano.
end
8.7713
0.2597
-1.3723
Se puede comprobar que estos valores cumplen las ecuaciones y además se verifica la condición k2 > 0.
4.7.6. Conclusión
De lo expuesto se puede concluir que la convergencia de los métodos de la iteración de punto fijo y de
Seidel es endeble, incluso si se conoce un punto próximo a la solución. Podéis comprobarlo experimentando
con los programas y con otros ejercicios (entre otros con la práctica propuesta).
1. BURDEN, Richard L. y FAIRES, J. Douglas. Análisis Numérico. 7.a ed. México: Thomson Learning,
2002. isbn 9706861343.
2. BEKKER, Mieczyslaw G. Introduction to Terrain Vehicle Systems. Ann Arbor, Michigan: University
of Michigan Press, 1969. isbn 0472041444.
12