Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 17.01.2022
Сообщений: 21

Заданы коэффициенты полинома 3 степени и точность. Найти корень уравнения методом ньютона с введенной точностью?

06.02.2022, 10:07. Показов 2081. Ответов 6
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include <locale.h>
 
 
int main()
{
   setlocale(LC_ALL,"Rus");
   double y,a0,a1,a2,a3,x,f,f1;
   printf("Введите значения коэфициэнтов a0, a1, a2, a3:");
   scanf("%lf %lf %lf %lf", &a0, &a1, &a2, &a3);
   double Lb3 (double x)
   {
    return a0+a1*x+a2*pow(x,2)+a3*pow(x,3);
   }
   
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2022, 10:07
Ответы с готовыми решениями:

Найти корень уравнения методом Ньютона с точностью e=10, в минус 3 степени.
Найти корень уравнения методом Ньютона с точностью e=10, в минус 3 степени. Каждое новое приближенное корня уравнения вычистялется из...

Найти корень уравнения методом Ньютона с заданной точностью.
Заданы коэффициенты полинома третей степени и точность. Найти корень уравнения методом Ньютона с заданной точность. Подскажите алгоритм...

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

6
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6249 / 2961 / 1048
Регистрация: 01.06.2021
Сообщений: 10,998
06.02.2022, 12:38
Лучший ответ Сообщение было отмечено Volga_ как решение

Решение

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
#include <iostream>
#include <cmath>
 
double f(double x, double a0, double a1, double a2, double a3)
{
    return a0 + a1*x + a2*x*x + a3*x*x*x;
}
 
double df(double x, double a1, double a2, double a3)
{
    return a1 + 2.*a2*x + 3.*a3*x*x;
}
 
double findRoot(double x, double eps, double a0, double a1, double a2, double a3)
{
    double h = f(x, a0, a1, a2, a3) / df(x, a1, a2, a3);
    while (fabs(h) >= eps)
    {
        h = f(x, a0, a1, a2, a3) / df(x, a1, a2, a3);
        x = x - h;
    }
    return x;
}
 
int main()
{
    double a0, a1, a2, a3, x0, eps;
    std::cout << "a0 = "; std::cin >> a0;
    std::cout << "a1 = "; std::cin >> a1;
    std::cout << "a2 = "; std::cin >> a2;
    std::cout << "a3 = "; std::cin >> a3;
    std::cout << "x0 = "; std::cin >> x0;
    std::cout << "eps = "; std::cin >> eps;
    std::cout.precision(16);
    std::cout << findRoot(x0, eps, a0, a1, a2, a3);
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
06.02.2022, 12:47
Лучший ответ Сообщение было отмечено Royal_X как решение

Решение

FallenPaladin, на основе код Royal_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
#include <iostream>
#include <cmath>
double a0, a1, a2, a3;
double f(double x)
{
    return a0 + a1 * x + a2 * x * x + a3 * x * x * x;
}
double df(double x)
{
    return a1 + 2. * a2 * x + 3. * a3 * x * x;
}
double findRoot(double x, double eps)
{
    double h = f(x) / df(x);
    while (fabs(h) >= eps)
    {
        h = f(x) / df(x);
        x -= h;
    }
    return x;
}
int main()
{
    double x0, eps;
    std::cout << "a0 = "; std::cin >> a0;
    std::cout << "a1 = "; std::cin >> a1;
    std::cout << "a2 = "; std::cin >> a2;
    std::cout << "a3 = "; std::cin >> a3;
    std::cout << "x0 = "; std::cin >> x0;
    std::cout << "eps = "; std::cin >> eps;
    std::cout.precision(16);
    std::cout << findRoot(x0, eps);
    return 0;
}
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6249 / 2961 / 1048
Регистрация: 01.06.2021
Сообщений: 10,998
06.02.2022, 12:53
Volga_, думаю, еще можно избавиться от <cmath>, а при желании и от x0 (но мне лень выводить формулу).
1
0 / 0 / 0
Регистрация: 17.01.2022
Сообщений: 21
06.02.2022, 15:02  [ТС]
Royal_X А для чего в коде используется x0 и eps?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6249 / 2961 / 1048
Регистрация: 01.06.2021
Сообщений: 10,998
06.02.2022, 15:24
Лучший ответ Сообщение было отмечено FallenPaladin как решение

Решение

Цитата Сообщение от FallenPaladin Посмотреть сообщение
для чего в коде используется x0 и eps
eps это погрешность, чем будет меньше значение eps, тем точнее будет значение найденного корня. Обычно от 1e-5 до 1e-8, но все зависит также от самого уравнения и начального значения x0. Как вы заметили, в функции findRoot, есть такой цикл:
C++
1
2
3
4
5
while (fabs(h) >= eps)
{
    h = f(x) / df(x);
    x -= h;
}
Цикл выполняется до тех пор, пока абсолютное значение h больше или равно eps. Чем больше бы делаем итераций, тем меньше становится h и тем точнее становится x. Переусердствовать с eps, выбирая значение близкое к нулю, тоже не нужно, ибо тип double в С++ имеет свои ограничения в плане точности и есть риск зацикливания.

Добавлено через 4 минуты
Что касается x0 - то это начальное значение (приближение). Уж так устроен метод Ньютона, что для старта нужно задать такое значение. От x0 зависит какой конкретно корень мы получим (если уравнение имеет несколько корней) и как быстро мы его получим (через сколько итераций). Бывают хорошие начальные значения, а бывают плохие (они видны на фрактале Ньютона). Очень часто сперва визуализируют график функции и только потом выбирают по графику нужное начальное значение.
1
0 / 0 / 0
Регистрация: 17.01.2022
Сообщений: 21
06.02.2022, 15:31  [ТС]
Royal_X, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2022, 15:31
Помогаю со студенческими работами здесь

Найти корень уравнения с точностью не хуже 0,001 методом Ньютона
Помогите пожалуйста найти корень 2lnx + 2x — 3 = 0 точностью не хуже 0,001

Задать коэффициенты полинома и найти корень методом половинного деления
Разработать программу, позволяющую уточнить корни уравнения an*x^n+a(n-1)x^(n-1) +...+a1x+a0=0 на интервале с точносью ebs . Должна быть...

Найти корень нелинейного уравнения F(x)=0 методом касательных (метод Ньютона). Крайние значения предела ([a,b]) содержащий корень и погрешность (\epsi
Найти корень нелинейного уравнения F(x)=0 методом касательных (метод Ньютона). Крайние значения предела () содержащий корень и погрешность...

Найти наименьший корень уравнения модифицированным методом Ньютона и комбинированным методом
Может кто помочь с заданием, никак не могу найти примеры этих методов Найти наименьший корень уравнения x^5-x-0.2=0 Найти решение...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru