Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Dmitriy1o1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 30
1

Решение уравнения методом Ньютона

12.02.2019, 16:57. Просмотров 1020. Ответов 4
Метки нет (Все метки)

Здравствуйте, использую код с данного форума для нахождения корня нелинейного уравнения методом Ньютона, но возникла проблема. При подстановке в df производной моего уравнения корень вычисляется некорректно, если же там стоит производная из первоначального кода ( pow(2.0,x)*log(2.0) - 4*x; ), то все отлично.. Как это понимать?

Код с моим уравнением и производной:
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 <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double f(double x)
{
    return 3 * cos(pow(x, 0.5) - 0.3) - 3 / (2 * x);
}
 
double df(double x)
{
    return -(1.5 * sin(pow(x, 0.5) - 0.3)) / pow(x, 0.5) + 3 / 2 * pow(x, 2);
}
 
double g(double x)
{
    return x - f(x) / df(x);
}
 
int main()
{
    double x;
    double eps;
    cout << "Enter initial root value   : "; cin >> x;
    cout << "Enter error of calculation : "; cin >> eps;
    for (double iter = 1; eps < fabs(f(x)); iter = iter + 1)
    {
        system("cls");
        cout << "Iteration : " << setprecision(0) << iter << endl;
        if (df(x) == 0)
            break;
        cout << "x    = " << x << endl;
        cout << "g(x) = " << g(x) << endl;
        cout << "df(x)= " << df(x) << endl;
        cout << "f(x) = " << f(x) << endl;
        x = g(x);
    }
    system("pause");
    return 0;
}
Первоначальный код:
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 <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double f(double x)
{
    return pow(2.0,x) - 2*pow(x, 2.0) - 1;
}
 
double df(double x)
{
    return pow(2.0,x)*log(2.0) - 4*x;
}
 
double g(double x)
{
    return x - f(x)/df(x);
}
 
int main()
{
    double x;
    double eps;
    cout<<"Enter initial root value   : ";cin>>x;
    cout<<"Enter error of calculation : ";cin>>eps;
    for(double iter = 1; eps < fabs(f(x)); iter = iter + 1)
    {
        system("cls");
        cout<<"Iteration : "<<setprecision(0)<<iter<<endl;
        if(df(x) == 0)//Чёртовский важный момент(!)
            break;
        cout<<"x    = "<<x    <<endl;
        cout<<"g(x) = "<<g(x) <<endl;
        cout<<"df(x)= "<<df(x)<<endl;
        cout<<"f(x) = "<<f(x) <<endl;
        x = g(x);
    }
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2019, 16:57
Ответы с готовыми решениями:

Решение уравнения c методом касательных (Ньютона)
На интервале с точностью Е(Е &gt; 0) определить значение одного корня уравнения: tg(7x) +...

Решение квадратного уравнения методом Ньютона
напишите прогу метод ньютона на С

Решение уравнения методом Ньютона. Локализация корня
Собственно, программа имеется, все довольно таки просто, но необходимо локализовать корень и найти...

Решение уравнения методом касательных (метод Ньютона) в С++, С
Доброго времени суток. Помогите решить методом касательных уравнение: 1/x - 2*x=0 Напечатать...

Найти решение уравнения на отрезке с точностью е методом Ньютона
найти решение уравнения x3 – 2x2 –4x + 7 = 0 на отрезке с точностью е методом Ньютона. ...

4
Крашеная
164 / 48 / 6
Регистрация: 06.08.2018
Сообщений: 115
Завершенные тесты: 1
12.02.2019, 19:00 2
Лучший ответ Сообщение было отмечено Dmitriy1o1 как решение

Решение

скобочки не забыли в производной случайно?
1
zss
Модератор
Эксперт С++
8597 / 7555 / 4675
Регистрация: 18.12.2011
Сообщений: 20,017
Завершенные тесты: 1
12.02.2019, 19:07 3
Цитата Сообщение от Dmitriy1o1 Посмотреть сообщение
3 / 2
Это равно единице, а не 1.5
1
Dmitriy1o1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 30
12.02.2019, 19:45  [ТС] 4
.. Благодарю за помощь)

И, если не затруднит, ещё один вопрос. Почему не получается вычислить точное значение первого корня? Считает только второй (2.876.. ), 0.554 почему-то не хочет.
0
Миниатюры
Решение уравнения методом Ньютона   Решение уравнения методом Ньютона   Решение уравнения методом Ньютона  

Решение уравнения методом Ньютона  
Dmitriy1o1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 30
13.02.2019, 19:09  [ТС] 5
Разобрался, закройте тему.
0
13.02.2019, 19:09
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2019, 19:09

Решение системы нелинейныз алгебраических уравнений методом Ньютона (2 уравнения)
Всем привет, ребята, кто может подсказать, как решается математически по методу Ньютону, разбирался...

Найти корень уравнения методом хорд и модифицированным методом Ньютона
Требуется решить уравнение 5sinx – x = 0 на отрезке с точностью E методом хорд и...

Вычислить методом Ньютона корень уравнения
Помогите, пожалуйста, написать программу, вычисляющую методом Ньютона: sinx - x + 0,5 = 0, интервал...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.