1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
| #include <iostream>
#include <cmath>
#include<iomanip>
#include<conio.h>
# define M_PI 3.14159265358979323846 /* pi */
# define M_E 2.7182818284590452354
using namespace std;
int k = 0;
float f(float x) //заданная нам функция
{
float y;
y = (-sin(x))-sqrt(2*M_PI*x)+10*pow(M_E,(-pow(x,2)));//pow(x, 3) - 3 * pow(x, 2) - 17 * x + 22;
return y;
}
float f1(float x) { //первая производная
float z;
z = (-cos(x))-20*x*pow(M_E,(-pow(x,2)))-(sqrt(M_PI)*sqrt(2)/2*sqrt(x));//3 * pow(x, 2) - 6 * x - 17;
return z;
}
float f2(float x) { //вторая производная
float u;
u = (40*pow(x,2)*pow(M_E,(-pow(x,2)))+sin(x)-20*pow(M_E,(-pow(x,2)))+(sqrt(2)*sqrt(M_PI)/4*pow(x,(3/2)))); //6 * x - 6;
return u;
}
float function(float a, float b, float e) {// функция вичислення метода хорд и касательных
float c;
do {
if (f(a) * f2(a) < 0) {//Условие начальной точки для метода хорд
a = a + (b - a) / (f(a) - f(b))*f(a); //формулы подсчета по методу хорд
b = b - f(b) / f1(b);
}
else if (f(a) * f2(a) > 0) {//Условие начальной точки для метода касательных
a = a - f(a) / f1(a); //формулы подсчета по методу касательных
b = b + (b - a) / (f(b) - f(a))*f(b);
}else{
cout<<"can't solve\n";
break;
}
k++;
} while (fabs(b - a) > e);//Построение хорд и касательных продолжается до достижения необходимой точности решения е
return (a + b) / 2.0;
}
int main()
{
setlocale(LC_ALL, "rus");
double a, b, e = 0.1, F, pr = 1;
while (pr != 0) {
cout << "|" << setw(53) << "Введите начало отрезке a" << " |";
cin >> a;
cout << endl;
cout << "|" << setw(53) << "Введите конец отрезка b" << " |";
cin >> b;
cout << endl;
if (f(a)*f(b) < 0)//Отрезок на концах которых функция имеет разный знак.
{
pr = 0;//находим значение функции от а и b
cout << setw(40) << "f(a) = " << "f(" << a << ") = " << f(a) << endl;
cout << setw(40) << "f(b) = " << "f(" << b << ") = " << f(b) << endl;
cout << endl;
}
else cout << setw(75) << "Решений нет, введите другое а и b" << endl;
cout << endl;
}
cout << "РЕЗУЛЬТАТ" << endl;//выводим результат на экран
cout << function(a, b, e) << endl;
cout << "количество итераций: " << k << endl;
cout << "Проверка" << endl;
F = function(a, b, e);
printf("%3.9lf", f(F));
cout << endl;
return 0;
} |