Страница 2 из 2 Программа для нахождения корней кубического уравнения с действительными коэффициентамиНиже расположена программа для нахождения корней кубического уравнения с действительными коэффициентами. /* Решение кубического уравнения. Случай с действительными коэффициентами.
int Cubic(double *x,double a,double b,double c); Параметры: x - массив решения (size 3). На выходе: 3 действительных корня -> затем x ими заполняется; 1 действительный + 2 комплексных -> x[0] - действительный, x[1] действительная часть комплексных корней, x[2] - неотрицательная мнимая часть. a, b, c - коэффициенты Результаты: 3 - 3 действительных корня; 1 - 1 действительный + 2 комплексных; 2 - 1 действительный корень + мнимая часть комплексных корней, если 0 (т.е. 2 действительных корня). */
#include <math.h> /* для 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(r2<q3) { double t=acos(r/sqrt(q3)); a/=3.; q=-2.*sqrt(q); x[0]=q*cos(t/3.)-a; x[1]=q*cos((t+M_2PI)/3.)-a; x[2]=q*cos((t-M_2PI)/3.)-a; return(3); } else { double aa,bb; if(r<=0.) r=-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); } }
|