Форум программистов, компьютерный форум CyberForum.ru

Метод половинного деления...(непонятная функция) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
01.05.2010, 14:10     Метод половинного деления...(непонятная функция) #1
Программка, для реализации численного метода половинного деления СЛАУ

а^x-b - c - x = 0

а , b , c - вводятся!!!

Что то сколько не просмотрел уравнений нигде в уравнениях, я не увидел что бы "а" "b" "c" , были сразу в уравнении и что бы они еще и вводились

Что то не понятно!!!!!!!!!! Получаются, - "а" "b" "c" это переменные???

Я просто рассмотрел пример, но не понял как применить его к моему варианту...

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
#include <conio.h>
#include <math.h>
#include <iostream>
#define pi 3.14
 
using namespace std;
 
double f(double x)
{
  return   x*x-(cos(pi*x));
}
 
int main()
{
        int n=0;
        double a,b, c1,c,eps;
 
        cout<<"a = "; cin>>a;
        cout<<"b = "; cin>>b;
        cout<<"c = "; cin>>c1;
        
        cout<<"eps="; cin>>eps;
        
        do
        {
                c = (a + b ) / 2;
                
                if(f(c)*f(a)<=0)
                {
                    b=c;
                }
 
                else 
                {
                    a=c;
                }
 
                n+=1;
 
        }
 
        while( fabs(a - b) >= eps);
        {
                cout<<"c="<<c<<"\n";
                cout<<"n="<<n<<"\n";
        }
 
                _getch();
 
        return 0;
}
А еще вопрос,а для построения графика по идее мне нужно получить все решения (то есть корни)....
А то просто не понятно вот получу я 1-н корень, но это при условии если вообще решу уравнение, ну и вот и что график получится у меня точка ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2010, 14:10     Метод половинного деления...(непонятная функция)
Посмотрите здесь:

C++ Метод половинного деления.
Метод половинного деления C++
C++ Метод половинного деления
Метод половинного деления C++
Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
01.05.2010, 16:04     Метод половинного деления...(непонятная функция) #2
Цитата Сообщение от ForestG Посмотреть сообщение
а^x-b - c - x = 0
а , b , c - вводятся!!!
Что то сколько не просмотрел уравнений нигде в уравнениях, я не увидел что бы "а" "b" "c" , были сразу в уравнении и что бы они еще и вводились
Что то не понятно!!!!!!!!!! Получаются, - "а" "b" "c" это переменные???

т.е. ?
если у вас уравнение такого вида , например
11^x-8-21-x=0
То a=11 b=8 c=21
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
01.05.2010, 23:15  [ТС]     Метод половинного деления...(непонятная функция) #3
Извиняюсь, с формулой ошибся, а точнее не верно оформил а^(x-b) - c - x = 0
где (x-b) - это степень
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.05.2010, 23:17     Метод половинного деления...(непонятная функция) #4
ForestG, в чем проблема? Формула есть, коэффициенты вводятся, что не понятно то?
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
01.05.2010, 23:23  [ТС]     Метод половинного деления...(непонятная функция) #5
Да нет это понятно, единственное не разберусь, а, b, с как с ними работать...
Просто в коде который я нашел там просто формула x*x-(cos(pi*x)); - тут не видно никаких a,b ит.д....
И вот читал теорию, тоже не пойму, там сказано что нужно брать какой - то отрезок [a,b]- откуда его брать???? Произвольно или как-то еще...

Добавлено через 57 секунд
Блин что ж я такой тупой то

Добавлено через 2 минуты
Цитата Сообщение от ForestG Посмотреть сообщение
if(f(c)*f(a)<=0)
Мы тут функции возвращаем, a*b - верно???

Добавлено через 1 минуту
Ой с * а, прошу прощения, да же объяснить не могу по человечески
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
01.05.2010, 23:25     Метод половинного деления...(непонятная функция) #6
Цитата Сообщение от ForestG Посмотреть сообщение
Мы тут функции возвращаем, a*b - верно???

тут мы проверяем меньше ли нуля или равно нулю произведение f(c)*f(a)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.05.2010, 23:27     Метод половинного деления...(непонятная функция) #7
Цитата Сообщение от ForestG Посмотреть сообщение
Мы тут функции возвращаем, a*b - верно???
Во-первых здесь ничего не возвращается, здесь умножается значение функции при значении аргумента равному a на значение функции при значении аргумента равному b, далее проверяется меньше ли это произведение нуля.
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
01.05.2010, 23:39  [ТС]     Метод половинного деления...(непонятная функция) #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Во-первых здесь ничего не возвращается, здесь умножается значение функции при значении аргумента равному a на значение функции при значении аргумента равному b, далее проверяется меньше ли это произведение нуля.
Согласен, я просто косноязычный...

