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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
#1

Решить функцию методом Ньютона - C++

17.10.2012, 17:21. Просмотров 1577. Ответов 24
Метки нет (Все метки)

Нужно решить функцию методом Ньютона http://www.cyberforum.ru/cgi-bin/latex.cgi?0.1 x^2 - x \ln \,x=0. Отрезок содержащий корень [1;2]. Точное значение должно выдать 1,1183. Но моя прога выдает -1.#IND
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>  // для setprecision
#include <cmath> // для pow и log
 
using namespace std;
double Rech1(double x)
{
    return 0,1*pow(x,2)-x*log10(x);  // начальная
}
double Rech2(double x)
{
    return 0,1*pow(x,2)-x*log10(x);           //Производная
}
void main()
{
    double x = 2, x0 = 1;
    double e = 0.0001;
    do
    {
        x0 = x;
        x = x0 - Rech1(x)/Rech2(x);
    }
    while (fabs(x0-x)>e);
    cout << setprecision (6)<<x;
 
  system("pause");
  
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2012, 17:21     Решить функцию методом Ньютона
Посмотрите здесь:

Методом Ньютона решить линейное уравнение - C++
Всем привет и хорошего настроения! Решаю вычмат. Методом Ньютона надо решить линейное уравненьице. Сам метод запроган. Хочу запрогать...

Уравнение методом Ньютона - C++
Доброго времени суток, помогите пожалуйста, справиться с уравнением, которое нужно реализовать методом Ньютона. Есть уравнение, скрин...

Функция Арксинус методом Ньютона - C++
Калькулятор имеет функции синус, косинус, необходимо написать арксинус методом Ньютона. Ниже код. Ошибка при вычислении отрицательных...

'разобраться' с уравнением методом Ньютона - C++
Подскажите пожалуйста план действий, как это делать. Ибо в заданиях подобного рода я бессилен

Решение СНАУ методом Ньютона - C++
РЕбят, такое дело, есть у меня задание, решение СНАУ методом Ньютона. Даже не знаю с чего начать, может поможете хотяб пример...

Интерполяция методом Ньютона и Лагранжа - C++
Задано табличное представление функции: x y 3 4 7 10 11 22 15 26 19 23 Сравнить методы интерполяции Лагранжа и Ньютона...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
17.10.2012, 17:32     Решить функцию методом Ньютона #2
Странно, функция и ее производная - одно и то же? Тем более там вроде вторая производная тоже нужна.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 17:36     Решить функцию методом Ньютона #3
Такая ошибка это или деление на 0 или извлечение корня из отрицательного числа.
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
17.10.2012, 18:41  [ТС]     Решить функцию методом Ньютона #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
26
27
28
29
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
double Rech1(double x)
{
    return 0,1*pow(x,2)-x*log10(x);  // начальная
}
double Rech2(double x)
{
    return 0.2*x - log(x) - 1;           //Производная
}
void main()
{
    double x = 2, x0 = 1;
    double e = 0.0001;
    do
    {
        x0 = x;
        x = x0 - Rech1(x)/Rech2(x);
    }
    while (fabs(x0-x)>e);
    cout << setprecision(6)<<x;
 
  system("pause");
 
}
Добавлено через 1 час 4 минуты
Цитата Сообщение от David Sylva Посмотреть сообщение
Такая ошибка это или деление на 0 или извлечение корня из отрицательного числа.
В каком месте?
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 18:45     Решить функцию методом Ньютона #5
Цитата Сообщение от иван_пропал Посмотреть сообщение
В каком месте?
Я не знаю в каком месте, я говорю в принципе, обычно при такой ошибке выдаёт -1.#IND
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
17.10.2012, 19:01     Решить функцию методом Ньютона #6
Не обязательно деление на 0, например еще логарифм отрицательного числа.
иван_пропал, это кстати по отладке заметно. Сначала число x становится все больше, а затем отрицательным, далее на этой итерации вылет. Мой совет: подробнее изучить алгоритм. И обратить внимание на вторую производную, которой здесь нет.
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
18.10.2012, 10:20  [ТС]     Решить функцию методом Ньютона #7
BumerangSP обратил я внимание и изучил поподробнее метод. Исправил код, но все же выдает 3,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
26
27
28
29
30
31
32
33
34
35
36
37
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
double Rech1(double x)
{
    return 0,1*pow(x,2)-x*log10(x);  // начальная
}
double Rech2(double x)
{
    return 0.2*x - log(x) - 1;           //Производная
}
double Rech3(double x)
{
    return 0.2 - 1/x;           //2я Производная
}
void main()
{
    double x , x0 = 1.5; //x0 приближенное значение корня
    double e = 0.0001;
    do
    {
        
        x = x0-(Rech1(x0)/Rech2(x0));
        x0 = x;
        cout<<x<<"\n";
 
    }
    while (abs(x-x0)<=e && (Rech1(x0)*Rech3(x0))>0);
    cout << setprecision(6)<<x;
 
  system("pause");
 
}
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
18.10.2012, 10:37     Решить функцию методом Ньютона #8
иван_пропал, не правильно посчитана 1 производная, ну и следовательно 2
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
18.10.2012, 13:20  [ТС]     Решить функцию методом Ньютона #9
doctor_lecter посчитал будет 0.2*x - log10(x) - 1
Изменил программу теперь она выводит без конца 1,37.... то есть не может выйти из цикла. Я думаю сдесь нужно применить указатель но чет не получается...
Кликните здесь для просмотра всего текста

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 "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
double Rech1(double x)
{
    return 0.1*pow(x,2)-x*log10(x);  // начальная
}
double Rech2(double x)
{
    return 0.2*x - log10(x) - 1;           //Производная
}
double Rech3(double x)
{
    return 0.2 - 1/x;           //2я Производная
}
void main()
{
    double x , x0 = 1.5; //x0 приближенноу значение корня
    double e = 0.0001;
 
    do
    {
        
        x = x0-(Rech1(x0)/Rech2(x0));
        x0 = x;
        cout<<x<<"\n";
 
    }
    while (abs(x-x0)<=e && (Rech1(x0)*Rech3(x0))>0);
    cout << setprecision(6)<<x;
 
  system("pause");
 
}
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
18.10.2012, 13:47     Решить функцию методом Ньютона #10
Цитата Сообщение от иван_пропал Посмотреть сообщение
0.2*x - log10(x) - 1
Это то же не правильно. И вторую производную надо пересчитать.
А зацикливается потому что у вас на каждой итерации x=x0

Добавлено через 10 минут
А у вас в исходной функции логарифм натуральный или десятичный?
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
18.10.2012, 16:14  [ТС]     Решить функцию методом Ньютона #11
Цитата Сообщение от doctor_lecter Посмотреть сообщение
А у вас в исходной функции логарифм натуральный или десятичный?
ln то есть 10, а производные верные. А то что x0=x это должно быть так а то как иначе бедет меняться x0 чтобы приближаться к корню уравнения.

Добавлено через 2 минуты
Цитата Сообщение от doctor_lecter Посмотреть сообщение
А у вас в исходной функции логарифм натуральный или десятичный?
там написано ln я подразумеваю что это логарифм по основанию 10. А то что x0=x это должно быть так а то как иначе будет меняться x чтобы приближаться к корню уравнения.
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
18.10.2012, 16:19     Решить функцию методом Ньютона #12
иван_пропал, исходная функция такая?
http://www.cyberforum.ru/cgi-bin/latex.cgi?0,1*{x}^{2}-x*ln(x)
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
18.10.2012, 16:22     Решить функцию методом Ньютона #13
Цитата Сообщение от иван_пропал Посмотреть сообщение
ln то есть 10
ln - натуральный логарифм, lg - десятичный.
0.2*x - log10(x) - 1 - не верно ни для ln, ни для lg
0.2*x - log(x) - 1; - верно для ln
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
18.10.2012, 16:23     Решить функцию методом Ньютона #14
иван_пропал, ln - это log, не log10.
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
18.10.2012, 16:23     Решить функцию методом Ньютона #15
Цитата Сообщение от иван_пропал Посмотреть сообщение
А то что x0=x это должно быть так а то как иначе бедет меняться x0 чтобы приближаться к корню уравнения
У в конце каждой итерации получится что x=x0, и abs(x-x0) = 0
BumerangSP
18.10.2012, 16:24
  #16

Не по теме:

doctor_lecter, да, я все же хочу уточнить, что ТС имеет в виду.

иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
18.10.2012, 16:27  [ТС]     Решить функцию методом Ньютона #17
Цитата Сообщение от doctor_lecter Посмотреть сообщение
А у вас в исходной функции логарифм натуральный или десятичный?
В задании написано lnx я подразумеваю что это логарифм по основанию 10.
Производные верные. А то что x0=x это должно быть так а то как иначе бедет меняться x0 чтобы приближаться к корню уравнения.
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
18.10.2012, 16:28     Решить функцию методом Ньютона #18
1-ая производная: 0.2*x-ln(x)-1
2-ая: 0.2-1/x
Все так, осталось убрать log10 отовсюду)
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
18.10.2012, 16:31     Решить функцию методом Ньютона #19
Цитата Сообщение от иван_пропал Посмотреть сообщение
Производные верные. А то что x0=x это должно быть так а то как иначе бедет меняться x0 чтобы приближаться к корню уравнения.
Какие конкретно? И в любом случае саму функцию надо переписать.
0.2*x - log(x) - 1 - это если у вас ln
если lg - то производная будет такая: 0.2*x - log10(x) - 1/log(10)
А цикл правильно организовать так: сначала x0 = x; потом вычисление нового x
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 16:34     Решить функцию методом Ньютона
Еще ссылки по теме:

Решение СНАУ методом Ньютона - C++
Нужно написать программу для решения систем нелинейных алгебраических уравнений методом Ньютона. Наибольшая сложность заключается в том что...

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

Вычислить методом Ньютона корень уравнения - C++
Уважаемый программисты,помогите пожалуйста вот такую курсовую задали,я не то что на с++,а просто так не смогу решить этот пример ...

Аппроксимировать данные таблицы методом Ньютона - C++
Помогите пожалуйста, был занят другой программой а на эту времени не хватило, да и не понял как делать, а сдать нужно :boredom: Функция...

Нахождения максимума функции методом Ньютона - C++
Мне надо на с++ написать код для нахождения максимума функции методом ньютона. Код бы я написать смог но вот как методом ньютона найти...


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

Или воспользуйтесь поиском по форуму:
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
18.10.2012, 16:34  [ТС]     Решить функцию методом Ньютона #20
задание http://www.fayloobmennik.net/2286701
Yandex
Объявления
18.10.2012, 16:34     Решить функцию методом Ньютона
Ответ Создать тему
Опции темы

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