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

Найти корень нелинейного уравнения методом Ньютона - C++

Восстановить пароль Регистрация
 
nesterka
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 15
03.11.2016, 15:23     Найти корень нелинейного уравнения методом Ньютона #1
Добрый день!
Помогите, пожалуйста, найти корень уравнения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{1.4}^{x}-x=0
с точностью e = 10-5 при заданном значении начала отрезка а = 3
Дополнительно дали вот эти данные, но я даже не знаю для чего.
(1.4*ln1.4-1).
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
03.11.2016, 15:33     Найти корень нелинейного уравнения методом Ньютона #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
28
29
30
31
32
33
34
#include <iostream>
#include <iomanip>
#include <cmath>
 
const double eps = 1e-5;
 
// функция 
double f(const double x)
{
    return pow(1.4,x) - x;
}
 
// производная функции
double df(const double x)
{
    return (f(x+eps)-f(x-eps))/(2*eps); // численное вычисление производной
    //return log(1.4)*pow(1.4,x)-1; // аналитическое вычисление производной
}
 
// поиск корня
double getRoot(double x) {
   double x1  = x - f(x)/df(x);
   double x0 = x;
   while(fabs(x0-x1) > eps) {
      x0 = x1;
      x1 = x1 - f(x1)/df(x1);
   }
   return x1;
}
 
int main()
{
    std::cout << std::setprecision(8) << getRoot(3) << std::endl;
}
Даценд
Модератор
 Аватар для Даценд
2526 / 2441 / 1248
Регистрация: 20.04.2015
Сообщений: 4,639
03.11.2016, 15:38     Найти корень нелинейного уравнения методом Ньютона #3
nesterka,
(1.4*ln1.4-1) - функция производной
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
double f(double x)
{
    return pow(1.4, x)-x;
}
 
double fp(double x)
{
    return pow(1.4, x)*log(1.4)-1;
}
 
int main()
{
    double a=3, e=1e-5, x;
    x=a;
    while (abs(f(x))>e)
    {
        x = x - f(x) / fp(x);
    }
    std::cout<<"x=" << x;
}
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
03.11.2016, 15:41     Найти корень нелинейного уравнения методом Ньютона #4
Цитата Сообщение от Даценд Посмотреть сообщение
C++
1
abs(f(x))>e
Вы имели в виду
C++
1
fabs(f(x))>e
Даценд
Модератор
 Аватар для Даценд
2526 / 2441 / 1248
Регистрация: 20.04.2015
Сообщений: 4,639
03.11.2016, 15:53     Найти корень нелинейного уравнения методом Ньютона #5
SpBerkut,
Не помню, начиная с которого стандарта есть перегрузка double abs (double)
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
03.11.2016, 16:20     Найти корень нелинейного уравнения методом Ньютона #6
Цитата Сообщение от Даценд Посмотреть сообщение
Не помню, начиная с которого стандарта есть перегрузка double abs (double)
Запускал на C++14. Выдаёт x=3.
Даценд
Модератор
 Аватар для Даценд
2526 / 2441 / 1248
Регистрация: 20.04.2015
Сообщений: 4,639
03.11.2016, 17:21     Найти корень нелинейного уравнения методом Ньютона #7
SpBerkut,
из 14 стандарта:

8 In addition to the double versions of the math functions in <cmath>, C++ adds float and long double overloaded versions of these functions, with the same semantics.
9 The added signatures are:
float abs(float);
float acos(float);
float acosh(float);


А на деле...
1) В CodeBlocks компилятор GNU GCC (стандарт C++14) в упор не видит abs из <cmath> ни в какой перегрузке. Зато прекрасно видит и использует std::abs версии double
2) VS2010 (в котором я писал и проверял код из #3) прекрасно работает с abs(double), даже если не подключить <cmath> и не указать std::
regio1961
 Аватар для regio1961
89 / 89 / 42
Регистрация: 06.06.2016
Сообщений: 211
03.11.2016, 17:34     Найти корень нелинейного уравнения методом Ньютона #8
Никого не смущает, что у уравнения
http://www.cyberforum.ru/cgi-bin/latex.cgi?1.4^x - x = 0
два корня?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2016, 18:37     Найти корень нелинейного уравнения методом Ньютона
Еще ссылки по теме:

C++ Найти корень уравнения на заданном интервале методом Ньютона
Поиск корня нелинейного уравнения простой итерацией, половинным делением, методом Ньютона C++
Найти корень уравнения методом хорд и методом касательных C++

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

Или воспользуйтесь поиском по форуму:
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
03.11.2016, 18:37     Найти корень нелинейного уравнения методом Ньютона #9
Цитата Сообщение от regio1961 Посмотреть сообщение
Никого не смущает, что у уравнения
Нет. Метод Ньютона находит лишь один корень.
Yandex
Объявления
03.11.2016, 18:37     Найти корень нелинейного уравнения методом Ньютона
Ответ Создать тему
Опции темы

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