Добавлено через 2 минуты
Так отрезок в котором мы будем выполнять, вот эту операцию c = (a + b ) / 2;

Мы ведь задаем его верно!!! Кажется я начал вникать...
Ну при условии если это так!

Добавлено через 3 минуты
А вот еще вопрос, а корнями что у меня будет???
А и в добавок fabs(a - b) - это же как я понимаю какая -то встроенная функция???

Добавлено через 1 минуту
Цитата Сообщение от ForestG Посмотреть сообщение
Во-первых здесь ничего не возвращается, здесь умножается значение функции при значении аргумента равному a на значение функции при значении аргумента равному b, далее проверяется меньше ли это произведение нуля.
Причем меньше либо равно

Добавлено через 3 минуты
Ну ладно вы наверное устали от моего бреда спасибо за внимание...
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.05.2010, 23:39     Метод половинного деления...(непонятная функция) #9
Насколько я понял, в твоем случае имеет место функция:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{\left(x-b \right)}-c-x
a, b, и c являются коэффициентами и вводятся пользователем. Они являются константными.
Также пользователь вводит значения начала и конца отрезка, на котором тебе необходимо найти такое значение x при котором значение функции равно нулю.
Вот вся задача.
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
01.05.2010, 23:52  [ТС]     Метод половинного деления...(непонятная функция) #10
По идее так они и есть ...
1. a,b,c - константы а = 3, b =1, c =2
2. А вот задавать интервал, думаю да, так как я не понял теорию, а вот корней у меня будет много по идее или корень должен быть один, в теории по моему написано 1, но я тогда вообще не пойму зачем тогда интервал брать???
Я когда увидел это уравнение я подумал, что его ребенок решит, думал зачем тут интервал брать и там кучу проверок делать...
Тупо подставил а = 3, b =1, c =2 и нашел дурацкий x, т.е Корень, а в теории все по другому...
И что самое интерсное мне даже училка, не удосужилась объяснить, почему именно так...

Добавлено через 2 минуты
Лучше подскажите, что с корнями то делать, я просто еще и график буду делать по ним.... А вот опять вопрос... х - то понятно а вот Y - какое значение будет принимать??????

Добавлено через 2 минуты
Просто тупо все значения заданного отрезка ведь так???

Добавлено через 48 секунд
Я конечно понимаю, с этими вопросами мне к учителям, а не к вам.... В принципе можете игнорировать...
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.05.2010, 23:55     Метод половинного деления...(непонятная функция) #11
Цитата Сообщение от ForestG Посмотреть сообщение
а вот корней у меня будет много по идее или корень должен быть один
На заданном интервале значений может быть и несколько, а может и вообще не быть.
Цитата Сообщение от ForestG Посмотреть сообщение
х - то понятно а вот Y - какое значение будет принимать??????
У тебя есть формула, подставляешь в нее коэффициенты и нужный тебе x, получаешь y.
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
02.05.2010, 00:06  [ТС]     Метод половинного деления...(непонятная функция) #12
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
У тебя есть формула, подставляешь в нее коэффициенты и нужный тебе x, получаешь y.
Не понял почему коэффиценты (т.е а , b , c) ???

Добавлено через 6 минут
Нет все же я склоняюсь что Y - должен принимать все значения заданного интервала!!! Не знаю почему, но мне так кажется, т.к мы X - ищем на интервале правильно, значит и Y должен принимать значения этого интервала???
Надо мне опять в школу...

Добавлено через 54 секунды
Может хоть кто нибудь переубедит меня плз....
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 00:10     Метод половинного деления...(непонятная функция) #13
ForestG, еще раз...
У функции есть три коэффициента a, b, и c, данные коэффициенты константы.
Аргументом функции является x. Если тебе необходимо узнать значение функции при некотором x, ты подставляешь в функцию заданные коэффициенты и интересующий тебя x.
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
02.05.2010, 00:16  [ТС]     Метод половинного деления...(непонятная функция) #14
Ага все согласен Отдельное спс, за стойкость...

Добавлено через 59 секунд
Я вот тут немного переделал прогу...
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
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
double f(double x)
{
  return  pow(3, x - 1) - 2;
}
 
