IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Сложная задача, Полином 5 - го порядка , нахождение корней
-Student-
сообщение 11.07.2008 11:06
Сообщение #1


Гость






здравствуйте !
вот задали задание , такой темы ещё не проходили поэтому прошу помощи у вас .

нужно написать программу которая ищет корни из полинома 5 - го порядка с комплексными коэффициентами задаваемыми пользователями.

полином (или попросту многочлен) представляет собой алгебраическую сумму " (a+bi)x^5 + (a+bi)x^4+ ... (a+bi)x^n-1"

(a+bi) - комплексный коэффициент с мнимой еденицей "i" , a и b нужно задавать самому и для каждого "х" они будут разные ... фактически при раскрытия скобок получается что нужно решить 2 полинома , мнимый и действительный.

n - степень полинома (в данном случае степень n=5)

в книжке читал что для полиномов степени выше 4 нету формулы по которой он высчитывается , поэтому прошу помощи ... мб кто сталкивался с ними и знает методы по которому они решаются или хотябы алгаритм решения , потому что я даже незнаю с чего начать sad.gif

мб кто знает где в инете описывается как решать полиномы , неоткажусь от любой помощи !
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 11.07.2008 22:33
Сообщение #2


Гость






Значит, смотри, что получилось...

В аттаче - основной модуль, весь проект аттачить не стал, потому что не знаю, какой версией Delphi ты пользуешься, у меня BDS 2007, на более ранних проект не откроется (собственно программа должна работать на любой версии, начиная с D7 - именно там, насколько я помню, ввели модуль VarCmplx для поддержки комплексных чисел).

Теперь о программе: она находит корни любых полиномов (автор оригинала утверждает, что работает до полиномов 40-й степени). Я тестировал на таком:

(2 + i)*z2 - (7 + i)*z + (15 + 10i) = 0
Для этого в процедуре Test коэффициенты задаются:
  coeffs^[2] := VarComplexCreate(2.0, 1.0);
coeffs^[1] := -1 * VarComplexCreate(7.0, 1.0);
coeffs^[0] := VarComplexCreate(15.0, 10.0);
(именно в таком порядке, индекс коэффициента должен совпадать со степенью переменной, не наоборот), Я надеюсь, понятно, что также, как я "зашил" данные в программе, из можно и ввести?

В результате получил 2 корня, как и положено:
Цитата(Output)
root # 1 = (2 - 3i)
root # 2 = (1 + 2i)
, что является правильным ответом... Искать примеры полиномов более высоких порядков с известными корнями не стал, но поскольку для второй степени программа работает, то логично предположить, что будет она работать и для более высоких степеней. Тестируй, если что не так - говори, на каких исходных данных ошибается, какие должны быть результаты, и что выводит. Если уже есть составленные тесты для этого задания - вообще прекрасно, проверяй... Время у тебя еще есть smile.gif

Вот модуль:
Прикрепленный файл  Unit1.pas ( 9.65 килобайт ) Кол-во скачиваний: 380
 К началу страницы 
+ Ответить 

Сообщений в этой теме
-Student-   Сложная задача   11.07.2008 11:06
volvo   Есть программа, реализующая твое задание с использ...   11.07.2008 14:30
diehard   подожду , практику надо 14 здавать   11.07.2008 15:52
volvo   Значит, смотри, что получилось... В аттаче - осно...   11.07.2008 22:33
diehard   огромное спасибо за перевод программы , но она поч...   12.07.2008 9:26
volvo   Во-первых, сразу вопрос: ты файлы проекта с D2007 ...   12.07.2008 9:46
diehard   вот , щас почемуто стал выдавать ошибку "Inva...   12.07.2008 10:22
volvo   Вот результат работы твоего проекта под BDS: Не ...   12.07.2008 10:47
diehard   проделал вышенаписанную процедуру ... как вы и гов...   12.07.2008 12:00
volvo   Так. Уже лучше. Теперь еще 2 вещи: во-первых, у те...   12.07.2008 13:01
diehard   Во вкладке Events , по событию OnCreate (вроде это...   12.07.2008 13:18
volvo   , понимаю, что в процессе обработки... Я и спрашив...   12.07.2008 13:50
diehard   в процедуре Test при тесте с брейкпоинтом не вылет...   12.07.2008 14:12
volvo   Не понимаю я, что там у тебя происходит, и каким о...   12.07.2008 15:14
diehard   если честно не понял как это сделать :( ... язык и...   12.07.2008 16:38
volvo   Начинать - вот так: type TComplex = record R...   12.07.2008 17:48
diehard   ну с делением вроде так : function ComplexDiv(a,...   12.07.2008 19:32
volvo   Вот это попробуй: Просто скопируй содержимое это...   12.07.2008 20:58
diehard   Огромное спасибо ! программа работает ... Спас...   12.07.2008 23:07
volvo   Погоди... Рано радуешься... В программе был найден...   12.07.2008 23:39
diehard   хорошо :good:   13.07.2008 8:43


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 11.07.2025 12:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"