Возврат значения из матрицы в функции - PullRequest
0 голосов
/ 09 марта 2019

У меня проблема с моей функцией, поскольку она не дает мне подходящего значения из Matrix MB.Функция предназначена для вычисления обратной матрицы.Каждый раз, когда я нажимаю на кнопку, Label1.text показывает «0», что не является правильным числом.Можете ли вы помочь мне выяснить, что я сделал здесь неправильно, чтобы получить правильное значение для обратной матрицы jA при jA (1,1)

Public Class Form1
Function MatrixInverse(ma(,), cf, c) As Double
    Dim JJ = 0
    Dim J = 0
    Dim L = 0
    Dim K = 0
    Dim F = 0
    Dim D As Double = 0
    Dim EA As Double = 0.0
    Dim i
    i = ma.GetLength(0)

    J = 0
    JJ = 0
    Dim MB(i, i)
    While JJ < i
        While J < i
            If J = JJ Then
                MB(JJ, J) = 1
            Else
                MB(JJ, J) = 0
            End If
            J = J + 1
        End While
        JJ = JJ + 1
    End While
    JJ = 0
    J = 0

    While JJ < i

        While J < i

            D = 1 / ma(JJ, JJ)
            L = JJ
            While K < i

                ma(L, K) = ma(L, K) * D
                MB(L, K) = MB(L, K) * D

                K = K + 1
            End While

            EA = ma(J, JJ)

            If J <> JJ Then
                F = 0
                While F < i
                    ma(J, F) = ma(J, F) - (EA * ma(JJ, F))
                    MB(J, F) = MB(J, F) - (EA * MB(JJ, F))
                    F = F + 1
                End While

            End If

            J = J + 1

        End While
        F = 0
        EA = 0
        D = 0
        K = 0
        J = 0
        JJ = JJ + 1
    End While
    Return MB(cf, c)

End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim jA(3, 3)
    jA = {{11, 4, 12, 5}, {7, 5, 6, 2.1}, {13, 14, 10, 8.1}, {3.1, 2, 1.09, 3.4}}

    Label1.Text = MatrixInverse(jA, 1, 1)

End Sub

Конечный класс

1 Ответ

0 голосов
/ 09 марта 2019

Я нашел свою ошибку.Я просто забыл добавить 1 единственную строку: сброс J на ​​0 до объявления 1 на jj:

While JJ < i
    While J < i
        If J = JJ Then
            MB(JJ, J) = 1
        Else
            MB(JJ, J) = 0
        End If
        J = J + 1
    End While
     # J = 0 #
    JJ = JJ + 1
End While
...