int main()
{
 
 
        int n=0;
        double a,b,c,eps;
 
        cout<<"a = "; cin>>a;
        cout<<"b = "; cin>>b;
        cout<<"c = "; cin>>c;
        
        cout<<"eps="; cin>>eps;
        
        do
        {
                c = (a + b ) / 2;
                
                if(f(c)*f(a)<=0)
                {
                    b=c;
                }
 
                else 
                {
                    a=c;
                }
 
                n+=1;
 
        }
 
        while( fabs(a - b) >= eps);
        {
                cout<<"c="<<c<<"\n";
                cout<<"n="<<n<<"\n";
        }
 
                _getch();
 
        return 0;
}
Добавлено через 1 минуту
А вот тут "n" - это же количество корне я прав? А "с" - это и есть мои корни да???

Добавлено через 1 минуту
Цитата Сообщение от ForestG Посмотреть сообщение
cout<<"c = "; cin>>c;
- только вот это мне вообще не нужно
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 00:21     Метод половинного деления...(непонятная функция) #15
Цитата Сообщение от ForestG Посмотреть сообщение
А вот тут "n" - это же количество корне я прав? А "с" - это и есть мои корни да???
n - это количество делений за которое было получен корень. с - это найденный корень.
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
02.05.2010, 14:45  [ТС]     Метод половинного деления...(непонятная функция) #16
Забыл удалить когда думал зачем мне нужны а и b

Все равно не пойму зачем такой тупой метод... брать интервал какой-то, по видимому я в алгебре не дуб

Ну ладно если я прав, на счет
Цитата Сообщение от ForestG Посмотреть сообщение
А вот тут "n" - это же количество корне я прав? А "с" - это и есть мои корни да???
То тогда я массив буду использовать, а потом с графиком буду делать, что самое интересное, я наверное эту консольку так и оставлю просто буду запускать из С# (Win Form) Там буду график строить, а значения в блокнотик запишу...

А этому чертову преподу еще и вирусню скину, прикреплю к своему заданию

Добавлено через 3 минуты
Хмммм...
Значит колчество корне можно будет подсчитать..
if(f(c)*f(a)<=0)
{
Корень++;
b=c;
}

else
{
Корень++;
a=c;
}

Да????

Добавлено через 1 минуту
Прошу прощения за тупые вопросы, просто до сих пор не пойму почему мы именно так ищем корни...
Поэтому и такие тупые вопросы...

Добавлено через 45 секунд
Мне кстати эти нелинейные уравнения напомнили фильм "Игры разума"...

Добавлено через 2 минуты
Рейтинг сообщений: 469 - в сумме 4+9 = 13 и 9 роковые числа

Добавлено через 3 минуты
Ну ладненько спс за терпение...

Добавлено через 14 часов 12 минут
Переделал программульку.... Что бы график рисовать...!!!???
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
54
55
56
57
58
59
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
double f(double x)
{
  return  pow(3, x - 1) - 2 - x;
}
 
int main()
{setlocale( LC_ALL,"Russian" );
 
    cout<<"Вас приветствует метод половинного деления СЛАУ:)\n\n";
        
    int k =0;
    int n = 0;
    double a,b,c,eps;
 
    cout<<"Введите отрезок\n";
 
    cout<<"a = "; cin>>a;
    cout<<"b = "; cin>>b;
 
    cout<<"Точность = "; cin>>eps;
       
for( ; a < b; a++)
{
    do
    {
        c = (a + b) / 2;
        
        if(f(c) * f(a) <= 0)
        {
            b = c;
        }
 
        else 
        {
            a = c;
        }
 
        n+=1;
 
    
    }   
 
    while(fabs(b - a) <= eps); 
    {
         cout<<"Корень = "<<c<<"\n";
         cout<<"n = "<<n<<"\n";
                
    } 
}
    
_getch();
return 0;
}
Не знаю правильно или нет, но кажется теперь можно построить график, по найденным корням на это приделе ([a,b])

P.S Поправьте ПЛЗ, если не прав!!!
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
02.05.2010, 14:59     Метод половинного деления...(непонятная функция) #17
ForestG, посмотрите тему Нахождение корней уравнения здесь есть два варианта решения
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2010, 15:00     Метод половинного деления...(непонятная функция)
Еще ссылки по теме:

C++ Метод половинного деления
C++ Метод половинного деления
C++ Метод половинного деления

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

Или воспользуйтесь поиском по форуму:
ForestG
 Аватар для ForestG
32 / 32 / 3
Регистрация: 21.11.2009
Сообщений: 201
02.05.2010, 15:00  [ТС]     Метод половинного деления...(непонятная функция) #18
)) А я от туда и содрал))
Yandex
Объявления
02.05.2010, 15:00     Метод половинного деления...(непонятная функция)
Ответ Создать тему
Опции темы

Текущее время: 01:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru