Advertisement
kasper_k

INsf1h

Oct 11th, 2022
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6. #define eps 0.0001
  7. // sin(x1 + x2) - 1.2 * x1 - 0.1 = 0
  8. // x1^2 + x2 ^ 2 - 1 = 0
  9. // x2 = arcsin(1.2 * x1 + 0.1)
  10. // x2 = sqrt(1 - x1 ^ 2)
  11. // x1 - [0, 1]; x2 - [0, 1]
  12. // начальное приближение x - [0, 1]
  13.  
  14. double function1(double x, double y)
  15. {
  16.     //return sin(x + y) - 1.2 * x - 0.1;
  17.     return cos(x) + y - 1.5;
  18. }
  19.  
  20. double function2(double x, double y)
  21. {
  22.     //return x * x + y * y - 1;
  23.     return 2 * x - sin(y - 0.5) - 1;
  24. }
  25.  
  26. double func11(double x, double y)
  27. {
  28.     //return cos(x + y) - 1.2;
  29.     return -sin(x);
  30. }
  31.  
  32. double func12(double x, double y)
  33. {
  34.     //return cos(x + y);
  35.     return 1;
  36. }
  37.  
  38. double func21(double x, double y)
  39. {
  40.     //return 2 * x;
  41.     return 2;
  42. }
  43.  
  44. double func22(double x, double y)
  45. {
  46.     //return 2 * y;
  47.     return -cos(y - 0.5);
  48. }
  49.  
  50. void ober_matr(double a[2][2])
  51. {
  52.     double det, aa;
  53.     det = a[0][0] * a[1][1] - a[0][1] * a[1][0];
  54.     aa = a[0][0];
  55.     a[0][0] = a[1][1] / det;
  56.     a[1][1] = aa / det;
  57.     aa = a[0][1];
  58.     a[0][1] = -a[0][1] / det;
  59.     a[1][0] = -a[1][0] / det;
  60. }
  61.  
  62. void nuton(double x, double y)
  63. {
  64.     int i = 1;
  65.     double a[2][2], dx, dy, b[2], norm;
  66.     do
  67.     {
  68.         a[0][0] = func11(x, y);
  69.         a[0][1] = func12(x, y);
  70.         a[1][0] = func21(x, y);
  71.         a[1][1] = func22(x, y);
  72.         ober_matr(a);
  73.         dx = -a[0][0] * function1(x, y) + -a[0][1] * function2(x, y);
  74.         dy = -a[1][0] * function1(x, y) + -a[1][1] * function2(x, y);
  75.         x = x + dx;
  76.         y = y + dy;
  77.         b[0] = function1(x, y);
  78.         b[1] = function2(x, y);
  79.         norm = sqrt(b[0] * b[0] + b[1] * b[1]);
  80.         i++;
  81.     } while (norm >= eps);
  82.     cout << x << endl << y << endl;
  83.     cout << i << " итераций" << endl;
  84. }
  85. void main()
  86. {
  87.     setlocale(LC_ALL, "RU");
  88.     double x, y;
  89.     cout << "x = ";
  90.     cin >> x;
  91.     cout << "y = ";
  92.     cin >> y;
  93.     nuton(x, y);
  94.     cout << endl;
  95.     system("PAUSE");
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement