Comment calculer le déterminant d'une matrice NxN C#?Calcul d'un déterminant matriciel NxN en C#
Répondre
Réduisez à la forme triangulaire supérieure, puis créez une boucle imbriquée où vous multipliez toutes les valeurs à la position i == j ensemble. Voilà.
Il n'a même pas besoin d'être une boucle imbriquée, parce que si vous le faites pour les positions (i, j) où i == j vous pouvez le faire pour toutes les positions (i, i). – JAB
Bon point, +1. – Brandi
Le résultat que vous calculez peut être le négatif du déterminant. Vous devez prendre le produit de la diagonale primaire, puis multiplier par (-1)^[nombre de permutations de lignes utilisées pour obtenir la forme triangulaire supérieure] – Kevin
L'OP a posté another question demandant spécifiquement des matrices 4x4, qui a été fermé en tant que copie exacte de cette question. Eh bien, si vous n'êtes pas à la recherche d'une solution générale mais sont contraints à des matrices 4x4 seul, vous pouvez utiliser cette laide à la recherche, mais essayé et vrai code:
public double GetDeterminant() {
var m = _values;
return
m[12] * m[9] * m[6] * m[3] - m[8] * m[13] * m[6] * m[3] -
m[12] * m[5] * m[10] * m[3] + m[4] * m[13] * m[10] * m[3] +
m[8] * m[5] * m[14] * m[3] - m[4] * m[9] * m[14] * m[3] -
m[12] * m[9] * m[2] * m[7] + m[8] * m[13] * m[2] * m[7] +
m[12] * m[1] * m[10] * m[7] - m[0] * m[13] * m[10] * m[7] -
m[8] * m[1] * m[14] * m[7] + m[0] * m[9] * m[14] * m[7] +
m[12] * m[5] * m[2] * m[11] - m[4] * m[13] * m[2] * m[11] -
m[12] * m[1] * m[6] * m[11] + m[0] * m[13] * m[6] * m[11] +
m[4] * m[1] * m[14] * m[11] - m[0] * m[5] * m[14] * m[11] -
m[8] * m[5] * m[2] * m[15] + m[4] * m[9] * m[2] * m[15] +
m[8] * m[1] * m[6] * m[15] - m[0] * m[9] * m[6] * m[15] -
m[4] * m[1] * m[10] * m[15] + m[0] * m[5] * m[10] * m[15];
}
Il suppose que vous stocker vos données vectorielles dans un réseau de 16 élément appelé _values
(de double
dans ce cas, mais float
fonctionnerait aussi), dans l'ordre suivant:
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15
la méthode standard est LU decomposition. Vous pouvez utiliser une bibliothèque au lieu de la coder vous-même. Je ne sais pas sur C#, mais la norme de 40 ans est LAPACK.
Est-ce que ce sont les devoirs? –
La définition n'est-elle pas suffisante: http://en.wikipedia.org/wiki/Determinant? Lorsque vous avez essayé de l'implémenter sur C#, avez-vous rencontré des problèmes particuliers? –
Donnez-nous le code que vous avez fait jusqu'à présent et nous vous aiderons. Mais nous ne le coderons pas pour vous. –