Guest User

Untitled

a guest
Mar 17th, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. // Решение СЛАУ методом Гауса
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace HM51
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. const int n = 4;
  14. double[,] A = new double[n, n]
  15. {
  16. {0.0, 0.0, 0.0, 1.0},
  17. {0.0, 0.0, 1.0,0.0},
  18. {0.0,1.0, 0.0, 0.0},
  19. {1.0, 0.0, 0.0, 0.0}
  20. };
  21. double[] B = new double[n] { 1.0, 1.0, 1.0, 1.0 };
  22. double[] X = new double[n];
  23. PrintM("Matrix A Vector B", A, B, n);
  24. Gusev(X, A, B, n);
  25. Console.WriteLine("Vecrot X");
  26. for (int i = 0; i < n; i++) Console.WriteLine("{0,8:F2}", X[i]);
  27. Console.ReadKey();
  28. }
  29. //-------------------------------------------------------------------------
  30. static void PrintM(string text, double[,] A, double[] B, int n)
  31. {
  32. Console.WriteLine(text);
  33. for (int i = 0; i < n; i++)
  34. {
  35. for (int g = 0; g < n; g++) Console.Write("{0,8:F2}", A[i, g]);
  36. Console.WriteLine("{0,14:F2}", B[i]);
  37. }
  38. }
  39. //------------------------------------------------------------------------
  40. static void Gusev(double[] x, double[,] z, double[] y, int n)
  41. {
  42. double[,] a = new double[n, n];
  43. Array.Copy(z, a, z.Length);
  44. double[] b = new double[n];
  45. Array.Copy(y, b, y.Length);
  46. PrintM("Matrix A Vector B", a, b, n);
  47. for (int k = 0; k < n - 1; k++) //цыкл перебора столбцов
  48. {
  49. int l = k+1;
  50. while (a[k, k] == 0)
  51. {
  52. for (int i = 0; i <l;i++ ) SdvigStrokiVverh(a, b, l, n);
  53. l += 1;
  54. }
  55. for (int i = k + 1; i < n; i++) //цыкл зануления всех элементов под элементом главной диагонали к текущем столбце
  56. {
  57. double r = a[i, k] / a[k, k];
  58. for (int g = k; g < n; g++) a[i, g] -= r * a[k, g];
  59. b[i] -= r * b[k];
  60. }
  61. PrintM("Gusev", a, b, n);
  62. }
  63. //Вычисление корней системы
  64. x[n - 1] = b[n - 1] / a[n - 1, n - 1];
  65. for (int i = n - 2; i >= 0; i--)
  66. {
  67. double s = 0.0;
  68. for (int g = i + 1; g < n; g++) s += a[i, g] * x[g];
  69. x[i] = (b[i] - s) / a[i, i];
  70. }
  71. }
  72. static void SdvigStrokiVverh(double [,] a,double [] b, int l, int n)
  73. {
  74. for (int i = 0; i < n; i++)
  75. {
  76. double r = a[l,i];
  77. a[l, i] = a[l-1,i];
  78. a[l - 1, i] = r;
  79. }
  80. double s = b[l];
  81. b[l] = b[l - 1];
  82. b[l - 1] = s;
  83. }
  84. }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment