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 Function
Tä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 Function
tä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.