ouble [,] multiplication (double [,] matrix1, double [,] matrix2)//Множення
{(matrix1.GetLength (1)!=matrix2.GetLength (0)) throw new Exception ( Матриці можна перемножити ); [,] r=new double [matrix1.GetLength (0 ), matrix2.GetLength (1)]; (int i=0; i lt; matrix1.GetLength (0); i ++)
{(int j=0; j lt; matrix2.GetLength (1); j ++)
{(int k=0; k lt; matrix2.GetLength (0); k ++)
{[i, j] +=matrix1 [i, k] * matrix2 [k, j];
}
}
} r;
} static double [,] addition (double [,] matrix1, double [,] matrix2)//Додавання
{[,] r=new double [matrix1.GetLength (0), matrix2.GetLength (1)]; (matrix1.GetLength (0)!=matrix2.GetLength (0) amp; amp ; matrix1.GetLength (1)!=matrix2.GetLength (1)) throw new Exception ( Матриці не можна скласти ); (int i=0; i lt; matrix1.GetLength (0); i ++)
{(int j=0; j lt; matrix2.GetLength (1); j ++)
{[i, j]=matrix1 [i, j] + matrix2 [i, j];
}
} r;
} static double [,] subtraction (double [,] matrix1, double [,] matrix2)//Віднімання
{[,] r=new double [matrix1.GetLength (0), matrix2.GetLength (1)]; (matrix1.GetLength (0)!=matrix2.GetLength (0) amp; amp ; matrix1.GetLength (1)!=matrix2.GetLength (1)) throw new Exception ( Матриці не можна відняти ); (int i=0; i lt; matrix1.GetLength (0); i ++)
{(int j=0; j lt; matrix2.GetLength (1); j ++)
{[i, j]=matrix1 [i, j] - matrix2 [i, j];
}
} r;
}
# endregion
# region//Транспонування, зворотна, визначник
public static double [,] Transpose (double [,] mtx)
{[,] TransposeMatrix=new double [mtx.GetLength (1), mtx.GetLength (0)]; (int i=0; i lt; TransposeMatrix.GetLength (0); i ++) (int j=0; j lt; TransposeMatrix.GetLength (1); j ++) [i, j]=mtx [j, i]; TransposeMatrix;
} static double [,] Minor (double [,] matrix, int iRow, int iCol)
{[,] minor=new double [matrix.GetLength (0) - 1, matrix.GetLength (1) - 1]; m=0, n=0; (int i=0; i lt; matrix.GetLength (0); i ++)
{(i == iRow);=0; (int j=0; j lt; matrix.GetLength (1); j ++)
{(j == iCol); [m, n]=matrix [i, j]; ++;
} ++;
} minor;
} static double Determinent (double [,] matrix)
{det=0; (matrix.GetLength (0)!=matrix.GetLength (1))
MessageBox.Show ( матриця не квадратна );
if (matrix.GetLength (0) == 1) matrix [0, 0]; (int j=0; j lt; matrix.GetLength (1); j ++) +=(matrix [ 0, j] * Determinent (Minor (matrix, 0, j)) * (int) System.Math.Pow (- 1, 0 + j)); det;
} static double [,] Adjoint (double [,] matrix)
{(matrix.GetLength (0)!=matrix.GetLength (1)) new Exception ( матриця не квадратна ); [,] AdjointMatrix=new double [matrix.GetLength (0) , matrix.GetLength (1)]; (int i=0; i lt; matrix.GetLength (0); i ++) (int j=0; j lt; matrix.GetLength (1); j ++) [i, j] =Math.Pow (- 1, i + j) * Determinent (Minor (matrix, i, j));=Transpose (AdjointMatrix); AdjointMatrix;
} static double [,] Inverse (double [,] matrix)
{[,] temp=Adjoint (matrix); [,] temp1=new double [temp.GetLength (0), temp.GetLength (1)];
if (Determinent (matrix) == 0) .Show ( Матриця вироджена, зворотної не існує );
for (int i=0; i lt; temp.GetLength (0); i ++)
{(int j=0; j lt; temp.GetLength (1); j ++)
{[i, j]=Math.Round (temp [i, j]/Determinent (matrix), 3);
}
} temp1;
}
# endregion
}