Temabowl

Matrix LU C#

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