WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Подскажите

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Подскажите
ArsP опубликован 11-10-2001 15:19 MSK   Click Here to See the Profile for ArsP   Click Here to Email ArsP  
Пожалуйста, подскажите какой метод использовать для решения задачи: Задан полином n-й степени с вещественными коэффициентами. Составить программу, которая вычисляет действительные и мнимые части корней полинома.
m_fox опубликован 11-10-2001 16:45 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
Ну это вопрос к математикам...
тут одни программеры...
OlegO опубликован 11-10-2001 17:17 MSK     Click Here to See the Profile for OlegO  Click Here to Email OlegO     
Решает на C++ методом Ньютона например, просто как дважды два все то же самое только работаешь с комплесными числами, а все это из-за того что есть поддержка в STL работы с комплексными числами.

2m_fox: Математики тоже программерами бывают :)

Вот пример на скорую руку:

#include <complex>

using namespace std;

#ifndef _POLINOM_H
#define _POLINOM_H

#define _MAX_POLINOM_POW (100)
#define _EPSILON (1E-12)

typedef struct SPolinom
{
complex <double> mas[_MAX_POLINOM_POW];
int pow;
}*PPolinom,TPolinom;

typedef struct SRoot
{
complex<double> mas[_MAX_POLINOM_POW];
int num;
}*PRoot,TRoot;

inline complex<double> FPol(TPolinom &p,complex<double> &x)
{
int i;
complex<double> tmp= complex<double>(0,0);

for(i=0;i<=p.pow;i++)
tmp=tmp+pow(x,i)*p.mas[i];

return tmp;
}


void FindAllRoot(TPolinom &pp,TRoot &r)
{
int i,j;
complex<double> x1,x0;
TPolinom defp,p;

p=pp;
r.num=p.pow;

for(i=0;i<r.num;i++)
{
defp.pow=p.pow-1;

for (j=0;j<p.pow;j++)
defp.mas[j]=p.mas[j+1]*double(j+1);

x1=complex<double>(1,1);

do
{
x0=x1;

x1=x0-FPol(p,x0)/FPol(defp,x0);
}
while (abs(FPol(p,x1))>_EPSILON);

r.mas[i]=x1;

for(j=p.pow-1;j>=0;j--) p.mas[j]=p.mas[j]+p.mas[j+1]*x1;
for(j=0;j<p.pow;j++) p.mas[j]=p.mas[j+1];
p.pow--;
}
}

#endif //_POLINOM_H


OlegO опубликован 11-10-2001 17:23 MSK     Click Here to See the Profile for OlegO  Click Here to Email OlegO     
Использовать просто:
TPolinom Polinom;
TRoot Root;

Polinom.pow = 2; // степень полинома
Polinom.mas[0]=complex<double>(1,0); // коэфицент при x^0
Polinom.mas[1]=complex<double>(0,0);// коэфицент при x^1
Polinom.mas[2]=complex<double>(1,0);// коэфицент при x^2

FindAllRoot(Polinom,Root);

ArsP опубликован 12-10-2001 10:21 MSK     Click Here to See the Profile for ArsP  Click Here to Email ArsP     
Спасибо OlegO

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.