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

Код решения кубического уравнения

20.12.2013, 17:55. Показов 43086. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать в С++ код решения уравнения типа: A*x^3+B*x^2+C*x+D, кто знает, пожалуйста напишите, мне сказали, что нужно решать по схеме Горнера. На вход поступают числа A,B,C,D, на выход корни уравнения
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2013, 17:55
Ответы с готовыми решениями:

Написать программу решения кубического уравнения
Написать программу решения уравнения ax^3+bx=0 для произвольных a и b.Зарание спасибо.

Функция для решения кубического уравнения с комплексными коэффициентами
Помогите пожалуйста написать функцию для решения кубического уравнения a*z^3+b*z^2+c*z+d=0 с комплексными коэффициентами. Подстановской...

Алгоритм и код программы решения уравнения Пуассона методом матричной прогонки
Объясните, пожалуйста алгоритм и код на Си++ задачи: ∂2P/∂x2+∂2P/∂y2=-f(x,y)

6
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
20.12.2013, 18:15
Цитата Сообщение от vlad0995 Посмотреть сообщение
код решения уравнения типа: A*x^3+B*x^2+C*x+D
Это не уравнение. В уравнении должен быть знак равно. Так что скорее всего вам надо не решать уравнение, а вычислить значение. Схема Горнера делает именно это. Так что сначала уточните задачу.
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 41
20.12.2013, 21:47  [ТС]
забыл дописать A*x^3+B*x^2+C*x+D=0
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
20.12.2013, 22:09
А какой способ решения вам не сказали? Потому что можно решать по формуле Кардано - довольно муторная история, либо численно. Могут быть два комплексных корня. Их тоже надо считать?
Можно ли использовать пакет комплексной арифметики или комплексные числа тоже самому программировать?
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 41
20.12.2013, 22:32  [ТС]
преподавателю без разницы каким способом я буду решать, я сначала попробовал решить по Кардано, сам написал код, но он не работает, потом вспомнил что программа не может вычислить квадратный корень из отрицательного числа.

Добавлено через 4 минуты
преподавателю без разницы каким способом я буду решать, я сначала попробовал решить по Кардано, сам написал код, но он не работает, потом вспомнил что программа не может вычислить квадратный корень из отрицательного числа.
Вот код, который я написал, может сможете исправить, был бы очень благодарен ) Пользовался формулами с этого сайта: http://ateist.spb.ru/mw/kardano.htm
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#pragma once
#include <iostream>
#include <stdio.h>  
#include <conio.h>
#include <locale.h>
#include <math.h>
const double PI = 3.1415926535897932384626433832795;
using namespace std;
double a,b,c,d,p,q,s,f,x1,x2,x3,x2i,x3i;
int main()
{
setlocale(LC_ALL,"Russian");
m:cout<<"Введите коэффициенты кубического уравнения Ax^3+Bx^2+Cx+D"<<endl;
cout<<"A= "<<endl;
cin>>a;
cout<<"B= "<<endl;
cin>>b;
cout<<"C= "<<endl;
cin>>c;
cout<<"D= "<<endl;
cin>>d;
if (a==0)
{
    cout<<"Ошибка !"<<endl;
    goto m;
}
else
{
p=((3.*a*c-b*b)/(3.*a*a));
q=((2.*b*b-9.*a*b*c+27.*a*a*d));
s=(((q*q)/4.)+(p*p*p)/27.);
if (q<0)
{
    f=(atan(pow(-s,0.5)/(-q/2)));
}
else if (q>0)
{
    f=(atan(pow(-s,0.5)/(-q/2))+PI);
}
else
{
    f=(PI/2);
}
if (s<0)
{
    x1=(2.*pow((-p/3.),0.5)*cos(f/3.)-b/3.*a);
    x2=(2.*pow((-p/3.),0.5)*cos(f/3.+(2.*PI)/3.)-b/3.*a);
    x3=(2.*pow((-p/3.),0.5)*cos(f/3.+(2.*PI)/3.)-b/3.*a);
}
else if (s>0)
{
x1=(pow(-q/2.+pow(s,0.5),1./3.)+pow(-q/2.-(pow(s,0.5)),1./3.)-b/(3.*a));
    x2=(-0.5*(pow(-q/2.+pow(s,0.5),1./3.)+pow(-q/2.-(pow(s,0.5)),1./3.)-b/(3.*a)));
    x2i=((pow(3.,0.5)/2.)*(pow(-q/2.+(pow(s,0.5)),1./3.)-pow(-q/2.-(pow(s,0.5)),1./3.)));
    x3=(-0.5*(pow(-q/2+pow(s,0.5),1/3)+pow(-q/2-(pow(s,0.5)),1/3)-b/(3*a)));
    x3i=((pow(3.,0.5)/2.)*(pow(-q/2.+(pow(s,0.5)),1./3.)-pow(-q/2.-(pow(s,0.5)),1./3.)));
}
else
{
    x1=(2.*pow(-q/2.,1./3.)-b/(3.*a));
    x2=(-1.*pow(-q/2.,1./3.)-b/(3.*a));
    x3=(-1.*pow(-q/2.,1./3.)-b/(3.*a));
}
cout<<"Х1= "<<x1<<endl;
if (s>0)
{
    cout<<"X2= "<<x2<<"+"<<x2i<<"i"<<endl;
    cout<<"X3= "<<x3<<"-"<<x3i<<"i"<<endl;
}
else
{
cout<<"X2= "<<x2<<endl;
cout<<"X3= "<<x3<<endl;
}
}
system("pause");
}
Добавлено через 4 минуты
задача звучит так: найти все целые корни уравнения A*x^3+B*x^2+C*x+D=0, где A,B,C,D - целые числа.
(Замечание: целыми корнями могут быть только положительные и отрицательные делители коэффициента D).
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
20.12.2013, 23:01
Там у вас извлечение корня третьей степени. Оно тоже может быть из отрицательного числа, так что функция pow работать не будет. Нужно вычислять все три значения корня. А потом комбинировать с другим кубичным корнем. В описании формул Кардано об этом говорится. Там морока очень большая.

Я бы вычислил численно один действительный корень x_0, который всегда есть, а потом разделил многочлен на x-x_0. Получится квадратный трехчлен, корни которого (здесь уже, возможно, комплексные) можно найти уже школьным способом.

Добавлено через 2 минуты
Цитата Сообщение от vlad0995 Посмотреть сообщение
задача звучит так: найти все целые корни уравнения A*x^3+B*x^2+C*x+D=0, где A,B,C,D - целые числа.
Вы что, смеетесь? - это совсем другая задача. Может быть у вас A,B,C,D тоже целые?

Добавлено через 4 минуты
Тогда подбирайте корни среди делителей свободного члена. Но только если вам нужно найти еще и кратность корня, то деление многочленов вам все равно придется программировать.

Цитата Сообщение от vlad0995 Посмотреть сообщение
целыми корнями могут быть только положительные и отрицательные делители коэффициента D
Такое бывает справедливо только если A=1, а остальные коэффициенты целые. У вас в задаче говорится что коэффициенты именно такие?

Добавлено через 2 минуты
Цитата Сообщение от palva Посмотреть сообщение
Может быть у вас A,B,C,D тоже целые?
Извините, не прочитал это в задаче, -- разволновался...

Добавлено через 15 минут
Цитата Сообщение от palva Посмотреть сообщение
то деление многочленов вам все равно придется программировать.
Деление многочленов это схема Горнера. Вам правильно сказали.
1
1 / 1 / 0
Регистрация: 28.01.2017
Сообщений: 32
12.03.2018, 04:26
palva, Здравствуйте! Можете пожалуйста по подробнее описать ваше предложение про численное вычисление действительного корня и получение квадратного трехчлена?

Добавлено через 33 минуты
Каким именно численным методом лучше искать действительный корень и как потом получить квадратный трехчлен?

Добавлено через 27 минут
Вопрос решен, сделал с помощью Кардано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2018, 04:26
Помогаю со студенческими работами здесь

Решение кубического уравнения
Доброе утро! Можете помочь решить 10x3+5x2-x+14=0, я без понятия как решать подобные уравнения? Спасибо!

Найти корни кубического уравнения
(x+a)(x^2-bx)+c(x+a)=0

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

Вычисление корней кубического уравнения
В процессе написания обнаружил проблему - переменная i появилась изнеоткуда, не подскажете что это такое и где ее взять?: ...

Заданы три корня кубического уравнения: a, b, c.
Написать программу Дано: Заданы три корня кубического уравнения: a, b, c. Задание: Найти коэффициенты данного уравнения.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru