Zo zadanej štvorcovej matice 3x3 program vypočita pomocou metódy determinantov inverznú maticu 3x3 (ak existuje). Podmienka existencie inverznej matice je daná determinantom vstupnej (zadanej) matice. V prílohe sa nachádza DLL a jednoduchá Windows form aplikácia.
A - štovrcová matica veľkosti 3x3
|A| - determinant matice
A-1 - inverzná matica

Pričom, ak |A| = 0 k matici A neexistuje inverzná matica.
Zdrojový kód:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MathOperations
{
public class Matrix
{
public bool InverseMatrixCalc(out string errorMessage, double[,] inputMatrix, out double[,] inverseMatrix)
{
errorMessage = "";
//|inputMatrix[0,0] inputMatrix[0,1] inputMatrix[0,2]|-1
//|inputMatrix[1,0] inputMatrix[1,1] inputMatrix[1,2]|
//|inputMatrix[2,0] inputMatrix[2,1] inputMatrix[2,2]|
inverseMatrix = new double[3, 3];
try
{
if (inputMatrix.Length != 9 || inputMatrix.Rank != 2)
{
errorMessage = "Vstupna matica ma nespravnu velkost.";
return false;
}
//DET = a11(a33a22-a32a23)-a21(a33a12-a32a13)+a31(a23a12-a22a13)
double DET = inputMatrix[0,0] * (inputMatrix[2,2] * inputMatrix[1,1]
- inputMatrix[2,1] * inputMatrix[1,2])
- inputMatrix[1,0] * (inputMatrix[2,2] * inputMatrix[0,1]
- inputMatrix[2,1] * inputMatrix[0,2])
+ inputMatrix[2,0] * (inputMatrix[1,2] * inputMatrix[0,1]
- inputMatrix[1,1] * inputMatrix[0,2]);
//podmienka pre vypocet inverznej matice
if (DET == 0)
{
errorMessage = "K zadanej vstupnej matici neexistuje inverzna matica.";
return false;
}
DET = 1 / DET;
//| a11 a12 a13 |-1 | a33a22-a32a23 -(a33a12-a32a13) a23a12-a22a13 |
//| a21 a22 a23 | = 1/DET * | -(a33a21-a31a23) a33a11-a31a13 -(a23a11-a21a13)|
//| a31 a32 a33 | | a32a21-a31a22 -(a32a11-a31a12) a22a11-a21a12 |
inverseMatrix[0, 0] = DET * (inputMatrix[2, 2] * inputMatrix[1, 1]
- inputMatrix[2, 1] * inputMatrix[1, 2]);
inverseMatrix[0, 1] = DET * (-1 * (inputMatrix[2, 2] * inputMatrix[0, 1]
- inputMatrix[2, 1] * inputMatrix[0, 2]));
inverseMatrix[0, 2] = DET * (inputMatrix[1, 2] * inputMatrix[0, 1]
- inputMatrix[1, 1] * inputMatrix[0, 2]);
inverseMatrix[1, 0] = DET * (-1 * (inputMatrix[2, 2] * inputMatrix[1, 0]
- inputMatrix[2, 0] * inputMatrix[1, 2]));
inverseMatrix[1, 1] = DET * (inputMatrix[2, 2] * inputMatrix[0, 0]
- inputMatrix[2, 0] * inputMatrix[0, 2]);
inverseMatrix[1, 2] = DET * (-1 * (inputMatrix[1, 2] * inputMatrix[0, 0]
- inputMatrix[1, 0] * inputMatrix[0, 2]));
inverseMatrix[2, 0] = DET * (inputMatrix[2, 1] * inputMatrix[1, 0]
- inputMatrix[2, 0] * inputMatrix[1, 1]);
inverseMatrix[2, 1] = DET * (-1 * (inputMatrix[2, 1] * inputMatrix[0, 0]
- inputMatrix[2, 0] * inputMatrix[0, 1]));
inverseMatrix[2, 2] = DET * (inputMatrix[1, 1] * inputMatrix[0, 0]
- inputMatrix[1, 0] * inputMatrix[0, 1]);
}
catch (Exception ex)
{
errorMessage = ex.Message;
return false;
}
return true;
}
}
}







