Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. // laba3.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <cstdio>
  6. #include "math.h"
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13. int lines, columns, epsilon, tau;
  14. double A[lines][columns];
  15. double f[lines];
  16. double x[lines];
  17. cout << "Write lines: \n";
  18. cin >> lines;
  19. cout << "Write columns: \n";
  20. cin >> columns;
  21. cout << "Write epsilon: \n";
  22. cin >> epsilon;
  23. cout << "Write tau recomended 0.01: \n";
  24. cin >> tau;
  25. cout << "Go matrix A: \n";
  26. for (int i = 0; i < lines; i++)
  27. for (int j = 0; j < columns; j++)
  28. cin >> A[i][j];
  29. cout << "Go vector f: \n";
  30. for (int i = 0; i < lines; i++)
  31. cin >> f[i];
  32.  
  33. cout << "Go vector x: \n";
  34. for(int i = 0; i < lines; i++)
  35. cin >> x[i];
  36. double B[lines][columns] = { 0.0 }; // инициализация новой матрицы (которая будет после умножения на тау)
  37. double C[lines] = { 0.0 }; // инициализация нового вектора (после умножения на тау)
  38. double xNext[lines] = { 0.0 }; // вспомогательный вектор иксов (для хранения значений, вычисленных при итерации)
  39. // находим матрицу В
  40. for (int i = 0; i < lines; i++)
  41. for (int j = 0; j < columns; j++)
  42. {
  43. if (i == j)
  44. B[i][j] = 1 - tau * A[i][j];
  45. else B[i][j] = -tau * A[i][j];
  46. }
  47. // вычисление нормы матрицы
  48. double norm = 0;
  49. double temp;
  50. for (int i = 0; i < lines; i++)
  51. {
  52. temp = 0.0;
  53. for (int j = 0; j < columns; j++)
  54. temp += fabs(B[i][j]);
  55. if (temp > norm)
  56. norm = temp;
  57. }
  58.  
  59. // находим вектор С
  60. for (int i = 0; i < lines; i++)
  61. C[i] = tau * f[i];
  62.  
  63. // вычисление нормы вектора C
  64. double fnorm = 0;
  65. for (int i = 0; i < lines; i++)
  66. if (abs(C[i]) > fnorm)
  67. fnorm = fabs(C[i]);
  68.  
  69. // вычисление числа шагов для заданной точности
  70. int n;
  71. n = (int)(1 + (log(epsilon) + log(1 - norm) - log(fnorm)) / log(norm));
  72.  
  73. // вычисление корней с заданной точностью
  74. int k = 0;
  75. while (k < n)
  76. {
  77. for (int i = 0; i < lines; i++)
  78. {
  79. for (int j = 0; j < columns; j++)
  80. xNext[i] += B[i][j] * x[j];
  81. xNext[i] += C[i];
  82. }
  83.  
  84. for (int i = 0; i < lines; i++)
  85. {
  86. x[i] = xNext[i];
  87. xNext[i] = 0.0;
  88. }
  89.  
  90. k++;
  91. }
  92. // вывод решения
  93. for (int i = 0; i < lines; i++)
  94. cout << "x" << i + 1 << " = " << x[i] << '\n';
  95.  
  96.  
  97. cout << '\n';
  98. getchar();
  99. return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement