Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <algorithm>
- #include <utility>
- using namespace std;
- typedef pair<double, double> pdd;
- const double dx = 0.0001;
- double func1(double x) {
- return -pow(x, 2.0 / 3) - pow(1 - x * x, 1.0 / 3);
- }
- double func2(double x) {
- return (func1(x + dx) - func1(x)) / dx;
- }
- double func3(double x) {
- return (func2(x + dx) - func2(x)) / dx;
- }
- void print(pdd p) {
- cout << p.first << " " << p.second << endl;
- }
- pdd SvenMin(double x0, double h) {
- double f1 = func1(x0);
- double f2 = func1(x0 + h);
- double f0 = func1(x0 - h);
- int k = 1;
- double x1, x2;
- if (f0 >= f1 && f1 >= f2) {
- x1 = x0 + h;
- }
- else if (f0 <= f1 && f1 <= f2) {
- x1 = x0 - h;
- h = -h;
- }
- else {
- return pdd(x0 - h, x0 + h);
- }
- x2 = x1;
- x1 = x0;
- do {
- x0 = x1;
- x1 = x2;
- x2 = x1 + pow(2, 1.0 * k) * h;
- k++;
- } while (func1(x2) <= func1(x1));
- if (h > 0) {
- return pdd(x0, x2);
- }
- else {
- return pdd(x2, x0);
- }
- }
- double NT(pdd p, double eps) {
- double x0;
- double x1 = p.first;
- do {
- x0 = x1;
- x1 = x0 - func2(x0) / func3(x0);
- } while (abs(x1 - x0) > eps);
- return x1;
- }
- int main(void) {
- setlocale(LC_ALL, "Russian");
- pdd a = SvenMin(0.5, 0.1);
- cout << "Отрезок, в котором содержится точка минимума: ";
- print(a);
- double b = NT(a, 0.0001);
- cout << "Точка минимума: ";
- cout << "(" << b << ";" << func1(b) << ")" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement