0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 15
1

Метод Дихотомии (итерационное вычисление нуля функции)

16.04.2019, 13:49. Показов 1513. Ответов 6

Считает сумму, но с ответом не сходится
До какого момента нужно считать?


Метод Дихотомии (итерационное вычисление нуля функции)

C++
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
#include <iostream>
#include <string>
#include <cmath>
 
using namespace std; 
 
int main()
{
float pi = 3.14159265358979323846; // число пи
float e = 2.718281828459045; // число Эйлера
float k2 = 2.0; // степень
float k3 = 0.5; // вместо корня
float x = 0.1; // первоначальное значение
float x1 = 1; // первоначальное значение
float s = 0; // переменная, для первого круга будет равен 0
float y, y1; // переменные
 
    for(int i = 0; i < 8; i++) 
    {  
        y = (7 * x*atan(x / pow(e, k3)) - (pow(e, 5 / 3))) / ((abs(log10(pow(x, k2))) + pi) - 5 / 9); 
        y1 = (7 * x1*atan(x1 / pow(e, k3)) - (pow(e, 5 / 3))) / ((abs(log10(pow(x1, k2))) + pi) - 5 / 9); 
        s = s + y + y1;   
        cout<<"y(" << x << ")= "<<y<<" | ";
        cout<<"y1(" << x1 << ")= "<<y1<<"\n";
        x = x + 0.1;
        x1 = x1 + 0.1;
    }
cout<<"Summa = "<< s;
   
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2019, 13:49
Ответы с готовыми решениями:

Итерационное вычисление частных производных
доброго времени суток в задачах по численным методам столкнулся с необходимостью вычисления...

Итерационное вычисление квадратного корня
По заданному вещественному x , вычислить значение \sqrt{x} по следующей итерационной форме ...

Метод дихотомии, ошибка (в функции?)
найти корень до шестого знака после запятой методом дихотомии. код простой, думаю что неверно...

метод дихотомии, линейная интерполяция и функции
Здраствуйте! Срочно надо составить прогу на java. Вней должен быть метод дихотомии, линейная...

6
3786 / 3101 / 857
Регистрация: 25.03.2012
Сообщений: 11,463
Записей в блоге: 1
16.04.2019, 14:23 2
во-первых это не метод дихотомии, это просто полный перебор чисел
тебя просят найти корень функции, а не какую-то там сумму от 0 до 8 (почему вообще до восьми?)

Добавлено через 6 минут
Цитата Сообщение от Yuniko Посмотреть сообщение
Считает сумму
а просили считать сумму?
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 15
16.04.2019, 14:56  [ТС] 3
C++
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
#include <iostream> 
#include <stdio.h> 
#include <cmath> 
 
using namespace std; 
void FindKoren(int a, int b, double sigma, int max_step, double e, double k, double k2, double pi) //уменьшение интервала неопределенности 
{ 
    double f_a, f_b, xm, f_xm; 
    f_a = (7 * a*atan(a / pow(e, k)) - (pow(e, 5 / 3))) / ((abs(log10(pow(a, k2))) + pi) - 5 / 9); // устанавливаем первоначальное значение a
    f_b = (7 * b*atan(b / pow(e, k)) - (pow(e, 5 / 3))) / ((abs(log10(pow(b, k2))) + pi) - 5 / 9); // устанавливаем первоначальное значение b
        while (b - a > sigma && 0 < max_step) // 1.0 - 0.1 = 0.9 > 0.001 && 0 < 1000000
        { 
            xm = (a + b) / 2; // середина интервала 
            f_xm = xm; 
                if (f_a*f_xm <= 0)// функция должна иметь разный знак 
                { 
                    b = xm; 
                    f_b = f_xm; // исключен правый подынтервал 
                } 
        } 
    double findkoren = (a + b) / 2; // ответ 
    cout <<"findkoren = " <<findkoren << endl; 
    double findkoren_f = (findkoren / 30); 
    cout << "Корень равен = " << findkoren_f << endl; 
} 
int main() 
{ 
setlocale(LC_ALL, "Russian"); 
 
double a = 0; // левая граница (должно быть 0.1)
double b = 0; // правая граница (должно быть 1.0)
double k2 = 2.0; // степень
double k = 0.5; // вместо корня 
double sigma = 0.001; // погрешность 
int max_step = 1000; // максимальное кол-во шагов 
int x = 0; // найденный корень 
 
double pi = 3.14159265358979323846; 
double e = 2.718281828459045; 
 
cout << "Введите левый интервал, a = "; 
cin >> a; 
cout << "Введите правый интервал, b = "; 
cin >> b; 
 
FindKoren(a, b, sigma, max_step, e, k, k2, pi); 
 
 
system("pause");
C++
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
#include <iostream> 
#include <stdio.h> 
#include <cmath> 
 
using namespace std; 
double a = 0.1; 
double b = 1.0; 
double L = 0.2;//точность 
double x1, x2, f1, f2; 
double pi = 3.14159265358979323846; 
double e = 2.718281828459045; 
double k = 0.5; // вместо корня 
double k2 = 2.0; 
double E = 0; 
cout « "a = " « a « endl; 
cout « "b = " « b « endl; 
 
x1 = (a + b - L) / 2; 
x2 = (a + b + L) / 2; 
 
 
cout « "x1 = " « x1 « endl; 
cout « "x2 = " « x2 « endl; 
 
f1 = (7 * x1*atan(x1 / pow(e, k)) - (pow(e, 5 / 3))) / ((abs(log10(pow(x1, k2))) + pi) - 5 / 9); 
f2 = (7 * x2*atan(x2 / pow(e, k)) - (pow(e, 5 / 3))) / ((abs(log10(pow(x2, k2))) + pi) - 5 / 9); 
 
cout « "f1 = " « f1 « endl; 
cout « "f2 = " « f2 « endl; 
 
E = ((b - a - L) / pow(2, 2)) / (L / 2); 
 
cout « "E = " « E « endl; 
cout « "____________________" « endl; 
if (f1>f2) 
{ 
cout « "a = " « a « endl; 
} 
else 
{ 
cout « "a = " « x2 « endl; 
} 
 
if (f1<f2) 
{ 
cout « "b = " « b « endl; 
} 
else 
{ 
cout « "b = " « x1 « endl; 
} 
system("pause"); 
}
Добавлено через 2 минуты
Kuzia domovenok, в математике второй код более правильно написан, но как сделать дальше без понятия. В первом выдаются ошибки. Перебор чисел, это то, что получилось. Весь код изменялся сотни раз и уже без понятия что происходит. Прошу прощения

Добавлено через 4 минуты
Kuzia domovenok, в ответе написано Сумма: -5.19
Поэтому вроде как надо найти a и b, а потом их сложить, правильно понимаю?

Добавлено через 4 минуты
Kuzia domovenok, В задании нет суммы, но нужно найти корни а и b
если просто искать корни, то первый код просто генерируют числа, второй код не получается, а 3 код ищет только первые значения
0
3786 / 3101 / 857
Регистрация: 25.03.2012
Сообщений: 11,463
Записей в блоге: 1
16.04.2019, 15:16 4
Цитата Сообщение от Yuniko Посмотреть сообщение
Kuzia domovenok, в ответе написано Сумма: -5.19
Поэтому вроде как надо найти a и b, а потом их сложить, правильно понимаю?
друг, ты ничего не понимаешь правильно. У меня закрадывается подозрения, что все программы, что ты тут представил, ты тем или иным образом откуда-то скопипастил.
Потому что в них-то как раз прослеживается метод дихотомии, однако судя по
В задании нет суммы, но нужно найти корни. Поэтому вроде как надо найти a и b, а потом их сложить, правильно понимаю?
ты даже без программирования, чисто как математик, не можешь метод дихотомии понять, а значит и написать сам не мог программы выше.
Вот пример, что я написал, чтобы не быть голословным. Ты точно понимаешь, что происходит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>
double foo(double x)
{
    return 7 * x*atan(x*exp(-0.5) ) - exp(0.5/0.3) / (abs(2*log10(x)) + M_PI) - 5.0/9.0;
}
int main(void) {
    double a = 0.1, b = 1.0, eps=1e-3;
    while (b - a > eps)
    {
        double mid=(a+b)/2;
        if (foo(mid) > 0)
            b = mid;
        else
            a = mid;
    }
    std::cout << "x=" << (a + b) / 2 << ", f(x)="<<foo(a)<< std::endl;
    return 0;
}
1
5539 / 3024 / 1262
Регистрация: 07.02.2019
Сообщений: 7,647
16.04.2019, 15:50 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
log10
в задании натуральный

Добавлено через 1 минуту
Цитата Сообщение от Yuniko Посмотреть сообщение
в ответе написано Сумма: -5.19
корень вашего уравнения 0.691
Шапку таблицы покажите.
1
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 15
16.04.2019, 18:28  [ТС] 6

Формула F(x)
Сумма
0
5539 / 3024 / 1262
Регистрация: 07.02.2019
Сообщений: 7,647
16.04.2019, 18:32 7
Цитата Сообщение от Yuniko Посмотреть сообщение
Сумма
Где в задании написано что нужно суммировать? Вы случаем задачу с таблицей не перепутали? Третий столбец для другого задания.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2019, 18:32
Помогаю со студенческими работами здесь

Метод дихотомии для минимизации функции
Помогите пожалуйста,не могу понять алгоритм реализации)буду очень благодарна за помощь

Численный метод дихотомии. Максимизация функции. MathCad
Здравствуйте. Мне необходимо найти максимум данной функции методом дихотомии на MathCad. Алгоритм...

Метод Дихотомии для нахождения максимума функции
Найти максимум функции y=exp(x)*cos(x) методом дихотомии, надо найти в этом коде ошибки, что-то не...

Найти корень заданной функции (метод дихотомии)
Нужно найти корень заданной функции в пределах заданного пользователем диапазона методом дихотомии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru