Advertisement
Guest User

HE

a guest
Apr 25th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <math.h>
  3. #include <iostream>
  4.  
  5. int n;
  6.  
  7. double** A;
  8. double* B;
  9. double* X;
  10.  
  11. double eps;
  12. int MLI;
  13. double** alfa;
  14. double* beta;
  15. double* R;
  16.  
  17. void funA() {
  18. n = 5;
  19. MLI = 60;
  20. eps = 0.0001;
  21.  
  22. //alokacja zmiennych
  23. A = new double*[n + 1];
  24. for (int i = 1; i <= n; i++) {
  25. A[i] = new double[n + 1];
  26. }
  27. B = new double[n + 1];
  28.  
  29. A[1][1] = 10;
  30. A[1][2] = 1;
  31. A[1][3] = 1;
  32. A[1][4] = 1;
  33. A[1][5] = 2;
  34.  
  35. A[2][1] = 3;
  36. A[2][2] = 20;
  37. A[2][3] = 4;
  38. A[2][4] = 2;
  39. A[2][5] = 1;
  40.  
  41. A[3][1] = 5;
  42. A[3][2] = 1;
  43. A[3][3] = 40;
  44. A[3][4] = 9;
  45. A[3][5] = 5;
  46.  
  47. A[4][1] = 3;
  48. A[4][2] = 0;
  49. A[4][3] = 1;
  50. A[4][4] = 10;
  51. A[4][5] = 1;
  52.  
  53. A[5][1] = 6;
  54. A[5][2] = 2;
  55. A[5][3] = 1;
  56. A[5][4] = 1;
  57. A[5][5] = 20;
  58.  
  59. B[1] = 15;
  60. B[2] = 30;
  61. B[3] = 60;
  62. B[4] = 15;
  63. B[5] = 30;
  64.  
  65. }
  66.  
  67. void funB() {
  68.  
  69. //alokacja zmiennych
  70. alfa = new double*[n + 1];
  71. for (int i = 1; i <= n; i++) {
  72. alfa[i] = new double[n + 1];
  73. }
  74. beta = new double[n + 1];
  75.  
  76.  
  77. //wyznaczanie alfa
  78. for (int i = 1; i <= n; i++) {
  79. for (int j = 1; j <= n; j++) {
  80. if (i == j) {
  81. alfa[i][j] = 0;
  82. } else {
  83. if (A[i][i] == 0) { //czy nie dzielimy przez 0
  84. throw "div by 0";
  85. } else {
  86. alfa[i][j] = (-1*A[i][j]) / A[i][i];
  87. }
  88. }
  89. }
  90. }
  91.  
  92. //wyznaczanie beta
  93. for (int i = 1; i <= n; i++) {
  94. if (A[i][i] == 0) {
  95. throw "div by 0";
  96. } else {
  97. beta[i] = B[i] / A[i][i];
  98. }
  99. }
  100. }
  101.  
  102. void funC() {
  103.  
  104. //alokacja pamięci
  105. X = new double[n + 1];
  106. for (int i = 1; i <= n; i++) {
  107. X[i] = 0;
  108. }
  109.  
  110. R = new double[n + 1];
  111. for (int i = 1; i <= n; i++) {
  112. R[i] = beta[i];
  113. }
  114.  
  115.  
  116. //szukanie max
  117. int s = 1;
  118.  
  119. for (int i = 2; i <= n; i++) {
  120. if (abs(R[i]) > abs(R[s])) {
  121. s = i;
  122. }
  123. }
  124.  
  125.  
  126. //kolejne iteracje
  127. int lit = 0;
  128. double blad = 0;
  129.  
  130. do {
  131. lit++;
  132. X[s] = X[s] + R[s];
  133.  
  134. for (int i = 1; i <= n; i++) {
  135. if (i != s) {
  136. R[i] = R[i] + alfa[i][s] * R[s];
  137. }
  138.  
  139. }
  140.  
  141. R[s] = 0;
  142.  
  143.  
  144. //szukanie max
  145. s = 1;
  146.  
  147. for (int i = 2; i <= n; i++) {
  148. if (abs(R[i]) > abs(R[s])) {
  149. s = i;
  150. }
  151. }
  152.  
  153. blad = abs(R[s]);
  154.  
  155. } while (lit <= MLI && !(blad <= eps));
  156. std::cout << lit << std::endl;
  157. }
  158.  
  159. int _tmain(int argc, _TCHAR* argv[]) {
  160. funA();
  161. funB();
  162. funC();
  163.  
  164. std::cout << std::endl << "X: " << std::endl;
  165. for (int i = 1; i <= n; i++) {
  166. std::cout << i << ": " << X[i] << std::endl;
  167. }
  168.  
  169. int b = 0;
  170. std::cin >> b;
  171.  
  172. return 0;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement