[?] Metodo de Potencias para calculo de valor caractetistico y vector asociado

Iniciado por .:: KsV ::., 26 Enero 2016, 21:40 PM

0 Miembros y 1 Visitante están viendo este tema.

.:: KsV ::.

Nesesito ayuda con el metodo de potencias para sacar un valor caracteristico y su vector asociado de una matriz cuadrada en este caso es una de 3x3 


https://es.m.wikipedia.org/wiki/Método_de_las_potencias



Edto ea lo que tengo pero por alguna razon  no sigue asiendo interaciones

Código (vb) [Seleccionar]
'Metodo de Potencias para encontrar
'el maximo valor caracteristico
'y su vector asociado


'Ingresando la siguiente matriz

'1 2 3
'4 5 6
'1 1 1

'Debe dar como resultado

'lambda 1 = 7.7720018727
'Vector asiciado:
'0.3860009363
'1.0000000000
'0.2046663546

'Pedir una matriz(a) 3 x 3 y la multiplica por otra matriz(b) aleatoria
'de 3 x 1 dando como resultado una matriz(c) de 3 x 1 dividir la matriz(c)
'entre el maximo de dicha matriz genrando otra matriz(d) de 3x1.calcular
'el error relativo q seria el numero maximo de la matriz(d) menos el
'numero maximo anterior si estes es menor a 0.0000000001 imprimir el
'ultimo valor maximo  y la ultima matriz dividida   


Dim A(50, 50) ,B(50, 50), c(50,50)
Dim n,i,j,k,nn,NuMax

wscript.echo  "Ingrese Los Elementos De La Matriz A  " & vbLf & ""
For i  = 1 To 3
   For j  = 1 To 3
      wscript.echo "Elemento", i, j
      A(i, j) = Wscript.StdIn.ReadLine
   Next
Next
'genera matriz aleatoria de ceros y unos
for i = 1 to 3
   if i = 1 then
      b(i,1) = 1
   else   
      RAndomize()
      b(i, 1) = Mid("01", Int(Rnd * 2) + 1, 1)
   end if
next

do
'multiplica la matriz a*b y
'almacena el resultado en c
For i  = 1 To 3
   For j  = 1 To 1
      For k  = 1 To 3
          C(i, j) = C(i, j) + (A(i, k) * B(k, j))
      next
   Next
Next

'busca el valor mas grande
'en vector c
NuMax = c(1,1)
for i = 1 to 3
    if c(i,1)>NuMax then
       NuMax = c(i,1)
    end if   
next

'divide cada uno de los componentes
'del vector c entre el maximo de dicho vector
for i = 1 to 3
   for j = 1 to 3
      b(i,j) = c(i,j)/NuMax
   next
next

'error:: numero maximo - el anterior
err = NuMax-err
if round(err,10) <0.000000001 then ' Si el error es menor a  0.000000001  termina e imprimeresultados
exit do
end if
loop

'para comprobar que lambda y el vector asociado esta bien
'multiplicar la matriz(a) ingesada y multiplicarla por
'la matriz resultante debe dar

'0
'0
'0
'MatrizOriginal * VectorAsociado = 0 ok

wscript.echo "Lambda1 = " & NuMax & vbLf & "Vector Asociado:" & vbLf & imprimir(b)



function Imprimir(c)
M = ""
For i  = 1 To 3
    For j  = 1 To 1
      M = M & C(i, j) & " "
    Next
   M = M & vbLf
Next
imprimir = M & vbLf
End function
No confíes en aquel que una vez te defraudó.... William Shakespeare