Olen tässä kirjoittamassa koodivinkkiä putkaan. Aiheena on matriisi kirjasto. Se perustuu kirjoittamaani oppaaseen.
Häpeäkseni täytyy myöntää, että jouduin tässä vinkissä käyttämään erääseen algoritmiin ulkopuolista c++ koodia.
Olen yrittänyt tämän koodin parhaani mukaan kääntää vb.NET:lle
Tämän sain siis aikaan:
'palauttaa alemman matriisin pisteen row ja col ympäriltä. Anteeksi sekavaa golto rakennetta.
Public Function GetMinor(ByVal RowSpot As Integer, ByVal ColSpot As Integer) As Matrix
Dim i, j, l, k As Integer
Dim temp As Matrix
temp = New Matrix(0.0, m_nRows - 1, m_nCols - 1)
Do While i < m_nRows
jatko:
If (i = RowSpot) Then
i += 1
GoTo jatko
End If
j = 0
l = 0
alku2:
Do While j < m_nCols
If (j = ColSpot) Then
j += 1
GoTo alku2
End If
temp.m_Data(k, l) = m_Data(i, j)
l += 1
j += 1
Loop
i += 1
k += 1
Loop
Return temp
End FunctionTässä on kuitenkin jokin vika, sillä se ei toimi alkuperäisen c++ koodin lailla.
Tässä c++ koodi
//returns minor around spot Row,Col
//returns a static Matrix object
Matrix& Matrix::GetMinor(const int RowSpot, const int ColSpot) const
{
static Matrix temp;
temp = Matrix(0.0, m_nRows-1, m_nCols-1);
for(int i=0, k=0; i<m_nRows; ) {
if(i == RowSpot) {
++i;
continue;
}
for(int j=0, l=0; j<m_nCols; ) {
if(j == ColSpot) {
++j;
continue;
}
temp.m_pData[k][l] = m_pData[i][j];
++l;
++j;
}
++i;
++k;
}
return temp;
}Toivottavasti joku osaa auttaa.
' laskee matriisin determinantin
Public Function Determinant() As Double
If m_nRows <> m_nCols Then
MsgBox("Ei voi ottaa determinaattia muusta, kuin neliömatriisista")
Return Nothing
End If
Dim sum As Double = 0
If m_nRows = 1 Then
Return ((m_Data(0, 0) * m_Data(1, 1)) - (m_Data(1, 0) * m_Data(0, 1)))
End If
Dim q As Integer
For q = 0 To m_nCols
Dim NewMinor As Matrix = GetMinor(0, q)
sum += (Math.Pow(-1, q) * (m_Data(0, q) * NewMinor.Determinant()))
NewMinor = Nothing
Next
Return sum
End Functiontässä on muuten koodi myös determinantille(GetMinor:ia käytetään siis tämän kanssa)
Edit: Äsh. Olisi voinut muokata. Sori
Aihe on jo aika vanha, joten et voi enää vastata siihen.