Advertisement
anon20016

Untitled

Oct 29th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 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. vector<double> 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. return ans;
  50. }
  51.  
  52. vector<double> mul(vector<vector<double> > a, vector<double> b) {
  53. vector<double> c(b.size());
  54. for (int i = 0; i < b.size(); i++) {
  55. for (int q = 0; q < b.size(); q++) {
  56. c[i] += b[q] * a[i][q];
  57. }
  58. }
  59. return c;
  60. }
  61.  
  62. vector<double> add(vector<double> a, vector<double> b) {
  63. vector<double> c(a.size());
  64. for (int i = 0; i < a.size(); i++) {
  65. c[i] = a[i] + b[i];
  66. }
  67. return c;
  68. }
  69.  
  70. void Iter(vector < vector < double> > a)
  71. {
  72. int n = a.size();
  73. vector<vector<double> > A(n, vector<double>(n, 0));
  74. vector<double> B(n);
  75. vector<double> x(n);
  76.  
  77. for (int i = 0; i < n; i++) {
  78. B[i] = a[i][a[i].size() - 1] / a[i][i];
  79. for (int j = 0; j < n; j++) {
  80. if (i == j) {
  81. A[i][j] = 0;
  82. } else
  83. A[i][j] = -a[i][j] / a[i][i];
  84. }
  85. }
  86. x = B;
  87. for (int q = 0; q < 10; q++) {
  88. x = add(B , mul(A, x));
  89. }
  90.  
  91. for (int i = 0; i < x.size(); i++) {
  92. printf("%.2f ", x[i]);
  93. }
  94. }
  95.  
  96.  
  97.  
  98. int main() {
  99. int n, m;
  100. cin >> n >> m;
  101. vector<vector<double> > a(n, vector<double>(m));
  102.  
  103. for (int i = 0; i < n; i++) {
  104. for (int j = 0; j < m; j++) {
  105. cin >> a[i][j];
  106. }
  107. }
  108.  
  109. Iter(a);
  110. }
  111.  
  112.  
  113. /*
  114.  
  115. 3 4
  116. 2 -1 0 3
  117. 5 4 2 6
  118. 0 1 -3 2
  119.  
  120. 2 3
  121. 2 3 5
  122. 3 2 7
  123.  
  124.  
  125. 3 4
  126. 10 1 1 12
  127. 2 10 1 13
  128. 2 2 10 14
  129.  
  130.  
  131.  
  132.  
  133. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement