Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Навороченная дихотомия для полиномов, Нужно найти корни большого полинома 
:(
    Опции темы
Dr.Wisdom
Дата 7.10.2005, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Кароче есть класс Полином, который полином (его коэфиценты) вплоть до 100-той степени.
Нужно найти его корни.
Первое что пришло в голову - дихотомия, только навороченная, тоесть начиная с предпоследней производной и так далее до нулевой. Много и муторно. И медленно.

Есть альтернативные варианты?

И еще. Есть класс Полином2 для двумерного полинома, определяющего поверхность. Для него предыдущйи метод усложняется офигенно. Не говорю уже о Полиноме3, определяющем объем в просттранстве-времени.

В общем есть какие либо методы попроще?

ЗЫ общее задание загнать заданную поверхность в шар указанного радиуса.
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Дрон
Дата 7.10.2005, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Есть более быстрые методы.

Метод Ньютона, например. Там правда, производные надо считать, но это для полинома не проблема smile

А вообще причём здесь С++?


--------------------
Да. Именно так.
PM   Вверх
Dr.Wisdom
Дата 7.10.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



С++ тут при том, что на нем делается (С ОпенГЛ вместе)
Метод Ньютона? подумаю.

PS. Че делсать с полиномом двойным (от двух переменных) для них Ньютон не предусмотрен. (а для тройных)

вот такие классы полиномов
Код

class polinom3
{
 public:
  int N;              //number of koafficents
  float C[100][100][100];    //the koafficents

  polinom3();                //set zero polinom

  polinom3* operator+(polinom3*);

  float get(float,float,float,int,int,int);    // get a "p,k, TT-taya proizvodnaya" in direct point "u,v,T"

};


ЗЗЫ У-У-ПС. че то у меня бровзер глючит или форум млм ишор че, кароче извините за ту помуйню, что я натворил

Это сообщение отредактировал(а) Dr.Wisdom - 7.10.2005, 17:33
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Дрон
Дата 7.10.2005, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Цитата(Dr @ 7.10.2005, 17:48)
С++ тут при том, что на нем делается (С ОпенГЛ вместе)

Но с таким же успехом можно и на Паскале, и на бейсике это написать.

Такую тему однозначно нужно в Алгоритмы.

Это сообщение отредактировал(а) Дрон - 7.10.2005, 17:32


--------------------
Да. Именно так.
PM   Вверх
Hroft
Дата 7.10.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



Цитата(Dr @ 7.10.2005, 15:37)
Первое что пришло в голову - дихотомия, только навороченная, тоесть начиная с предпоследней производной и так далее до нулевой. Много и муторно. И медленно.

А как связаны дихотомия и производные?
И где вообще такая задача возникла? Почти наверняка можно обойти.
А метод Ньютона очень даже работает с любым числом переменных, если я не ошибаюсь.
PM MAIL ICQ   Вверх
Dr.Wisdom
Дата 8.10.2005, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Дихотомия может применяться только когда на отрезке одно решение. А нули производной разделяют решения. Найти нули производной так же трудно. Ищем вторую производную. и так далее до той нули которой можем найти. Потом наверх. Ужас. С ньютоном также. Только корни ищуться проще.
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Dr.Wisdom
Дата 8.10.2005, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Че то я не врубаюсь.
Как это метод ньютона работает со многими переменными.
Полином выглядит так (мля как вставить картинку?!!)

P(u,v,T) = *Сумма по i,j,k от 0 до N* (Aijk * u^i * v^j * T^k)

Задача сводиться к "найти корни системы

*Сумма по i,j от 0 до N* (Aij * i * u^(i-1) * v^j) = 0
*Сумма по i,j от 0 до N* (Aij * j * u^i * v^(j-1)) = 0

"

Они есть везде Aijk или Aij - Матрицы или их аналоги в 3х мерном пространстве.

--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
MBo
Дата 9.10.2005, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



Нахождение корней полинома высокой степени - численно весьма неустойчивая задача.
Можно попробовать способ через нахождение собственных значений матрицы. Для этой задачи (Eigenproblem, eigenvalues) разработаны изощренные методы.
PM MAIL   Вверх
Dr.Wisdom
Дата 9.10.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Ну предположем нашел я собственные значения и что?
Лямда раз, дав три ... эн. Как потом действовать. Че с ними делать?
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Dr.Wisdom
Дата 9.10.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



только что пришла идея.
может можно упростить эту каку сведя мою матрицу к каноническому виду? (это ты имел в виду говоря собственные значения?)
тогда будет что то вроди

"Cумма по i от 0 до N" (Ci* u^i * v^i * T^i) - в общем случае,

а задача сведеться к "найти корни системы
"Cумма по i от 0 до N" (Ci * i * u^(i-1) * v^i) = 0
"Cумма по i от 0 до N" (Ci * j * u^i * v^(i-1)) = 0
"

Все проще. Только как их искать тоже черт знает. Я еще подумаю. И напишу тута потом.
Может кто знает, А?
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Dr.Wisdom
Дата 9.10.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Цитата
И где вообще такая задача возникла? Почти наверняка можно обойти.

В общем случае: Есть объем в пространсве-времени (4Д). Объем задан матрицей коэфицентов для полинома (где то висела уже формула). Нужно его загнать в шар указанного радиуса. Чтобы за экран не вылазил. Я его потом еще вокруг осей x,y,z,t врашать буду. Тоже не знаю пока как, но это другой вопрос и вроди чисто математический и вроди прощеи вообще не об этом речь.

Ф-ла: P(u,v,T) = *Сумма по i,j,k от 0 до N* (Aijk * u^i * v^j * T^k)

ЗЫ. Че то я со словом "квадратичная форма" попутал. Или нет? Каша в голове! Можно че то типа того как было указанно сделать?
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
MBo
Дата 9.10.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



>Ну предположем нашел я собственные значения и что? Че с ними делать?

Как ни тривиально - но придется книжки читать по численным методам.

PM MAIL   Вверх
Dr.Wisdom
Дата 9.10.2005, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Цитата(MBo @ 9.10.2005, 11:38)
Как ни тривиально - но придется книжки читать по численным методам.

Например.
У меня есть справочники по математике. Учебники по высшей математике. По методам нету ничего. Название хотябы скажи. И автора. А лучьше ссылку.
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
MBo
Дата 10.10.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



http://www.srcc.msu.su/num_anal/lib_na/cat/cat0.htm (на фортране)
http://alglib.sources.ru/
http://algolist.manual.ru/
книги на русском - то,что вспомнилось - Бахвалов, Калиткин, Самарский, Нэш


на английском - Numerical Recipes Online - www.nr.com


PM MAIL   Вверх
Dr.Wisdom
Дата 11.10.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 6.1.2005

Репутация: нет
Всего: 0



Вот так вот!!!!
Я знаю ответ на вопрос!
Книга духов подсказала.
Выйдя в мир духов я спросил у всеми уважаемого демона Бедариэля тот вопрос, на которые вы, cмертные ответить не смогли.
Итак. Его ответ был "Метод градиента".
Метод говорит: Возми точку где нибудь. Окружи ее 8-ю точками. Возми минимальную из них. Если
она - центральная то уменьши вдвое растояние между точками (используемая точность) если нет,
то возьми в качестве центра ту, что меньше. Повтори, пока точность не превысит заданной.
Еще он посоветовал мне вариант метода Ньютона для плоскости. то же самое, только касательная

береться к поверхности однисм из навороченных способов из серии "придумай от фонаря"

Да сияет дух благородного демона Бедариэля во веки.
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1285 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.