Adrikk
@Adrikk
Студент

Как найти корни полинома(многочлена) действительные и комплексные С++?

Подскажите пожалуйста как реализовать функцию нахождения комплексных и действительных корней полинома?
Столько всего перерыл и не могу понять..
class Polynom{
	private: 
		int deg; //степень полинома
		double *koef; //указатель на массив коэффициентов полинома
	public:
		Polynom();//конструктор без параметром
		Polynom(int);//конструктор с параметром
		Polynom(int, double *);//конструктор с параметрами
		Polynom(const Polynom &);//копирующий конструктор
		~Polynom(){ delete[] koef;} //деструктор

		int getDegree(); //Порядок полинома
	 	double getKoef(unsigned int ); //Получить i-тый коэфф
		void setKoef(int, double);//Изменить i-тый коэфф
		double searchPoly(double);//Значение полинома при x-аргументе
		Polynom getDarivative(unsigned int);//Производная нужного порядка
		double Integrate(double,double);
		Polynom indefiniteIntegral() const;
		
		Polynom operator+(Polynom&);//Сложение двух полиномов
        Polynom operator-(Polynom&);//Вычитание двух полиномов
        Polynom operator=(const Polynom&);//Присваивание 
        Polynom operator*(Polynom&);//Умножение двух полиномов
        Polynom operator/(Polynom &);//деление двух полиномов
        Polynom operator%(Polynom &);//остаток от деления
		
		void InputPolynom(int, double *); //Ввод полинома
		friend ostream& operator<<(ostream&, Polynom&);//Вывод в поток		
};
  • Вопрос задан
  • 952 просмотра
Пригласить эксперта
Ответы на вопрос 1
@zuko3d
Если можно использовать численные методы, то метод Ньютона можно модифицировать чтобы с комплексными тоже работал (делить прямоугольные области пополам). Для определения количества корней на интервале вроде метод Штурма должен помочь. За стартовый интервал предлагаю взять (FLOAT_MIN; FLOAT_MAX) по обеим осям (действительная и мнимая).
Для удобства предлагаю написать вспомогательный класс для работы в комплексными числами (или взять его из GMP, если можно пользоваться сторонними библиотеками).

Если нужно "прямое" решение без ЧМов, то Абель в 17 веке показал, что это "задача для мужика" (не выражается в рациональных функциях и радикалах). Но надежда есть: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D... (я, правда, про это только на лекциях слышал и в жизни не применял, так что хз, насколько актуально).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы