Guest User

Untitled

a guest
Dec 13th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.IO;
  4. using System.Globalization;
  5.  
  6. namespace Matrix
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. string dataName ="data" + Console.ReadLine();
  13. dataName += ".txt";
  14.  
  15. var data = File.ReadAllLines(dataName);
  16.  
  17. var numberOfur = int.Parse(data[0]);
  18.  
  19. var mathrix = new double[numberOfur, numberOfur];
  20.  
  21. var sqrs = new double[numberOfur];
  22.  
  23. InitialiseData(mathrix, sqrs, data, numberOfur);
  24.  
  25. var determinant = CalculateDeterminat(mathrix, sqrs);
  26.  
  27. var answers = CalculateAnswers(mathrix, sqrs, determinant);
  28.  
  29. Int16 i = 0;
  30. Console.WriteLine(dataName);
  31. foreach (var answer in answers)
  32. {
  33. Console.WriteLine("x[{0}] = {1}",i,Math.Round(answer,3));
  34. ++i;
  35. }
  36. Console.ReadKey();
  37. }
  38.  
  39. private static void InitialiseData(double[,] matrix, double[] sqrs, string[] data, int numberOfur)
  40. {
  41. for (int i = 1; i < numberOfur + 1; i++)
  42. {
  43. var dataInLine = data[i].Split().Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray();
  44. for (int j = 0; j < numberOfur; j++)
  45. {
  46. matrix[i - 1, j] = dataInLine[j];
  47. }
  48. sqrs[i - 1] = dataInLine[numberOfur];
  49. }
  50. }
  51.  
  52. private static double[] CalculateAnswers(double[,] mathrix, double[] sqrs, double determinant)
  53. {
  54. var answers = new double[sqrs.Length];
  55. for (int i = 0; i < sqrs.Length; i++)
  56. {
  57. var cahce = new double[sqrs.Length];
  58. for (int j = 0; j < sqrs.Length; j++)
  59. {
  60. cahce[j] = mathrix[j, i];
  61. mathrix[j, i] = sqrs[j];
  62. }
  63. var matrix = new double[sqrs.Length, sqrs.Length];
  64. for (int a = 0; a < sqrs.Length; a++)
  65. for (int b = 0; b < sqrs.Length; b++)
  66. matrix[a, b] = mathrix[a, b];
  67. answers[i] = CalculateDeterminat(matrix, new double[sqrs.Length]) / determinant;
  68. for (int j = 0; j < sqrs.Length; j++)
  69. {
  70. mathrix[j, i] = cahce[j];
  71. }
  72. }
  73. return answers;
  74. }
  75.  
  76. private static double CalculateDeterminat(double[,] matrix, double[] sqrs)
  77. {
  78. var determinant = matrix[0, 0];
  79. var index = 0;
  80. while (index < sqrs.Length - 1)
  81. {
  82. for (int i = index; i < sqrs.Length - 1; i++)
  83. {
  84. var delitel = matrix[i + 1, index] / matrix[index, index];
  85. for (int j = 0; j < sqrs.Length; j++)
  86. {
  87. matrix[i + 1, j] -= matrix[index, j] * delitel;
  88.  
  89. }
  90. sqrs[i + 1] -= sqrs[index] * delitel;
  91. }
  92. index++;
  93. determinant *= matrix[index, index];
  94.  
  95. }
  96. return determinant;
  97. }
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment