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

Решение уравнений методом хорд на C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 126, средняя оценка - 4.65
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
20.02.2011, 18:20     Решение уравнений методом хорд на C++ #1
Здравствуйте. Столкнулся с проблемой, решения уравнения методом хорд, с программированием все хорошо, и с матетематикой не плохо, только вот не могу понять алгоритм решения, один хороший пример и я бы разобрался.
Помогите пожалуйста решить уравнение вида aX^3+bX^2+cX+d=0,
буду очень признателен, можно без комментариев.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
20.02.2011, 21:11     Решение уравнений методом хорд на C++ #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вставьте только свою функцию
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
#include <iostream>
#include <cmath>
 
double func(double x)
{
    return pow(x, 3) - 2 * pow(x, 2) - 6 * x - 1;
}
 
double find(double infinum, double supremum, double epsilon)
{
    while (fabs(supremum - infinum) > epsilon)
    {
        infinum = supremum - (supremum - infinum) * func(supremum) / (func(
                supremum) - func(infinum));
        supremum = infinum - (infinum - supremum) * func(infinum) / (func(
                infinum) - func(supremum));
    }
 
    return supremum;
}
 
int main()
{
    double a = -5, b = 5;
    std::cout << find(a, b, 0.0001) << std::endl;
    return 0;
}
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
21.02.2011, 05:24  [ТС]     Решение уравнений методом хорд на C++ #3
Огромное спасибо!!!
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
21.02.2011, 15:44     Решение уравнений методом хорд на C++ #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <cmath>
#include <locale.h>
using namespace std;
double f(double x)
{
return pow(x,3)-0.2*pow(x,2)+0.2*x-1.2;
}
 
double findRoot(double a, double b, double e)
{
while(fabs(f(b)) > e)
{
a = b - ((b - a) * f(b))/(f(b) - f(a));
b = a - ((a - b) * f(a))/(f(a) - f(b));
}
return b;
}
int main()
{
setlocale(LC_ALL,"Russian");
double a, b, e;
a=0.5; b=1.5; e=0.0001;
cout<<"Корень уравнения x="<<findRoot(a, b, e)<<endl;
}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
21.02.2011, 21:00     Решение уравнений методом хорд на C++ #5
olleg90, вы перепутали метод хорд с методом касательных. У вас как раз пример решения методом касательных
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
23.02.2011, 17:34     Решение уравнений методом хорд на C++ #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
M128K145,да нет= )) вот метод касательных или как его еще называют метод Ньютона
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
 #include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
double f(double x) { return cos(x)-x+1; } //Функция, нули которой ищем
double df(double x) { return -sin(x)-1; } //Её производная
 
int main() {
 double tmp,x,eps;
 int N=0;
 
 cout<<"eps=";
 cin>>eps;   //Точность
 cout<<"x0=";
 cin>>x;     //Начальное приближение
 tmp=x+2*eps;
    while(fabs(x-tmp)>eps) { //Выбран останов |x[n]-x[n+1]|<eps
     tmp=x;
     x=x-f(x)/df(x);
     N++;
   }
   cout.setf(ios::scientific);
cout<<endl<<endl<<"x="<<x<<endl<<"N="<<N<<endl;
cin>>N;
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2013, 23:12     Решение уравнений методом хорд на C++
Еще ссылки по теме:

C++ Решение нелинейных уравнений методом простой итерации
Решение уравнений методом хорд C++
C++ Решение системы нелинейных уравнений методом Ньютона (С/С++)

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

Или воспользуйтесь поиском по форуму:
Den190312
Сообщений: n/a
07.05.2013, 23:12     Решение уравнений методом хорд на C++ #7
огромное спасибо за подсказку полезную, но возможно задать вопрос, здесь что дает N? итерации? т.е. начиная с 0 и до какой-то определенной, а также, что такое tmp=x+2*eps - во всех алгортимах умалчивается предназначение, а также вопрос, где мы пишем double f(double x) { return 4*x-16/pow(x,2); } - здесь производная или просто функция изначальна? а для следующего мы должныиспользовать вторую производную..
Yandex
Объявления
07.05.2013, 23:12     Решение уравнений методом хорд на C++
Ответ Создать тему
Опции темы

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