Advertisement
p0lich

math4

Nov 21st, 2017
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. double* solveMatrix (int n, double *bot, double *mid, double *top, double *d)
  6. {
  7. double* P = new double[n];
  8. double* Q = new double[n];
  9. double* res = new double[n];
  10.  
  11. P[0] = -top[0] / mid[0];
  12. Q[0] = d[0] / mid[0];
  13.  
  14. for (int i = 1; i < n; i++)
  15. {
  16. P[i] = -top[i] / (mid[i] + bot[i] * P[i-1]);
  17. Q[i] = (d[i] - bot[i] * Q[i-1]) / (mid[i] + bot[i] * P[i-1]);
  18. }
  19.  
  20. res[n-1] = Q[n-1];
  21.  
  22. for (int i = n - 2; i >= 0; i--)
  23. res[i] = P[i] * res[i+1] + Q[i];
  24.  
  25. return res;
  26. }
  27.  
  28. int main()
  29. {
  30. setlocale(LC_ALL, "RUS");
  31.  
  32. int n;
  33. cout << "Количество переменных:" << endl;
  34. cin >> n;
  35. cout << endl;
  36.  
  37. double** mat = new double*[n];
  38. double* matRes = new double[n];
  39.  
  40. for (int i = 0; i < n; i++)
  41. mat[i] = new double[n+1];
  42.  
  43. for (int i = 0; i < n; i++)
  44. for (int j = 0; j < n + 1; j++)
  45. mat[i][j] = 0;
  46.  
  47.  
  48. cout << "Введите СЛАУ:" << endl;
  49.  
  50. for (int i = 0; i < n; i++)
  51. {
  52. cout << "Строка " << i + 1 << ": " << endl;
  53. if (i > 0)
  54. cin >> mat[i][i-1];
  55.  
  56. cin >> mat[i][i];
  57.  
  58. if (i < n - 1)
  59. cin >> mat[i][i+1];
  60.  
  61. cin >> mat[i][n];
  62. }
  63.  
  64. cout << endl;
  65.  
  66. double* diagTop = new double[n];
  67. double* diag = new double[n];
  68. double* diagBot = new double[n];
  69. double* rightPath = new double[n];
  70.  
  71. diagTop[n - 1] = 0;
  72. for (int i = 0; i < n - 1; i++)
  73. diagTop[i] = mat[i][i+1];
  74.  
  75. for (int i = 0; i < n; i++)
  76. diag[i] = mat[i][i];
  77.  
  78. diagBot[0] = 0;
  79. for (int i = 1; i < n; i++)
  80. diagBot[i] = mat[i][i-1];
  81.  
  82. for (int i = 0; i < n; i++)
  83. rightPath[i] = mat[i][n];
  84.  
  85. double* res = solveMatrix(n, diagBot, diag, diagTop, rightPath);
  86.  
  87. cout << "Результат" << endl;
  88.  
  89. for (int i = 0; i < n; i++)
  90. cout << res[i] << endl;
  91.  
  92. system("pause");
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement