Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using MathNet.Numerics.LinearAlgebra;
- using MathNet.Numerics.LinearAlgebra.Double;
- using System.Globalization;
- namespace InverseMatrix
- {
- class Program
- {
- static string FindInverse(string[] args)
- {
- var matStr = Console.ReadLine();
- var splMat = matStr.Split(" \\\\ ");
- var dim = splMat.Length;
- var mat = new double[dim, dim];
- for (var row = 0; row < dim; row++)
- {
- var rowContents = splMat[row].Split(" & ").Select(x => double.Parse(x)).ToArray();
- for (var col = 0; col < dim; col++)
- mat[row, col] = rowContents[col];
- }
- Matrix<double> A = DenseMatrix.OfArray(mat);
- var B = A.Inverse();
- var answer = "";
- var invMat = B.ToRowArrays();
- for (var i = 0; i < invMat.GetLength(0); i++)
- {
- for (var k = 0; k < invMat[i].Length; k++)
- {
- if (double.IsNaN(invMat[i][k]) || double.IsInfinity(invMat[i][k]))
- {
- return "unsolvable";
- }
- }
- }
- for (var i = 0; i < invMat.GetLength(0); i++)
- {
- var row = new string[invMat[i].Length];
- for (var k = 0; k < invMat[i].Length; k++)
- {
- row[k] = invMat[i][k].ToString(CultureInfo.InvariantCulture);
- }
- answer += string.Join(" & ", row);
- if (i != invMat.GetLength(0) - 1)
- answer += " \\\\ ";
- }
- return answer;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement