Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. double matrix[10010][10010];
  7.  
  8. void buildMatrixForFirst(int n, int m, double hY, double hX)
  9. {
  10. for(int i = 0; i<n;++i)
  11. for(int j=0;j<m;++j)
  12. {
  13. matrix[i * m + j][i * m + j] = 2 / hY / hY;
  14. if(i > 0)
  15. {
  16. matrix[i * m + j][(i - 1) * m + j] = -1 / hX / hX - 1 / hY / hY ;
  17. }
  18. if(i < n - 1)
  19. {
  20. matrix[i * m + j][(i + 1) * m + j] = -1 / hX / hX - 1 / hY / hY ;
  21. }
  22. if(j > 0 && i > 0)
  23. {
  24. matrix[i * m + j][(i - 1) * m + (j - 1)] = -1 / hX / hX / 2;
  25. }
  26. if(j > 0 && i < n - 1)
  27. {
  28. matrix[i * m + j][(i + 1) * m + (j - 1)] = -1 / hX / hX / 2;
  29. }
  30. if(j < m - 1 && i > 0)
  31. {
  32. matrix[i * m + j][(i - 1) * m + (j + 1)] = -1 / hX / hX / 2;
  33. }
  34. if(j < m - 1 && i < n - 1)
  35. {
  36. matrix[i * m + j][(i + 1) * m + (j + 1)] = -1 / hX / hX / 2;
  37. }
  38. matrix[i * m + j][n * m] = 1;
  39. }
  40. }
  41.  
  42. void buildMatrixForSecond(int n, int m, double hY, double hX)
  43. {
  44. for(int i = 0; i<n;++i)
  45. for(int j=0;j<m;++j)
  46. {
  47. matrix[i * m + j][i * m + j] = 2 / hY / hY;
  48. if(i > 0)
  49. {
  50. matrix[i * m + j][(i - 1) * m + j] = -1 / hX / hX - 1 / hY / hY ;
  51. }
  52. if(i < n - 1)
  53. {
  54. matrix[i * m + j][(i + 1) * m + j] = -1 / hX / hX - 1 / hY / hY ;
  55. }
  56. if(j > 0 && i > 0)
  57. {
  58. matrix[i * m + j][(i - 1) * m + (j - 1)] = -1 / hX / hX;
  59. }
  60. if(j < m - 1 && i > 0)
  61. {
  62. matrix[i * m + j][(i - 1) * m + (j + 1)] = -1 / hX / hX;
  63. }
  64. matrix[i * m + j][n * m] = 1;
  65. }
  66. }
  67.  
  68. int now[10000];
  69.  
  70. bool solve(int n)
  71. {
  72. for(int i = 0; i<n;++i)
  73. {
  74. if(abs(matrix[i][i]) < 1e-9)
  75. {
  76. //cout << "LOOOOOOL";
  77. bool find = 0;
  78. for(int j = i + 1; j < n; ++j)
  79. {
  80. if(abs(matrix[j][i]) > 1e-9)
  81. {
  82. find = 1;
  83. for(int u = 0; u < n + 1; ++u)
  84. swap(matrix[i][u], matrix[j][u]);
  85. swap(now[i], now[j]);
  86. break;
  87. }
  88. }
  89. if(!find)
  90. return 0;
  91. }
  92. double div = matrix[i][i];
  93. for(int j=0;j<n + 1;++j)
  94. matrix[i][j] /= div;
  95. for(int j=0;j<n;++j)
  96. {
  97. if(j != i)
  98. {
  99. double mnoj = matrix[j][i];
  100. for(int u = 0; u < n + 1; ++u)
  101. {
  102. matrix[j][u] -= matrix[i][u] * mnoj;
  103. }
  104. }
  105. }
  106. }
  107. return 1;
  108. }
  109.  
  110. double u[10010][10010];
  111. double newU[10010][10010];
  112.  
  113. double nextTurn(int a, int b, double h)
  114. {
  115. double eps = 0;
  116. for (int i = 2; i < a; ++i)
  117. for (int j = 2; j < b; ++j)
  118. {
  119. newU[i][j] = (u[i-1][j] + u[i][j - 1] + u[i+1][j] + u[i][j+1] + h*h) / 4;
  120. eps = max(eps, abs(newU[i][j] - u[i][j]));
  121. }
  122. swap(u, newU);
  123. return eps;
  124. }
  125.  
  126. int main()
  127. {
  128. double a, b, hX, hY, eps;
  129. cin>>a>>b;
  130. cin >> hX >> hY;
  131. eps = 1e-9;
  132. cout.precision(16);
  133. int n = a/hX, m = b/hY;
  134. buildMatrixForFirst(n - 2, m - 2, hX, hY);
  135. //buildMatrixForSecond(n - 2, m - 2, hX, hY);
  136. for (int i = 0; i < 10000; ++i) {
  137. now[i] = i;
  138. }
  139. if(solve((n - 2) * (m - 2)))
  140. cout<<"KEK";
  141. else
  142. cout<<"KEEEEEEEEK";
  143.  
  144.  
  145. for(int i = 0; i < n - 2; ++i)
  146. {
  147. for(int j = 0; j < m - 2; ++j)
  148. cout<<matrix[now[i * (m - 2) + j]][(n - 2) * (m - 2)]<<" ";
  149. cout<<endl;
  150. }
  151. cout<<endl;
  152.  
  153.  
  154.  
  155.  
  156. //while(nextTurn(n, m, h) > eps);
  157.  
  158. //for(int i = 2; i < n; ++i)
  159. //{
  160. // for(int j = 2; j < m; ++j)
  161. // cout<<u[i][j]<<" ";
  162. // cout<<endl;
  163. //}
  164.  
  165.  
  166.  
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement