Определение: кубическое уравнение (оно же — уравнение третьей степени) — это алгебраическое уравнение вида:
ax³ + bx² + cx + d = 0, в котором a ≠ 0.
x — переменная, при определенных значениях которой уравнение становится тождеством. Эти значения переменной х называются корнями кубического уравнения.
Кубическое уравнение — Pascal ABC
Помогите решить вот эту задачу ОООчень надо Вася в школе изучил квадратные уравнения и понял, как они легко решаются путем вычисления дискриминанта. Но Петя поведал ему о методе решения кубических уравнений вида A*X3 + B*X2 + C*X + D = 0. На факультативе по математике Васе задали решить около ста уравнений как раз такого вида.
Но, к сожалению, Вася забыл формулы, о которых рассказывал ему Петя. Но Васе было известно, что все корни уравнений – целые числа и находятся на отрезке [-100, 100]. Поэтому у Васи есть шанс найти их методом перебора, но для этого ему придется затратить уйму времени, т.к. возможно необходимо будет осуществить перебор нескольких тысяч значений. Помогите Васе написать программу, которая поможет ему найти корни кубических уравнений!
ОГЭ №21 Как решать кубическое уравнение x^3+4x^2-9x-36=0 Группировка Деление многочлена столбиком
Код к задаче: «Кубическое уравнение»
Листинг программы
uses crt; var a,b,c,d:integer; x,k:longint; begin clrscr; writeln(‘Введите коэффициенты уравнения, целые числа a,b,c,d:’); readln(a,b,c,d); k:=0; for x:=-100 to 100 do if a*x*x*x+b*x*x+c*x+d=0 then begin k:=k+1; writeln(‘x’,k,’=’,x); end; if k=0 then write(‘Целых корней нет’); readln end.
Источник: studassistent.ru
Решение кубического уравнения
На этой странице представлен алгоритм для решения кубического уравнения методом Виета-Кардано. Программа написана для случая действительных коэффициентов (корни могут быть комплексными).
Кубическое уравнение записывается в виде: x 3 +a*x 2 +b*x+c=0. Для нахождения его корней, в случае действительных коэффициентов, вначале вычисляются: Q=(a 2 -3b)/9, R=(2a 3 -9ab+27c)/54. Далее, если R 2 , то уравнение имеет три действительных корня, вычисляющихся по формулам (Виета): t=acos(R/sqrt(Q 3 ))/3,
x1=-2*sqrt(Q)cos(t)-a/3,
x2=-2*sqrt(Q)cos(t+(2*pi/3))-a/3,
x3=-2*sqrt(Q)cos(t-(2*pi/3))-a/3.
В том случае, когда R 2 >=Q 3 , то действительных корней один (общий случай) или два (вырожденные случаи). Кроме действительного корня, имеется два комплексно-сопряженных. Для их нахождения вычисляются (формула Кардано):
A=-sign(R)[|R|+sqrt(R 2 -Q 3 )] 1/3 ,
B=Q/A при A!=0 или B=0 при A=0.
Действительный корень будет:
x1=(A+B)-a/3.
Комплексно-сопряженные корни: x2,3=-(A+B)/2-a/3 + i*sqrt(3)*(A-B)/2
В том случае, когда A=B, то комплексно-сопряженные корни вырождаются в действительный:
x2=-A-a/3.
Формулы Кардано и Виета требуют применения специальных функций, и в том случае, когда требуется провести большую серию вычислений корней кубического уравнения с не слишком сильно меняющимися коэффициентами, более быстрым алгоритмом является использование метода Ньютона или других итерационных методов (с нахождением начального приближения по формулам Кардано-Виета).
Математика | Кубические уравнения по методу Сталлоне
Ниже расположена программа для нахождения корней кубического уравнения с действительными коэффициентами.
/* Cubic equation solution. Real coefficients case. int Cubic(double *x,double a,double b,double c); Parameters: x — solution array (size 3). On output: 3 real roots -> then x is filled with them; 1 real + 2 complex -> x[0] is real, x[1] is real part of complex roots, x[2] — non-negative imaginary part. a, b, c — coefficients, as described Returns: 3 — 3 real roots; 1 — 1 real root + 2 complex; 2 — 1 real root + complex roots imaginary part is zero (i.e. 2 real roots). */ #include /* for sqrt(), fabs(), pow(), cos(), acos(). */ #define M_PI (3.141592653589793) #define M_2PI (2.*M_PI) int Cubic(double *x,double a,double b,double c) < double q,r,r2,q3; q=(a*a-3.*b)/9.; r=(a*(2.*a*a-9.*b)+27.*c)/54.; r2=r*r; q3=q*q*q; if(r2else < double aa,bb; if(r aa=-pow(r+sqrt(r2-q3),1./3.); if(aa!=0.) bb=q/aa; else bb=0.; a/=3.; q=aa+bb; r=aa-bb; x[0]=q-a; x[1]=(-0.5)*q-a; x[2]=(sqrt(3.)*0.5)*fabs(r); if(x[2]==0.) return(2); return(1); >>
![]() |
Источник: netcode.ru