Descargar

Resolución de los sistemas de ecuaciones lineales reales por el método de Gauss

Enviado por Aladar Peter Santha


Monografía destacada
  1. Propiedades del valor absoluto
  2. Error absoluto y error relativo
  3. Error absoluto de la suma y de la diferencia
  4. Error absoluto del producto o del cociente
  5. Error relativo del producto y del cociente
  6. Error absoluto y relativo de una potencia
  7. Método de Gauss para un sistema de tipo Cramer
  8. Método de Gauss para un sistema cualquiera
  9. Método de Gauss con pivotes
  10. Introducción por el teclado de un sistema real
  11. Bibliografía

Propiedades del valor absoluto

Definición 1.1:

edu.red

Propiedades del valor absoluto:

edu.red

Puesto que la última de las desigualdades equivalentes se cumple siempre, lo mismo se puede decir de la primera.

Error absoluto y error relativo

edu.red

Definición 2.1:

edu.red

Así pues, sin conocer el error absoluto de edu.redse puede afirmar que este es menor que 0.01. l ejemplo anterior nos conduce a la definición siguiente:

Definición 2.2:

edu.red

Estas consideraciones justifican la definición siguiente:

Definición 2.3:

edu.red

Definición 2.4:

edu.red

Error absoluto de la suma y de la diferencia

Teorema 3.1:

edu.red

Teorema 3.2:

edu.red

Error absoluto del producto o del cociente

Lema 4.1:

edu.red

Teorema 4.1:

edu.red

Teorema 4.2:

edu.red

Error relativo del producto y del cociente

Lema 5.1:

edu.red

Teorema 5.1:

edu.red

Error absoluto y relativo de una potencia

Teorema 6.1:

edu.red

Teorema 6.2: En las hipótesis del teorema 6.1

edu.red

Teorema 6.3:

edu.red

Método de Gauss para un sistema de tipo Cramer

La resolución de un sistema Cramer (el número de las ecuaciones es igual al número de las incógnitas y su determinante es diferente de cero) es muy sencilla cuando tiene la forma triangular, como en el ejemplo siguiente:

edu.red

Continuando el proceso de esta manera, se obtendrá un determinante donde todos los elementos situados por debajo de la diagonal principal son nulos y sobre la diagonal principal hay uno o varios ceros. Así el valor del determinante sería el producto de los elementos de la diagonal principal, que sería nulo por la existencia de ceros entre ellos.

Consecuencia 7.1: Cuando se aplica el proceso de Gauss para calcular el valor de un determinante, al aparecer el primer cero sobre la diagonal principal tal que, en la columna de este cero y por debajo de ella, hayan solamente ceros, ya se puede decir que el determinante es nulo.

Para resolver un sistema de tipo Cramer hay que sustituirlo con un sistema equivalente triangular. La exposición del método se hará en el caso de un sistema de cuatro ecuaciones con cuatro incógnitas, evitando así complicaciones innecesarias en la escritura. Si el sistema

edu.red

Sumando a la tercera y cuarta ecuación del sistema (7.3) la primera multiplicada por

edu.red

, respectivamente, se obtiene el sistema equivalente:

edu.red

Ejemplo 7.1: Se considera el sistema siguiente:

edu.red

A continuación, en el sistema (7.7) se guardarán las primeras dos ecuaciones, mientras que a la tercera y la cuarta se sumarán la segunda multiplicada con 27/5 y 57/5, respectivamente, obteniendo así el sistema equivalente:

edu.red (7.8)

Guardando en el sistema (7.8) las primeras tres ecuaciones, a la cuarta ecuación se sumará la tercera multiplicada con la fracción 40.6/37.8 = 29/27, obteniendo así el sistema triangular equivalente:

edu.red (7.9)

Ahora, de este último sistema resulta sin dificultades que

edu.red

Dado un sistema, donde el número de las ecuaciones es igual al número de las incógnitas, el procedimiento siguiente averiguará si el sistema es de tipo Cramer y, en el caso afirmativo, resolverá el sistema (en general con la precisión adecuada). En el caso de que el sistema no fuera de tipo Cramer, el ordenador emitirá el mensaje oportuno y la ejecución del procedimiento se detendrá.

edu.red

Puesto que los ordenadores trabajan siempre con un número finito de dígitos por número, los coeficientes del sistema reducido (triangular( obtenido no se podrán calcular siempre con exactitud. Así, al efectuar los cálculos con un ordenador, el sistema inicial y el sistema reducido obtenido por el método de Gauss en la mayoría de los casos no son equivalentes.

Si los coeficientes del sistema (7.2) son enteros entonces se puede llegar siempre a un sistema reducido (triangular) equivalente de la manera siguiente:

edu.red

Si los coeficientes del sistema (7.2) son decimales, para llegar a un sistema con coeficientes enteros equivalente, basta con multiplicar cada ecuación con una potencia de diez cuyo exponente es el número máximo de las cifras después del punto decimal en los coeficientes de la ecuación.

Trabajando con el método modificado de Gauss (expuesto anteriormente), el programa de ordenador tendrá que utilizar las funciones para operar con enteros y decimales largos. Así se podrán resolver también sistemas de tipo Cramer con coeficientes enteros o decimales extra largos y con la precisión que se quiera.

Public Function MGSC2(ByRef cc0() As String, pr As Integer) As String

'Se utilizan las operaciones con enteros y decimales extra largos.

Dim y As String, mensaje As String, k As Integer, rc As String

Dim i As Integer, j As Integer, n As Integer, sw As Integer, m As Integer

Dim cc() As String, res As String, x(2) As String, zz As String

Dim z(2) As String, v(2) As String, xx() As String, rr() As String

cc() = CSDSE(cc0())

n = UBound(cc()): rc = Chr$(13) + Chr$(10)

ReDim xx(n)

edu.red

"- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function CSDSE(ByRef c0() As String) As Variant

' Conversión de un sistema con coeficientes decimales

' a un sistema equivalente con coeficientes enteros.

Dim i As Integer, j As Integer, k As Integer, p As Integer, q As Integer

Dim c() As String, caracter As String, t() As Integer, nd As Integer, pd As String

Dim k1 As Integer, k2 As Integer, x(2) As String

edu.red

Ejemplo 7.2: Si se considera el sistema:

edu.red

Se observa que (7.6) se obtiene de (7.8) por redondeo a las primeras 14 cifras después del punto decimal..

Ejemplo 7.3: Obviamente, el sistema de tipo Cramer:

edu.red

Observación 7.0: Si algunos los coeficientes del sistema de tipo Cramer (7.2) solo se pueden introducir en el ordenador de manera aproximada, el sistema introducido en el ordenador ya no es equivalentes con el sistema (7.2). Puesto que el determinante de un sistema y la solución del mismo son funciones continuas de los coeficientes, introduciendo el sistema con bastante precisión se puede conseguir que el sistema introducido sea también de tipo Cramer y que su solución aproxime bien la solución del sistema inicial. Resolviendo el sistema dos veces, introduciendo los coeficientes la segunda vez con más exactitud, se podría apreciar la precisión de los cálculos según el número de las cifras comunes de las dos soluciones.

Observación 7.1: La resolución de sistemas lineales de tipo Cramer es importante puesto que permite calcular la matriz inversa de una matriz cuadrada de determinante no nulo.

edu.red

Las funciones siguientes devuelven la matriz inversa de una matriz con determinante no nulo, trabajando con variables de precisión doble, y sin editar el resultado. Los elementos de la matriz pueden ser números enteros o decimales:

edu.red

' – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function MGSC1(ByRef cc0() As Double) As Variant

Dim y As Double, mensaje As String, k As Integer, rc As String

Dim i As Integer, j As Integer, n As Integer, sw As Integer, m As Integer

edu.red

Ejemplo 7.4: Utilizando el código anterior,

edu.red

También es posible calcular la matriz inversa con el código siguiente que trabaja con números extra-largos según el método de Gauss modificado y opera con variables de tipo string (Ver [5] y [6]):

Public Function InvMatGaussNG(ByRef a0() As String, pr As Integer) As Variant

Dim i As Integer, j As Integer, k As Integer, xx() As String

Dim n0 As Integer, c() As String, a() As String, rr() As String

edu.red

' – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function MGSC2(ByRef cc0() As String, pr As Integer) As Variant

'Se utilizan las operaciones con enteros y decimales extra largos.

Dim y As String, mensaje As String, k As Integer, rc As String

Dim i As Integer, j As Integer, n As Integer, sw As Integer, m As Integer

Dim cc() As String, res As String, x(2) As String, zz As String

Dim z(2) As String, v(2) As String, xx() As String, rr() As String

cc() = CSDSE(cc0())

n = UBound(cc()): rc = Chr$(13) + Chr$(10)

edu.red

' – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function CSDSE(ByRef c0() As String) As Variant

' Conversión de un sistema con coeficientes decimales

' a un sistema equivalente con coeficientes enteros.

Dim i As Integer, j As Integer, k As Integer, p As Integer, q As Integer

Dim c() As String, caracter As String, t() As Integer, nd As Integer, pd As String

Dim k1 As Integer, k2 As Integer, x(2) As String

c() = c0()

edu.red

Ejemplo 7.5: Utilizando la función InvMatGaussNG se obtiene que

edu.red

Observación 2: Si los coeficientes de la matriz no se pueden introducir da manera exacta, conviene que se introduzcan con una exactitud remarcable y el resultado será una aproximación de la matriz inversa.

Método de Gauss para un sistema cualquiera

Obviamente, con el método de Gauss se pueden resolver no solamente sistemas de ecuaciones lineales de tipo Cramer, sino también sistemas lineales cualesquiera, pudiendo averiguar si el sistema es compatible o no y, si lo es, hallar su solución. Antes de estudiar el caso general, veamos algunos ejemplos.

Ejemplo 8.1: Para resolver el sistema:

edu.red (8.1)

edu.red

Así, el sistema inicial (8.1), de tres incógnitas y cuatro ecuaciones, es equivalente con el sistema (8.4) de tres ecuaciones y tres incógnitas. Este último sistema es triangular y de tipo Cramer. Se verifica fácilmente que su solución es:

edu.red

Para resolver un sistema como el sistema (8.1), por ejemplo, es muy útil asociar al sistema la matriz

edu.red (M1)

, cuyas filas son los coeficientes de las ecuaciones del sistema, la última columna conteniendo los términos libres. Aplicando el método de Gauss para la resolución de este sistema, a los sistemas equivalentes (8.2) (8.4) les corresponderán las matrices siguientes:

edu.red

, respectivamente. Para llegar desde la matriz (M1) a la matriz (M2), hay que aplicar a las filas de la matriz inicial las mismas transformaciones que se han hecho para las ecuaciones del sistema (8.1), para llegar al sistema equivalente (8.4). Así se ahorra la escritura de las incógnitas en los sistemas equivalentes sucesivas. Por otra parte, cuando se trabaja con ordenador, los cálculos se organizarán por esta vía matricial.

Ejemplo 8.2: A continuación se examinará un sistema cuya solución aportará algunos elementos nuevos con respecto al anterior. Considerando el sistema:

edu.red (8.5)

, a la segunda, a la tercera, a la cuarta y a la quinta ecuación se le sumará la primera, multiplicada por 2, 1.5, -2.5 y -3.5, respectivamente, obteniendo el sistema equivalente:

edu.red (8.6)

En el sistema (8.6), sumando a las últimas tres ecuaciones la segunda multiplicada por 9.5, se obtiene que:

edu.red (8.7)

Luego, en el sistema (8.7), a las últimas dos ecuaciones se les sumará la tercera multiplicada por 1, obteniendo:

edu.red (8.8)

Por tanto, el sistema (8.5) es equivalente con el sistema triangular:

edu.red

Así, el sistema (9.5) es compatible indeterminado (de grado 1 ya que la solución depende de un parámetro único) y tiene una infinidad de soluciones. A continuación veremos un ejemplo de sistema lineal incompatible.

Ejemplo 8.3: Se considera el sistema:

edu.red (8.10)

A la segunda, a la tercera, a la cuarta y a la quinta ecuación se le suma la primera multiplicada por 2, 1, 4 y 2, respectivamente:

edu.red

Conservando las primeras dos ecuaciones y sumando a las últimas tres la segunda multiplicada por 1, -6 y 3, respectivamente, se llega al sistema equivalente:

edu.red

Ahora se conservarán las tres primeras ecuaciones y sumando a la cuarta y a la quinta la tercera multiplicada por 6 y 2, respectivamente, se obtiene el sistema equivalente:

edu.red

Finalmente, conservando las primeras cuatro ecuaciones y sumando a la quinta la cuarta multiplicada por 3/5, se obtiene el sistema equivalente:

edu.red (8.11)

La última igualdad de (8.11) es imposible y así el sistema no tiene solución. Se dice que es incompatible.

En general, cuando se pretende resolver el sistema (8.1) (de edu.redincógnitas y edu.redecuaciones) por el método de Gauss, puede ocurrir que no aparezca ninguna igualdad imposible, de tipo edu.red(donde edu.redEn este caso el sistema es compatible. En el caso contrario el sistema es incompatible.

Si el sistema es compatible, dos casos son posibles:

a) Si suprimiendo las ecuaciones de tipo edu.redel método de Gauss conduce al sistema triangular equivalente:

edu.red

En efecto, introduciendo las notaciones

edu.red

, de la última ecuación del sistema (8.14) resulta la última de las igualdades (8.15).

Suponiendo ahora que

edu.red

…………………………………………………….

edu.red

Si el sistema es homogéneo, es decir,

edu.red

, en las fórmulas (8.15) tendremos también

edu.red

Así las soluciones del sistema homogéneo tendrán que cumplir las condiciones:

edu.red

En efecto,

edu.red

Observación 8.1: Todo lo dicho anteriormente en este párrafo es perfectamente factible también cuando los coeficientes del sistema pertenecen a un otro cuerpo, que no sea el cuerpo de los números reales.

Ejemplo 8.4: Es fácil de comprobar que el sistema

edu.red (8.17)

, es equivalente con el siguiente:

edu.red (8.17")

Para hallar un sistema fundamental de soluciones del sistema homogéneo hay que resolver los sistemas:

edu.red

Así, las soluciones del sistema son:

edu.red

Esta observación hará más fácil la programación para resolver un sistema de ecuaciones lineales con el ordenador.

A continuación se expone un código que funciona bien cuando los coeficientes del sistema son exactos y los errores de redondeo son poco significativos, como en el caso de los sistemas (8.1), (8.5), (8.10) y (8.17).

Observación 8.2: Hay sistemas cuya solución no se puede obtener por el método de Gauss tradicional. Por ejemplo, si se aplica el método de Gauss para el sistema siguiente:

edu.red (*)

, se obtiene que

edu.red (**)

, que no permite calcular a edu.redpor el procedimiento habitual de Gauss. Sin embargo si escribimos el sistema en las siguientes formas equivalentes:

edu.red

Para poder resolver el sistema (*) con un ordenador, en vez de utilizar el procedimiento habitual de Gauss, se puede utilizar también la permutación de las incógnitas. Así el sistema (**) se podría escribir también en las formas siguientes:

edu.red

Naturalmente, el programa debe tener en cuenta todas las permutaciones de las columnas que corresponden a las permutaciones de las incógnitas. La función siguiente resuelve el sistema de esta manera por el método de Gauss que permite permutar tanto las ecuaciones como las incógnitas:

Public Function ResSELR0(ByRef cc0() As Double) As Variant

'Autor: Aladar Peter Santha

Dim i As Integer, j As Integer, k As Integer, rc As String, mensaje As String

Dim cc() As Double, y As Double, sol As String, cn() As Double, kk As Integer

Dim r As Integer, sw As Integer, en As Double, j0 As Integer, nm As Integer

Dim xp As Double, xc As Double, k0 As Integer, i0 As Integer, yi As Integer

Dim x() As Double, res(3) As String, sp() As Double, sistema As String

Dim n As Integer, m As Integer, rr() As String, t() As Integer, tn() As Integer

rc = Chr$(13) + Chr$(10): cc() = cc0()

n = UBound(cc0(), 1): m = UBound(cc0(), 2) – 1

ReDim t(m), tn(m), x(m)

For i = 1 To m: t(i) = i: Next i

If n < m Then nm = n Else nm = m

' – – – – – – Obtención del sistema reducido

edu.red edu.red edu.red edu.red

'- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function VSR(ByRef c() As Double, ByRef t() As Integer, ByVal r As Integer) As String

' No devuelve las ecuaciones con todos los coeficientes nulos.

Dim sist2 As String, i As Integer, j As Integer, n As Integer, m As Integer

n = UBound(c(), 1): m = UBound(cc(), 2) – 1

edu.red

Ejemplo 8.4a: Considerando el sistema

edu.red

Ejemplo 8.4b: Considerando el sistema

edu.red

El programa anterior expone que es compatible determinado y tiene la solución:

edu.red

Sin embargo si se consideran sistemas cuyos coeficientes son aproximados, o solo se pueden introducirlos en el ordenador con aproximación, el programa anterior podría tener problemas. Aunque los coeficientes sean exactos, por la superposición de los errores de redondeo aparecen los mismos problemas.

Por ejemplo si se considera el sistema

edu.red

, utilizando la Function ResSELR0 se obtiene la respuesta que el sistema es incompatible. Esto es falso y ocurre por los errores que se cometieron al introducir los coeficientes del sistema de manera aproximada. De lo anteriormente expuesto queda claro que hay dos vías para mejorar la seguridad en el método de Gauss. La primera consiste en tener en cuenta los errores iniciales y los que se cometen durante el proceso de cálculo del sistema reducido. Si los coeficientes son exactos, la segunda vía consiste en utilizar el método modificado de Gauss y operar con números enteros extra-largos. Ninguna de estas vías era factible hasta la era moderna de los ordenadores (con mucha memoria y gran velocidad).

edu.red

Por ejemplo, si en cierto momento del cálculo, la matriz C tiene la forma:

edu.red

Para evaluar EO1, supongamos que el producto se alojó en la variable XP de precisión doble. El producto puede aparecer en punto fijo o en punto flotante. Si en punto fijo

edu.red

Si los coeficientes del sistema se pueden introducir en el ordenador de manera exacta o con errores conocidos y lo suficientemente pequeños (para que sean utilizables las fórmulas del párrafo 2), lo expuesto anteriormente permite resolver un sistema con el código siguiente:

Public Function ResSELR(ByRef cc0() As Double, ByRef ei() As Double) As Variant

'Autor: Aladar Peter Santha

Dim i As Integer, j As Integer, k As Integer, rc As String, rr() As String

Dim cc() As Double, e() As Double, y As Double, sol As String, cn() As Double

Dim r As Integer, sw As Integer, en As Double, j0 As Integer, nm As String

Dim ep As Double, xp As Double, xc As Double, sistema As String, kk As Integer

Dim x() As Double, res(3) As String, sp() As Double, t() As Integer

Dim n As Integer, m As Integer, i0 As Integer, k0 As Integer, yi As Integer

Dim eo1 As Double, eo2 As Double, eo3 As Double, tn() As Integer

rc = Chr$(13) + Chr$(10): cc() = cc0(): e() = ei()

n = UBound(cc0(), 1): m = UBound(cc0(), 2) – 1

ReDim t(m), tn(m)

For i = 1 To m: t(i) = i: Next i

If n < m Then nm = n Else nm = m

' – – – – – – Obtención del sistema reducido.

edu.red edu.red

'- – – – – – – – – Resolución del sistema reducido

ReDim sp(m – r + 1, m), cn(r, r + 1), x(m)

edu.red edu.red

'——————————————————————————–

Public Function VerSistema(ByRef c() As Double) As String

Dim i As Integer, j As Integer, sist As String, rc As String

Dim n As Integer, m As Integer

n = UBound(c(), 1): m = UBound(c(), 2) – 1

rc = Chr$(13) + Chr$(10)

edu.red

'————————————————————————————————————

Public Function VSR(ByRef c() As Double, ByRef t() As Integer, ByVal r As Integer) As String

' No devuelve las ecuaciones cuyos coeficientes son todos nulos

Dim sist2 As String, i As Integer, j As Integer, n As Integer, m As Integer

n = UBound(c(), 1): m = UBound(cc(), 2) – 1

edu.red

'——————————————————————————–

Public Function RutinaError(xpc As Double) As Double

Dim p As String, pia As String, xpa As String, eo As Double

Dim pi As Integer, pd As Double

Dim t As Integer

edu.red

Ejemplo 8.5: Considerando de nuevo el sistema (8.18)

edu.red (8.24)

, en el ordenador se introducirá el sistema con los coeficientes aproximados siguientes:

edu.red (8.25)

Luego, la matriz de las cotas superiores (las más pequeñas posibles) de los errores absolutos de los coeficientes es:

edu.red

Al efectuar los cálculos con la función edu.redse obtiene el sistema reducido:

edu.red

Obviamente, a mayor precisión de carga de los coeficientes, mayor precisión corresponde en el resultado.

Observación 8.2:

edu.red

Si los errores de los coeficientes son distintos no queda más remedio que junto a cada coeficiente introducir su error.

La segunda vía para mejorar el método de Gauss es posible cuando los coeficientes del sistema son enteros (el caso decimal es reducible a esto multiplicando a cada ecuación con una potencia de 10), que permite no cometer errores de cálculo al hallar el sistema reducido y obtener el resultado con más precisión.

edu.red

Para resolver un sistema cualquiera cuyos coeficientes se pueden introducir en el ordenador de manera exacta se puede usar la función siguiente:

Public Function ResSELRNG(ByRef cc0() As String, pr As Integer) As Variant

' Autor: Aladar Peter Santha

Dim i As Integer, j As Integer, j0 As Integer, k As Integer, k1 As Integer, kk As Integer

Dim cc() As String, y As String, sol As String, mensaje As String, zz As String

Dim cn() As String, r As Integer, sw As Integer, xx() As String, rr() As String

Dim x(2) As String, res(3) As String, rc As String, z(2) As String, v(2) As String

Dim n As Integer, m As Integer, nm As Integer, sp() As String, sistema As String

Dim k0 As Integer, i0 As Integer, t() As Integer, tn() As Integer, yi As Integer

rc = Chr$(13) + Chr$(10): cc() = CSDSE(cc0())

n = UBound(cc0(), 1): m = UBound(cc0(), 2) – 1

edu.red

edu.red edu.red edu.red

'—————————————————————————————–

Public Function CSDSE(ByRef c0() As String) As Variant

' Conversión de un sistema con coeficientes decimales

' a un sistema equivalente con coeficientes enteros.

Dim i As Integer, j As Integer, k As Integer, p As Integer, q As Integer

Dim c() As String, caracter As String, t() As Integer, nd As Integer, pd As String

Dim k1 As Integer, k2 As Integer, x(2) As String

c() = c0()

p = UBound(c(), 1): q = UBound(c(), 2)

For i = 1 To p

edu.red

'—————————————————————————————–

Public Function VerSistema(ByRef c() As String) As String

Dim i As Integer, j As Integer, sist As String, rc As String

Dim n As Integer, m As Integer

n = UBound(c(), 1): m = UBound(c(), 2) – 1

rc = Chr$(13) + Chr$(10)

sist = "El sistema es: " + rc

edu.red

'—————————————————————————————–

Public Function VerSistRed(ByRef c() As String, ByRef t() As Integer, ByVal r As Integer) As String

edu.red

Ejemplo 8.6: Resolver el sistema

edu.red

Utilizando la función anterior se obtiene la solución

edu.red

El sistema reducido equivalente al sistema es:

edu.red

Ejemplo 8.7: Resolver el sistema

edu.red (8.27)

Utilizando la función " ResSELRNG" se obtiene que el sistema es compatible indeterminado de grado 2. Un sistema fundamental de soluciones del sistema homogéneo (que se obtiene del sistema original sustituyendo los términos libres por ceros) es:

x(1) = -1.4336617879135680371896872

y(1) = 1.6777129236978539942508102

z(1) = -07597776335328747884885832

u(1) = 1

v(1) = 0

x(2) = -0.7916764837791234488210624

y(2) = 0.1044845050786192852228072

z(2) = 1.10991040659623362045606

u(2) = 0

v(2) = 1

Una solución particular del sistema es

x(0) = 6.0413470906408430605432901

y(0) = -7.8803744514293775872526313

z(0) = -3.423142972156203519054459

u(0) = 0

v(0) = 0

Así la solución general del sistema es

edu.red

El sistema reducido del sistema (8.27) (con coeficientes enteros) es:

21300x+12500y+8340u+6300v = 1627

895900y+450570z-1160730u-593700v = -8602393

5903339730z+4485225490u-6552178200v =-20207975909

Observación 8.3: Si los coeficientes del sistema no se pueden introducir de manera exacta en el ordenador y no se trata de un sistema Cramer, no se recomienda la resolución del sistema por la función ResSELRNG puesto efectúa que esta función efectúa los cálculos con mucha precisión pero no tiene en cuenta los errores al introducir el sistema en el ordenador. Da como resultado la solución (casi exacta) del sistema introducido y no del sistema inicial. Por ejemplo, al introducir de manera aproximada un sistema indeterminado, este puede convertirse en incompatible o incluso compatible determinado. Si el sistema es de tipo Cramer, no importa si los coeficientes han sido introducidos con errores mínimos (por los motivos expuestos en la observación (7.0).

Método de Gauss con pivotes

Aplicando el método de Gauss al sistema de matriz:

edu.red

edu.red

Continuando el proceso de la manera indicada anteriormente, al escribir la solución del sistema, hay que tener en cuenta las permutaciones que hayan podido sufrir las incógnitas, debido a la elección de los pivotes.

edu.red

Ejemplo 9.1: Resolver por el método de Gauss con pivotes el sistema:

edu.red

Multiplicando la primera ecuación por 1/8, -5/8, -1/8, sucesivamente, y sumando el resultado a la segunda, tercera y cuarta de las ecuaciones (respectivamente) se obtiene el sistema:

edu.red (9.5)

Se observa que en la matriz

edu.red

Procediendo de la misma manera, se llega a los dos siguientes sistemas:

edu.red

Si durante el proceso de cálculo se cambian entre ellas dos filas o dos columnas en la matriz del sistema, los mismos cambios hay que hacerlos en la matriz de los errores. El código siguiente permite resolver sistemas de ecuaciones lineales por el método de Gauss con pivotes, si los coeficientes son exactos o si los errores de los coeficientes son conocidos y lo suficientemente pequeños:

Public Function ResSELRP(ByRef cc0() As Double, ei() As Double) As Variant

'Método de Gauss y de los pivotes. Autor: Aladar Peter Santha.

Dim i As Integer, j As Integer, k As Integer, kk As Integer, sw As Integer

Dim j0 As Integer, k0 As Integer, y As Double, tn() As Integer, t() As Integer

Dim y0 As Double, yi As Double, cc() As Double, e() As Double, cn() As Double

Dim rt() As String, y1 As Double, i0 As Integer, res(3) As String, nm As Integer

Dim m As Integer, n As Integer, xc As Double, xp As Double, x() As Double

Dim eo1 As Double, eo2 As Double, eo3 As Double, ac As Double

cc() = cc0(): e() = ei()

n = UBound(cc(), 1): m = UBound(cc(), 2) – 1

If n < m Then nm = n Else nm = m

ReDim t(m), tn(m)

For i = 1 To m: t(i) = i: Next i

For j = 1 To nm

edu.red edu.red edu.red

edu.red

' – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function VerSistema(ByRef c() As Double) As String

Dim m As Integer, n As Integer, sist As String

Dim i As Integer, j As Integer

n = UBound(c(), 1): m = UBound(c(), 2) – 1

edu.red

' – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function VSRP(ByRef cc() As Double, ByRef t() As Integer, ByVal r As Double) As String

' No devuelve las ecuaciones con todos los coeficientes nulos.

Dim m As Integer, n As Integer, i As Integer, j As Integer, sist2 As String

n = UBound(cc(), 1): m = UBound(cc(), 2) – 1

edu.red

' – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Public Function RutinaError(ByVal xpc As String) As Double

Dim pp As String, pia As String, xpa As String

Dim pi As Integer, pd As Integer, eo As Double

Dim t As Integer

edu.red

Ejemplo 9.2: Considerando el sistema simple

edu.red

, función ResSELR0 no sirve para resolver el sistema puesto que los errores de redondeo cometidos al hallar el sistema reducido conducen a la conclusión que el sistema es incompatible. Sin embargo, las otras funciones, como ResSELR, ResSELRNG ó ResSELRP llegan a la conclusión correcta de que el sistema es compatible determinado y que tiene la solución

edu.red

Introducción por el teclado de un sistema real

edu.red

Public Function RutinaCoeficientesDouble(t0 As String) As Variant

Dim i As Integer, i0 As Integer, j As Integer, k As Integer

Dim px() As Double, t As String, p0() As String

Dim lt As Integer, caracter As String, nco As Integer

t = t0

'—- Número de las comas en la cadena t0

If Right$(t, 1) <> "," Then t = t + ","

k = 1: lt = Len(t): nco = 0

Do

caracter = Right$(Left$(t, k), 1)

If caracter = "," Then

nco = nco + 1

End If

k = k + 1

If k > lt Then Exit Do

Loop

If nco <= 1 Then

MsgBox "Tiene que haber más de un coeficiente", 48

Exit Function

End If

gp = nco – 1

'— Separación de los coeficientes

ReDim px(gp + 1), p0(gp + 1)

k = 1: i = 1: i0 = 1: j = 0

Do

caracter = Right$(Left$(t, k), 1)

If caracter = "," Then

j = j + 1

p0(i0) = Left$(t, k – 1): px(i0) = Val(p0(i0))

i = i + 1: i0 = i0 + 1

t = Mid$(t, k + 1)

k = 1

Else

k = k + 1

End If

If j = nco Then Exit Do

Loop

RutinaCoeficientesDouble = px()

End Function

edu.red

Ejemplo 10.1: si las primeras dos ecuaciones de un sistema son

edu.red

La matriz de los errores de los coeficientes de un sistema se puede introducir por el teclado de manera análoga.

Si se quiere introducir un sistema cuyos coeficientes son de tipo String, hay que utilizar la función RutinaCoeficienteString, que difiere muy poco de RutinaCoeficientesDouble y que es la siguiente:

Public Function RutinaCoeficientesString(t0 As String) As Variant

Dim i As Integer, i0 As Integer, j As Integer, k As Integer, t As String

Dim t As String, px() As String

Dim lt As Integer, caracter As String, nco As Integer

t = t0

'—- Número de las comas en la cadena t0

If Right$(t, 1) <> "," Then t = t + ","

k = 1: lt = Len(t): nco = 0

Do

caracter = Right$(Left$(t, k), 1)

If caracter = "," Then

nco = nco + 1

End If

k = k + 1

If k > lt Then Exit Do

Loop

If nco <= 1 Then

MsgBox "Tiene que haber más de un coeficiente", 48

Exit Function

End If

gp = nco – 1

'— Separación de los coeficientes

ReDim px(gp + 1), p0(gp + 1)

k = 1: i = 1: i0 = 1: j = 0

Do

caracter = Right$(Left$(t, k), 1)

If caracter = "," Then

j = j + 1

px(i0) = Left$(t, k – 1).

i = i + 1: i0 = i0 + 1

t = Mid$(t, k + 1)

k = 1

Else

k = k + 1

End If

If j = nco Then Exit Do

Loop

RutinaCoeficientes = px()

End Function

Naturalmente, a los argumentos de las funciones utilizadas se pueden introducir por el teclado también de otras maneras.

Bibliografía

[0] B. DÉMIDOVITCH y MARON, ÉLÉMENTS DE CALCUL NUMERIQUE,

EDITION MIR, MOSCOU. 1973.

[1] A. ?. K?P??, KYPC B???E? ??????, ?????, MOCKBA, 1968.

[2] E. ARGHIRIADE CURS DE ALGEBRA SUPERIOARA, I-II, Editura Didactica si

Pedagogica, Bucuresti, 1963.

[3] L.I Golovina Algebra Lineal y Algunas de sus aplicaciones, Editorial Mir, Moscú,

1980.

[4] F.R. Gantmacher, MATRIZENRECHNUNG, I – II, Berlin 1965.

[5] Aladar Peter Santha, Cálculos con números enteros largos, en ordenadores,

Monografias.com, 31/01/2012.

[6] Aladar Peter Santha, Cálculos con números decimales largos, en ordenadores,

Monografias.com, 23/05/2012

 

 

Autor:

Aladar Peter Santha