Advertisement
kasper_k

gg

Oct 18th, 2022
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include<iostream>
  2. #include<cmath>
  3. #include<iomanip>
  4.  
  5. using namespace std;
  6.  
  7. double function1(double* x)
  8. {
  9.     return sin(x[0] + x[1]) - 1.2 * x[0] - 0.1;
  10. }
  11.  
  12. double function2(double* x)
  13. {
  14.     return x[0] * x[0] + x[1] * x[1] - 1;
  15. }
  16.  
  17. double function11(double* x)
  18. {
  19.     return cos(x[0] + x[1]) - 1.2;
  20. }
  21.  
  22. double function12(double* x)
  23. {
  24.     return cos(x[0] + x[1]);
  25. }
  26.  
  27. double function21(double* x)
  28. {
  29.     return 2 * x[0];
  30. }
  31.  
  32. double function22(double* x)
  33. {
  34.     return 2 * x[1];
  35. }
  36.  
  37. int ObrMatrix(double** a, double* x)
  38. {
  39.     double det = function11(x) * function22(x) - function12(x) * function21(x);
  40.     if (det == 0) return 0;
  41.     double arr[2][2];
  42.     arr[0][0] = function21(x);
  43.     arr[0][1] = function22(x);
  44.     arr[1][0] = function12(x);
  45.     arr[1][1] = function11(x);
  46.     a[0][0] = arr[0][0] / det;
  47.     a[0][1] = -arr[1][0] / det;
  48.     a[1][0] = -arr[0][1] / det;
  49.     a[1][1] = arr[1][1] / det;
  50. }
  51.  
  52. /*void FoundX(double** a, double* x)
  53. {
  54.     cout << "Метод Ньютона!\n\n";
  55.     int i = 0; // for amount of iterations
  56.     ObrMatrix(a, x);
  57.     double x1, x2, X1, X2, eps = 1e-6;
  58.     cout << "|" << setw(4) << "n|" << setw(10) << "X1|" << setw(10) << "X2|" << endl;;
  59.     cout << "|" << setw(3) << i << "|" << setw(9) << x[0] << "|" << setw(9) << x[1] << "|" << endl;
  60.     i++;
  61.     do
  62.     {
  63.         X1 = x[0]; X2 = x[1];
  64.         x1 = a[0][0] * function1(x) + a[0][1] * function2(x), x2 = a[1][0] * function1(x) + a[1][1] * function2(x);
  65.         x[0] -= x1;
  66.         x[1] -= x2;
  67.         cout << "|" << setw(3) << i << "|" << setw(9) << x[0] << "|" << setw(9) << x[1] << "|" << endl;
  68.         i++;
  69.     } while (fabs(x[0] - X1) > eps || fabs(x[1] - X2) > eps);
  70.  
  71. }
  72. */
  73. void DelArr(double** a, double* x, int size);
  74.  
  75. void main()
  76. {
  77.     setlocale(NULL, "ru");
  78.     int size = 2, counter = 0;
  79.     double* x = new double[size];
  80.     x[0] = 0.6; x[1] = 0.6; // начальное приближение
  81.     double** a = new double* [size];
  82.     for (int i = 0; i < size; i++)a[i] = new double[size];
  83.     double X1, X2, x1, x2, eps = 1e-6;
  84.     do
  85.     {
  86.         X1 = x[0]; X2 = x[1];
  87.         x1 = sqrt(1 - x[1] * x[1]);
  88.         x2 = asin(1.2 * x[0] + 0.1) - x[0];
  89.         x[0] = x1;
  90.         x[1] = x2;
  91.         counter += 1;
  92.         cout << counter << "\t" << x[0] << "\t" << x[1] << endl;
  93.     } while (fabs(x[0] - X1) > eps || fabs(x[1] - X2) > eps);
  94.  
  95.     DelArr(a, x, size);
  96.     system("pause");
  97. }
  98.  
  99. void DelArr(double** a, double* x, int size)
  100. {
  101.     delete[]x;
  102.     for (int i = 0; i < size; i++)
  103.     {
  104.         delete[] a[i];
  105.     }
  106.     delete[] a;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement