Advertisement
anon20016

Untitled

Oct 29th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 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.  
  17. void Progonka(vector<vector<double> > a) {
  18. vector<double> A(a.size());
  19. vector<double> B(a.size());
  20. vector<double> y(a.size());
  21. y[0] = a[0][0];
  22. A[0] = -a[0][1] / a[0][0];
  23. B[0] = a[0][a[0].size() - 1] / a[0][0];
  24. for (int i = 1; i < a.size() - 1; i++) {
  25. y[i] = a[i][i] + a[i][i - 1] * A[i - 1];
  26. A[i] = -a[i][i + 1] / y[i];
  27. B[i] = (a[i][a[i].size() - 1] - a[i][i - 1] * B[i - 1]) / y[i];
  28. }
  29. int l = a.size() - 1;
  30. y[l] = a[l][l] + a[l][l - 1] * A[l - 1];
  31. B[l] = (a[l][a[l].size() - 1] - a[l][l - 1] * B[l - 1]) / y[l];
  32. vector<double> ans(a.size());
  33.  
  34. ans[l] = B[l];
  35. for (int i = l - 1; i >= 0; i--) {
  36. ans[i] = A[i] * ans[i + 1] + B[i];
  37. }
  38.  
  39. printf("vector A: ");
  40. for (int i = 0; i < A.size(); i++) {
  41. printf("%.2f ", A[i]);
  42. }
  43. printf("\nvector B: ");
  44. for (int i = 0; i < B.size(); i++) {
  45. printf("%.2f ", B[i]);
  46. }
  47.  
  48.  
  49. for (int i = 0; i < ans.size(); i++) {
  50. printf("%.2f ", ans[i]);
  51. }
  52. }
  53.  
  54. vector<double> mul(vector<vector<double> > a, vector<double> b) {
  55. vector<double> c(b.size());
  56. for (int i = 0; i < b.size(); i++) {
  57. for (int q = 0; q < b.size(); q++) {
  58. c[i] += b[q] * a[i][q];
  59. }
  60. }
  61. return c;
  62. }
  63.  
  64. vector<double> add(vector<double> a, vector<double> b) {
  65. vector<double> c(a.size());
  66. for (int i = 0; i < a.size(); i++) {
  67. c[i] = a[i] + b[i];
  68. }
  69. return c;
  70. }
  71.  
  72. void Iter(vector < vector < double> > a)
  73. {
  74. int n = a.size();
  75. vector<vector<double> > A(n, vector<double>(n, 0));
  76. vector<double> B(n);
  77. vector<double> x(n);
  78.  
  79. for (int i = 0; i < n; i++) {
  80. B[i] = a[i][a[i].size() - 1] / a[i][i];
  81. for (int j = 0; j < n; j++) {
  82. if (i == j) {
  83. A[i][j] = 0;
  84. }
  85. else
  86. A[i][j] = -a[i][j] / a[i][i];
  87. }
  88. }
  89. x = B;
  90. for (int q = 0; q < 10; q++) {
  91. x = add(B, mul(A, x));
  92. }
  93.  
  94. for (int i = 0; i < x.size(); i++) {
  95. printf("%.2f ", x[i]);
  96. }
  97. }
  98.  
  99.  
  100.  
  101. int main() {
  102. int n, m;
  103. cin >> n >> m;
  104. vector<vector<double> > a(n, vector<double>(m));
  105.  
  106. for (int i = 0; i < n; i++) {
  107. for (int j = 0; j < m; j++) {
  108. cin >> a[i][j];
  109. }
  110. }
  111.  
  112. Iter(a);
  113. //Progonka(a);
  114. }
  115.  
  116.  
  117. /*
  118.  
  119. 3 4
  120. 2 -1 0 3
  121. 5 4 2 6
  122. 0 1 -3 2
  123.  
  124. 2 3
  125. 2 3 5
  126. 3 2 7
  127.  
  128.  
  129. 3 4
  130. 10 1 1 12
  131. 2 10 1 13
  132. 2 2 10 14
  133.  
  134.  
  135.  
  136.  
  137. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement