public sub gauss

3
Public Sub Gauss(N, B, InversaA) ‘ N=N° de columnas y N° de Filas de la Matriz A y Matriz Inversa de A Dim pv As Integer, jc As Integer, I As Integer, J As Integer, k As Integer Dim nv As Integer, M As Integer, jr As Integer, kc As Integer Dim Eps As Double, Eps2 As Double, Det As Double, Tm As Double, R As Double Dim Temp As Double, va As Double Dim A(600, 1200) 'Matriz ampliada A(i,j) k = 0 For I = 1 To N For J = 1 To N A(I, J) = B(I, J) ' k = k + 1 Next J A(I, I + N) = 1 Next I 'Inicialización de inversa For I = 1 To N For J = 1 To N InversaA(I, J) = 0 Next J Next I 'Cálculo Eps = 1 Do While 1 + Eps > 1 Eps = Eps / 2 Loop Eps = Eps * 2 Eps2 = Eps * 2 Det = 1

Upload: rodrigo-alcaino

Post on 16-Sep-2015

212 views

Category:

Documents


0 download

DESCRIPTION

Modulo macro

TRANSCRIPT

Public Sub Gauss(N, B, InversaA)

N=N de columnas y N de Filas de la Matriz A y Matriz Inversa de A

Dim pv As Integer, jc As Integer, I As Integer, J As Integer, k As IntegerDim nv As Integer, M As Integer, jr As Integer, kc As IntegerDim Eps As Double, Eps2 As Double, Det As Double, Tm As Double, R As DoubleDim Temp As Double, va As DoubleDim A(600, 1200)

'Matriz ampliada A(i,j)

k = 0For I = 1 To N For J = 1 To N A(I, J) = B(I, J)' k = k + 1 Next J A(I, I + N) = 1Next I

'Inicializacin de inversa

For I = 1 To NFor J = 1 To NInversaA(I, J) = 0Next JNext I

'Clculo

Eps = 1

Do While 1 + Eps > 1 Eps = Eps / 2 Loop Eps = Eps * 2Eps2 = Eps * 2Det = 1

For I = 1 To N - 1 pv = I For J = I + 1 To N If Abs(A(pv, I)) < Abs(A(J, I)) Then pv = J Next J If pv I Then For jc = 1 To N * 2 Tm = A(I, jc) A(I, jc) = A(pv, jc) A(pv, jc) = Tm Next jc

Det = -Det End If If A(I, I) = 0 Then MsgBox ("La matriz es singular 1"): Exit Sub 'Eliminacin por debajo de la diagonal For jr = I + 1 To N If A(jr, I) 0 Then R = A(jr, I) / A(I, I) For kc = I + 1 To N * 2 Temp = A(jr, kc) A(jr, kc) = A(jr, kc) - R * A(I, kc) If Abs(A(jr, kc)) < Eps2 * Temp Then A(jr, kc) = 0 Next kc End If Next jrNext I

For I = 1 To N Det = Det * A(I, I)Next I

'txtDeter.Text = Det

'MsgBox ("Determinante: " & Det)

'Sustitucin hacia atrs

If A(N, N) = 0 Then MsgBox ("La matriz es singular"): Exit Sub For M = N + 1 To N * 2 A(N, M) = A(N, M) / A(N, N) For nv = N - 1 To 1 Step -1 va = A(nv, M) For k = nv + 1 To N va = va - A(nv, k) * A(k, M) Next k A(nv, M) = va / A(nv, nv) Next nvNext M

k = 0For I = 1 To NFor J = N + 1 To N * 2 InversaA(I, J - N) = A(I, J)' k = k + 1Next JNext I

End Sub