Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- #define eps 0.0001
- // sin(x1 + x2) - 1.2 * x1 - 0.1 = 0
- // x1^2 + x2 ^ 2 - 1 = 0
- // x2 = arcsin(1.2 * x1 + 0.1)
- // x2 = sqrt(1 - x1 ^ 2)
- // x1 - [0, 1]; x2 - [0, 1]
- // начальное приближение x - [0, 1]
- double function1(double x, double y)
- {
- //return sin(x + y) - 1.2 * x - 0.1;
- return cos(x) + y - 1.5;
- }
- double function2(double x, double y)
- {
- //return x * x + y * y - 1;
- return 2 * x - sin(y - 0.5) - 1;
- }
- double func11(double x, double y)
- {
- //return cos(x + y) - 1.2;
- return -sin(x);
- }
- double func12(double x, double y)
- {
- //return cos(x + y);
- return 1;
- }
- double func21(double x, double y)
- {
- //return 2 * x;
- return 2;
- }
- double func22(double x, double y)
- {
- //return 2 * y;
- return -cos(y - 0.5);
- }
- void ober_matr(double a[2][2])
- {
- double det, aa;
- det = a[0][0] * a[1][1] - a[0][1] * a[1][0];
- aa = a[0][0];
- a[0][0] = a[1][1] / det;
- a[1][1] = aa / det;
- aa = a[0][1];
- a[0][1] = -a[0][1] / det;
- a[1][0] = -a[1][0] / det;
- }
- void nuton(double x, double y)
- {
- int i = 1;
- double a[2][2], dx, dy, b[2], norm;
- do
- {
- a[0][0] = func11(x, y);
- a[0][1] = func12(x, y);
- a[1][0] = func21(x, y);
- a[1][1] = func22(x, y);
- ober_matr(a);
- dx = -a[0][0] * function1(x, y) + -a[0][1] * function2(x, y);
- dy = -a[1][0] * function1(x, y) + -a[1][1] * function2(x, y);
- x = x + dx;
- y = y + dy;
- b[0] = function1(x, y);
- b[1] = function2(x, y);
- norm = sqrt(b[0] * b[0] + b[1] * b[1]);
- i++;
- } while (norm >= eps);
- cout << x << endl << y << endl;
- cout << i << " итераций" << endl;
- }
- void main()
- {
- setlocale(LC_ALL, "RU");
- double x, y;
- cout << "x = ";
- cin >> x;
- cout << "y = ";
- cin >> y;
- nuton(x, y);
- cout << endl;
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement