Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4.  
  5. using namespace std;
  6.  
  7. // Вывод системы уравнений
  8. void sysout(double **a, double *y, int n)
  9. {
  10. for (int i = 0; i < n; i++)
  11. {
  12. for (int j = 0; j < n; j++)
  13. {
  14. cout << a[i][j] << "*x" << j;
  15. if (j < n - 1)
  16. cout << " + ";
  17. }
  18. cout << " = " << y[i] << endl;
  19. }
  20. return;
  21. }
  22. double * gauss(double **a, double *y, int n)
  23. {
  24. double *x, max;
  25. int k, index;
  26. const double eps = 0.00001; // точность
  27. x = new double[n];
  28. k = 0;
  29. while (k < n)
  30. {
  31. // Поиск строки с максимальным a[i][k]
  32. max = abs(a[k][k]);
  33. index = k;
  34. for (int i = k + 1; i < n; i++)
  35. {
  36. if (abs(a[i][k]) > max)
  37. {
  38. max = abs(a[i][k]);
  39. index = i;
  40. }
  41. }
  42. // Перестановка строк
  43. if (max < eps)
  44. {
  45. // нет ненулевых диагональных элементов
  46. cout << "Решение получить невозможно из-за нулевого столбца ";
  47. cout << index << " матрицы A" << endl;
  48. return 0;
  49. }
  50. for (int j = 0; j < n; j++)
  51. {
  52. double temp = a[k][j];
  53. a[k][j] = a[index][j];
  54. a[index][j] = temp;
  55. }
  56. double temp = y[k];
  57. y[k] = y[index];
  58. y[index] = temp;
  59. // Нормализация уравнений
  60. for (int i = k; i < n; i++)
  61. {
  62. double temp = a[i][k];
  63. if (abs(temp) < eps) continue; // для нулевого коэффициента пропустить
  64. for (int j = 0; j < n; j++)
  65. a[i][j] = a[i][j] / temp;
  66. y[i] = y[i] / temp;
  67. if (i == k) continue; // уравнение не вычитать само из себя
  68. for (int j = 0; j < n; j++)
  69. a[i][j] = a[i][j] - a[k][j];
  70. y[i] = y[i] - y[k];
  71. }
  72. k++;
  73. }
  74. // обратная подстановка
  75. for (k = n - 1; k >= 0; k--)
  76. {
  77. x[k] = y[k];
  78. for (int i = 0; i < k; i++)
  79. y[i] = y[i] - a[i][k] * x[k];
  80. }
  81. return x;
  82. }
  83. int main()
  84. {
  85. int i;
  86.  
  87. double **a, *y, *x;
  88. int n;
  89.  
  90. system("chcp 1251");
  91. system("cls");
  92. cout << "Введите порядок матрицы: ";
  93. cin >> n;
  94. a = new double*[n];
  95. y = new double[n];
  96. for (int i = 0; i < n; i++)
  97. {
  98. a[i] = new double[n];
  99. for (int j = 0; j < n; j++)
  100. {
  101. cout << "a[" << i << "][" << j << "]= ";
  102. cin >> a[i][j];
  103. }
  104. }
  105. for (int i = 0; i < n; i++)
  106. {
  107. cout << "y[" << i << "]= ";
  108. cin >> y[i];
  109. }
  110. sysout(a, y, n);
  111. x = gauss(a, y, n);
  112. for (int i = 0; i < n; i++)
  113. cout << "x[" << i << "]=" << x[i] << endl;
  114. cin.get(); cin.get();
  115. return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement