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

Решение уравнения методом дихотомии

30.03.2021, 09:39. Показов 898. Ответов 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
double func(double x)
{
    return exp(sin(x))-pow(2,cos(x));
}
void main()
{
    double xa=-10,xb=10,dx=0.1;
    double eps=1e-10;
    for(; xa<=xb; xa+=dx)
    {
        double x,x1=xa,x2=xa+dx;
        double f,y=func(x1);
        if(y*func(x2)<=0)
        {
            do
            {
                x=(x1+x2)/2;
                f=func(x);
                if(y*f<=0) x2=x;
                else
                {
                    x1=x;
                    y=f;
                }
            }while(fabs(f)>eps);
            cout<<"x="<<x<<" y="<<f<<endl;
        }
    }
    system("pause");
}

Помогите пожалуйста сделать в функциях шаг (dx с клавиатуры)
и саму дихотомию
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2021, 09:39
Ответы с готовыми решениями:

Решение уравнения методом дихотомии
Написать программу, находящую решение уравнения f(x)=0 методом дихотомии на указанном отрезке...

Решение уравнения методом дихотомии
Написать программу, находящую решение уравнения f(x)=0 методом дихотомии на указанном отрезке...

Решение уравнения методом дихотомии(половинного деления)?
Здрастуйте, помогите реализовать дихотомии(половинного деления) с помощью кода. И нарисовать по...

Решение задач методом дихотомии
Решите уравнение x^4-2x^3+1=0 методом дихотомии. Написать программу для решения.

6
1971 / 1096 / 467
Регистрация: 11.10.2018
Сообщений: 5,606
30.03.2021, 09:45 2
На этом участке 6 корней не будет ошибки? Попробуйте уменьшить интервал.
По методу ищите готовый код в Интернете.
0
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 29
30.03.2021, 10:12  [ТС] 3
я ввожу с клавиатуры интервал , немного не тот код скинул. в интернете именно в функциях не нашёл , поэтому обратился сюда за помощью

Добавлено через 18 минут
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
#include <iostream>
#include <cmath>
using namespace std;
 
double func(double x)
{
    return exp(sin(x)) - pow(2, cos(x));
}
void main()
{
    double xa, xb , eps, dx ;
    cout << "a = ";
    cin >> xa;
    cout << "b = ";
    cin >> xb;
    cout << "step = ";
    cin >> dx;
    cout << "eps = ";
    cin >> eps;
    for (; xa <= xb; xa += dx)
    {
        double x, x1 = xa, x2 = xa + dx;
        double f, y = func(x1);
        if (y * func(x2) <= 0)
        {
            do
            {
                x = (x1 + x2) / 2;
                f = func(x);
                if (y * f <= 0) x2 = x;
                else
                {
                    x1 = x;
                    y = f;
                }
            } while (fabs(f) > eps);
            cout << "x=" << x << " y=" << f << endl;
        }
    }
    system("pause");
}
вот что я имею в виду , немного не тот код скинул
0
1971 / 1096 / 467
Регистрация: 11.10.2018
Сообщений: 5,606
30.03.2021, 13:04 4
Тэги кода нужно ставить [CPP][/CPP]. - Нажимаешь на кнопку "C++" чуть выше редактора сообщений.
Метод дихотомии не такой уж и сложный. Найди статью в Интернете с описанием и разберись сам. Как же ты дальше программы будешь писать?

Добавлено через 5 минут
Цитата Сообщение от geniy Посмотреть сообщение
C++
1
for(; xa <= xb; xa += dx)
- заводится еще переменная x, xa - не прибавляется.

Добавлено через 1 час 39 минут
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
#include <iostream>
#include <cmath>
using namespace std;
 
double func(double x)
{
    return exp(sin(x)) - pow(2, cos(x));
}
int main()
{
    double xa, xb, eps, c;
    /*
    cout << "a = ";
    cin >> xa;
    cout << "b = ";
    cin >> xb;
    cout << "step = ";
    cin >> dx;
    cout << "eps = ";
    cin >> eps;
    */
    xa = 0;
    xb = 1;
    eps = 0.001;
    
    while(fabs(xb-xa) > eps)
    {
        c = (xa + xb)/2;
        if(func(xb)*func(c) < 0)
          xa = c;
        else
          xb = c;
    }
    cout << "\nx = " << xb << '\n';
    
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 29
01.04.2021, 17:22  [ТС] 5
Вы вероятно не поняли вопроса , сам код работает исправно . Я не могу выполнить задачу по преобразованию элементов кода конкретно в функции
0
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
01.04.2021, 18:22 6
Цитата Сообщение от geniy Посмотреть сообщение
Я не могу выполнить задачу по преобразованию элементов кода конкретно в функции
Как-то так требуется?

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 <cmath>
 
using namespace std;
 
double F(double x)
{
    return exp(sin(x)) - pow(2, cos(x));
}
 
void Dih(double &A, double &B, double(*f)(double))
{
    C = (A + B) / 2;
    if (f(B) * f(C) < 0) A = C;
    else B = C;
}
 
int main()
{
    double a, b, c, eps;
    cin >> a >> b;
    cin >> eps;
    
    while (b - a > eps) {
        Dih(a, b, F);
    }
    cout << (a + b) / 2 << endl;
    
    system("pause");
    return 0;
}
Добавлено через 6 минут
Цитата Сообщение от geniy Посмотреть сообщение
шаг (dx с клавиатуры)
Про какой шаг идёт речь? Я делал по примеру из источника, там за это речи нет.
0
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 29
01.04.2021, 18:49  [ТС] 7
Шаг проверки на наличие корня , допустим на промежутку от -10 до 10 есть 6 корней , при этом ваш код найдёт только 1

Добавлено через 39 секунд
задача именно в том , чтобы мой код сделать в функциях
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2021, 18:49
Помогаю со студенческими работами здесь

Решение нелинейного уравнения в общем виде, ввод с клавиатуры, метод дихотомии
Вобщем мне нужно решить нелинейное уравнение в общем виде. Пользователь вводит переменные, а...

Решение уравнения методом половинного деления и методом итераций
Решить уравнение следующими способами: 1) Метод половинного деления 2) Метод итераций Уравнение:...

Решение уравнения методом Ньютона
Здравствуйте, столкнулся с такой проблемой.Нужно решить уравнение a*ln|x+b|+c методом Ньютона, где...

Решение уравнения методом Ньютона
Здравствуйте, использую код с данного форума для нахождения корня нелинейного уравнения методом...

Решение уравнения методом ломаных
Помогите, пожалуйста! Не пойму, почему цикл, не доходя до конца, вылетает. int...

Решение уравнения методом хорд
Я решил нелинейное уравнение методом секущих(метод хорда). У меня получилось 10 корней, а надо 3....


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

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

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