На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Границы корней многочлена
    QUOTE (wormball @ 13.11.03, 20:05)
    сумасойти
    тогда можно вобще брать производные до тех пор, пока не будет прямая, а её корень найти аналитически smile.gif

    Ну, я так и делал. Искал производные, пока не получится линейное уравнение. Найти его корень - тривиально. Потом по рекурсии возвращался, методом Ньютона ища корни в интервалах. В качестве значений +/- бесконечность брал что-то типа MaxInt. Хотелось бы что-то точнее.
    2 albom: так и не понял, как в твоей программе определяется правая и левая границы корней unsure.gif
      Значит, там у нас есть функция f(x), дальше находим все x при которых f`(x)=0.
      Теперь рассмотрим xmin, если f(xmin)>0 и f(xmin-1)<f(xmin), то на промежутке от -oo до xmin есть ровно один корень.
      Зная что он там есть, можно легко его найти. Например, сначала сделав это:
      CODE
      xx:=xmin;
      step:=1;
      repeat
      xx:=xx-step
      step:=step*2;
      until f(xx)<0;
      То есть получим промежуток [xx; xmin], и корень можно найти, например, методом деления этого промежутка пополам.
      Сообщение отредактировано: albom -
        QUOTE (albom @ 14.11.03, 11:26)
        Теперь рассмотрим xmin, если f(xmin)>0 и f(xmin-1)<f(xmin), то на промежутке от -oo до xmin есть ровно один корень.

        Так откуда взять этот xmin? Просвяти, пожалуйста. Как корни искать - это понятно.
          Решаем уравнение f`(x)=0. Получим n корней: x1, x2, x3, x4 ... xn (x1<x2<x3<x4<...<xn).
          Вот xmin=x1; ну а xmax=xn.
          Сообщение отредактировано: albom -
            ОК. Пусть f(x) = X^2 - 5*X + 6 (корни 2 и 3)
            f'(x) = 2*X - 5
            X = 2.5
            И какой тут xmin или xmax? cool.gif
            Сообщение отредактировано: tserega -
              xmin=xmax=2.5
              Итого, есть два промежутка [-oo; 2.5] и [2.5; +oo]. И заметь, на каждом из промежутков находится не более одного корня!
                Похоже, мы обсуждаем разные темы. Надо найти приближение этих значений плюс/минус бесконечность. That's the problem! Точки экстремума понятно, как искать.
                  Зачем метод Ньютона запускать из +/- бесконечности?
                  Я же говорю, на полуинтервалах (-oo, min(Xmin второй производной, Xmin первой производной)] и [max(Xmax второй производной, Xmax первой производной), +oo) многочлен всегда только выпукл или только вогнут. Так и запускаем его из min(Xmin1, Xmin2)-1, затем из max(Xmax1, Xmax2)+1... И получаем перемену знака Y(xi) на (или даже ДО) первой же итерации, если там корень вообще есть...
                  Сообщение отредактировано: Visitor -
                    2 Visitor: как я понял, Xmin1 - это минимальный корень первой производной, а Xmin2 - второй производной?
                      Да, правильно понял
                        с другой стороны если там уравнение 10й степени, наверное не будет большой разницы, решать уравнение 10й степени или 8й.
                          Сложность хде-то N^2 поисков корней, хде N -- степень уравнения...

                          А сложность поиска от степени не зависит, зависит от точности епсилон и организации процедуры поиска.
                          Сообщение отредактировано: Visitor -
                            Могут разве что возникнуть проблемы с переполнением (коэффицент перед степенью увеличивается как n!)
                              В процессе вычисления производной сразу нормировать коеффициенты smile.gif Чтобы an при x^n = 1
                              Сообщение отредактировано: Visitor -
                                Я чего хотел спросить...

                                У вас до какой степени многочлена корни правильно искались? Без "удвоения" одного корня из-за погрешностей при вычислении, потери точности в корнях, где многочлен касается или почти параллелен Ox и без пропусков парных корней, где f(xi) = f'(xi) = 0?

                                У меня, помнится, не особо высокие степени в разряд "надежно" обрабатываемых попали...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0304 ]   [ 15 queries used ]   [ Generated: 4.05.24, 22:42 GMT ]