DIAGONALIZAR MATRICES... URGE!!!

MAYA
19 de Enero del 2004
Hola a todos, hacia ya tiempo que no me pasaba por el foro.... eso para mi ha sido buena señal ya que significa que no he tenido problemillas con el VB

pero como lo bueno dura poco, ahora me ha surgido otro gran problema

Resulta que tengo que resolver un sistema de ecuaciones matematicas mediante la diagonalizacion de una matriz (Metodo de Gauss Jordan) y al implementar el codigo no me funciona ya que no diagonaliza la matriz.

El codigo es el siguiente:

Enviados


responder responder a todos redireccionar borrar
mensaje
imprimir



De: [email protected] [ Añadir a la Libreta de Direcciones ]
Para: [email protected]
Tema: RE:Re: PRACTICA A ENTREGAR
Cc:
Fecha: 19 Jan 2004 18:38:54 +0000




Texto del mensaje:


El metodo que estoy utilizando es el de "diagonalizacion", pero tengo un problema con el ya que no me diagonaliza bien la matriz. por mas que le doy vueltas no consigo ver donde esta el fallo. No se si es que no estoy escribiendo bien el codigo.

Para revisarlo, envio la parte correspondiente, que seria la siguiente:


ReDim matNI_izq(5, 6)
ReDim solucion6i2(5, 6)

ReDim matNIdiago_izq(5, 6)
ReDim solucion7i2(5, 6)

' 1º)) Se calcula una matriz auxiliar de dimensiones (6x7) cuyas 6 primera columnas son N y la 7ª es I:

For fila2 = 0 To 5

matNI_izq(fila2, 0) = solucion4i2(fila2, 0)
matNI_izq(fila2, 1) = solucion4i2(fila2, 1)
matNI_izq(fila2, 2) = solucion4i2(fila2, 2)
matNI_izq(fila2, 3) = solucion4i2(fila2, 3)
matNI_izq(fila2, 4) = solucion4i2(fila2, 4)
matNI_izq(fila2, 5) = solucion4i2(fila2, 5)
matNI_izq(fila2, 6) = solucion5i2(fila2)

Next

solucion6i2() = matNI_izq()


' 2º)) calculamos EL NUEVO SISTEMA multiplicando cada termino de esta nueva matriz por unfactor y restandole a los coeficientes de la fila anterior
' obtenemos una matriz diagonal en los terminos de N

For columna2 = 0 To 5

For fila2 = 0 To 5

If fila2 <> columna2 Then

If solucion6i2(fila2, columna2) = 0 Then

matNIdiago_izq(fila2, columna2) = 0

Else

valor2 = solucion6i2(columna2, columna2) / solucion6i2(fila2, columna2)

For contador2 = 0 To 6

matNIdiago_izq(fila2, contador2) = solucion6i2(columna2, contador2) - valor2 * solucion6i2(fila2, contador2)

Next

End If

End If

Next

Next

solucion7i2() = matNIdiago_izq()


' calculo de la solucion (X)
' -----------------------------

'como tenemos un sistema en el cual la matriz N aparece diagonalizada, la solucion es inmediata:

' X = I'/N'



ReDim matX_izq2(5)
ReDim solucion8i2(5)

For fila2 = 0 To 5 ' la matriz tiene dimension 4x1

matX_izq2(fila2) = solucion7i2(fila2, 6) / solucion7i2(fila2, fila2)

Next

solucion8i2() = matX_izq2()

------------------------------------------------

la matriz solucion4d2() seria la matriz normal
la matriz solucion4d2() seria la matriz de T. I.

revisando los datos, he comprobado que la matriz ampliada sin diagonalizar es correcta, pero al diagonalizar no me sale y ahi esta el error.

Por ejemplo, para una matriz ampliada con valores los siguientes:

6388 1009 0 0 170 0 -4070
1009 3160 0 0 32 0 539.40
0 0 6388 1009 0 170 7590.688
0 0 1009 3160 0 32 2137.49
170 32 0 0 5 0 -120.30
0 0 170 32 0 5 226.969


La matriz diagonalizada me daria los valores siguientes, que a simple vista se ve que no son correctos puesto que no es diagonal:

-17.882 2.3235 0 0 0 0 -0.58
12.343 -461.75 0 0 0 0 -204.59
0 0 -17.8 2.32 0 0 3.714
0 0 12.34 -461.75 0 0 -107.01
-15778.5 0 0 0 -461.75 0 12419.8421
0 0 -15778.5 0 0 -461.75 -20275.75




No se si saldran descolocadas las columnas, la matriz es 6x7

El programa no da errores de calculo puesto si se consideraran como validas estos datos funciona hasta el final sin problemas, pero claro esta los resultados son erroneos.


Gracias

Salu2



mena
19 de Enero del 2004
no entiendi muy bien porque la matriz sale toda desalineada en la pagina pero creo que tu error esta al final cuando haces la division X=1/N creo que no se calcula como tu la tienes checalo

maya
19 de Enero del 2004
hola,


lo de las matrices desalineadas no es ningun pproblema, lo puse porque en las dos matrices numericas de ejemplo (son la matriz ejemplo que introduje yo al ejecutar el programa, y la que me resulto del calculo) al escribirlas en esta pagina salian un poco desordenada las columnas....

El problema esta en el bucle anterior, cuando se calcula la matNIdiago_dcha2()

ya deberia quedar todo ceros menos la diagonal y no lo hace

Salu2