Advertisement
anon20016

Untitled

Oct 29th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void print(vector<vector<double> > a) {
  7. for (int i = 0; i < a.size(); i++) {
  8. for (int j = 0; j < a[i].size(); j++) {
  9. printf("%.3f ", a[i][j]);
  10. }
  11. cout << '\n';
  12. }
  13. cout << '\n';
  14. }
  15.  
  16. vector<double> Gauss(vector<vector<double> > a) {
  17. vector<double> res(a.size());
  18.  
  19. // Приведение к верхнетреугольному виду
  20. for (int i = 0; i < a.size(); i++) {
  21. if (a[i][i] == 0) {
  22. for (int j = i + 1; j < a.size(); j++) {
  23. if (a[i][j] != 0) {
  24. swap(a[i], a[j]);
  25. break;
  26. }
  27. }
  28. }
  29. for (int q = i + 1; q < a.size(); q++) {
  30. double k = a[q][i] / a[i][i];
  31. for (int j = 0; j < a[i].size(); j++) {
  32. a[q][j] -= a[i][j] * k;
  33. }
  34. }
  35. print(a);
  36. }
  37. // Решение СЛАУ
  38. for (int i = a.size() - 1; i >= 0; i--) {
  39. if (a[i][i] == 0) {
  40. vector<double> t;
  41. return t;
  42. }
  43. double x = a[i][a[i].size() - 1] / a[i][i];
  44. for (int j = i - 1; j >= 0; j--) {
  45. a[j][a[j].size() - 1] -= a[j][i] * x;
  46. }
  47. res[i] = x;
  48. }
  49.  
  50. return res;
  51. }
  52.  
  53. vector<vector<double> > trans(vector<vector<double> > a) {
  54. vector<vector<double> > b(a.size(), vector<double>(a[0].size(), 0));
  55. for (int i = 0; i < a.size(); i++) {
  56. b[i][i] = 1;
  57. }
  58. int n = a.size();
  59. for (int i = 0; i < a.size(); i++) {
  60. double k = a[i][i];
  61. for (int j = 0; j < n; j++) {
  62. a[i][j] = a[i][j] / k;
  63. b[i][j] = b[i][j] / k;
  64. }
  65. for (int q = i + 1; q < a.size(); q++) {
  66. double k = a[q][i] / a[i][i];
  67. for (int j = 0; j < a[i].size(); j++) {
  68. a[q][j] -= a[i][j] * k;
  69. b[q][j] -= b[i][j] * k;
  70. }
  71. }
  72. }
  73.  
  74. for (int i = 1; i < n; i++) {
  75. for (int q = i - 1; q >= 0; q--) {
  76. double k = a[q][i] / a[i][i];
  77. for (int j = 0; j < a[i].size(); j++) {
  78. a[q][j] -= a[i][j] * k;
  79. b[q][j] -= b[i][j] * k;
  80. }
  81. }
  82. }
  83.  
  84. return b;
  85. }
  86.  
  87. int main() {
  88. int n, m;
  89. cin >> n >> m;
  90. vector<vector<double> > a(n, vector<double>(m));
  91.  
  92. for (int i = 0; i < n; i++) {
  93. for (int j = 0; j < m; j++) {
  94. cin >> a[i][j];
  95. }
  96. }
  97.  
  98. vector<double> ans = Gauss(a);
  99. if (ans.size() == 0) {
  100. cout << "No solution!";
  101. }
  102. else {
  103. for (int i = 0; i < ans.size(); i++) {
  104. printf("x%d = %.3f\n", i, ans[i]);
  105. }
  106. }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement