Det har du bestemt ikke ret i. At invertere en matrice er ikke lige til og ikke noget man bare lige koder. ( Ihvertfald hvad jeg husker fra matematisk analyse 3)
Det ville jo være oplagt at bruge et andet program end VB til at håndtere vektorer og matricer - fx. Matlab (der jo er som skabt til det), Matcad osv. Hvis det kan være en løsning at bruge et andet program, er der også shareware, fx. http://members.xoom.virgilio.it/lis/einin.html
VB kan IKKE som standard håndterer macricer. Men måske er der allerede skrevet fx. et classmodule, der kan - men har ikke kunne finde noget på nettet :o(
Her er en procedure fra ovennævnte henvisning: Public Function MatrixInv(a As Variant) As Variant On Error GoTo errHandler s = MatrixDet(a) If IsNull(s) Then GoTo errHandler If s = 0 Then MatrixInv = Null Exit Function End If lb = LBound(a) ub = UBound(a) ReDim IA(lb To ub, lb To ub) As Variant ReDim sm(lb To ub - 1, lb To ub - 1) As Variant
For v = lb To ub For w = lb To ub le = 0 For x = lb To ub - 1 ce = 0 For y = lb To ub - 1 If v = x Then le = 1 If y = w Then ce = 1 sm(x, y) = a(x + le, y + ce) Next y Next x IA(w, v) = (-1) ^ (w + v) * MatrixDet(sm) / s Next w Next v MatrixInv = IA() Exit Function errHandler: MatrixInv = Null Exit Function End Function
Du får dog også brug for at kunne udregne determinanten af en matrix. Det sker her: (igen fra ovenstående henvisning)
Public Function MatrixDet(ByVal a As Variant) As Variant On Error GoTo errH lb = LBound(a) ub = UBound(a) MatrixDet = 1 For i = lb To ub - 1 If a(i, i) = 0 Then FGOS = 0 For L = i + 1 To ub If a(L, i) <> 0 Then For M = lb To ub Q = a(L, M) a(L, M) = a(i, M) a(i, M) = Q Next M MatrixDet = -MatrixDet FGOS = -1 Exit For 'L' End If Next L If FGOS <> -1 Then MatrixDet = 0 End If If MatrixDet = 0 Then Exit Function For j = i + 1 To ub t = a(i, j) / a(i, i) For k = lb To ub a(k, j) = a(k, j) - a(k, i) * t Next k Next j Next i For i = lb To ub MatrixDet = MatrixDet * a(i, i) Next i Exit Function errH: MatrixDet = Null Exit Function End Function
Arne-V-->Du har helt ret, men for små matricer vil det være brugbart, hvis determinanten ikke er tæt på 0, og jeg har ikke kunnet finde andet, der er gratis. Det er jo lidt besværligt lave det ordentligt.
Så skulle du have lukket spørgsmålet forlængst. Jeg brugte da lidt tid på at prøve at besvare det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.