Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод Левенберга-Марквардта в ALGLIB 
:(
    Опции темы
Dims
Дата 26.7.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



Кто-нибудь разбирался с реализацией алгоритма Левенберга-Марквардта в библиотеке ALGLIB?

Мне кажется, пример не соответствует описанию!

Вот код (на C#):

Код

for(rkind=0; rkind<=2; rkind++)
        {
            x[0] = 100*AP.Math.RandomReal()-50;
            x[1] = 100*AP.Math.RandomReal()-50;
            x[2] = 100*AP.Math.RandomReal()-50;
            if( rkind==0 )
            {
                minlm.minlmfj(n, m, ref x, 0.0, 0.0, 0, ref state);
            }
            if( rkind==1 )
            {
                minlm.minlmfgj(n, m, ref x, 0.0, 0.0, 0, ref state);
            }
            if( rkind==2 )
            {
                minlm.minlmfgh(n, ref x, 0.0, 0.0, 0, ref state);
            }
            while( minlm.minlmiteration(ref state) )
            {
                
                //
                // (x-2)^2 + y^2 + (z-x)^2
                //
                state.f = AP.Math.Sqr(state.x[0]-2)+AP.Math.Sqr(state.x[1])+AP.Math.Sqr(state.x[2]-state.x[0]);
                if( state.needfg | state.needfgh )
                {
                    state.g[0] = 2*(state.x[0]-2)+2*(state.x[0]-state.x[2]);
                    state.g[1] = 2*state.x[1];
                    state.g[2] = 2*(state.x[2]-state.x[0]);
                }
                if( state.needfij )
                {
                    state.fi[0] = state.x[0]-2;
                    state.fi[1] = state.x[1];
                    state.fi[2] = state.x[2]-state.x[0];
                    state.j[0,0] = 1;
                    state.j[0,1] = 0;
                    state.j[0,2] = 0;
                    state.j[1,0] = 0;
                    state.j[1,1] = 1;
                    state.j[1,2] = 0;
                    state.j[2,0] = -1;
                    state.j[2,1] = 0;
                    state.j[2,2] = 1;
                }
                if( state.needfgh )
                {
                    state.h[0,0] = 4;
                    state.h[0,1] = 0;
                    state.h[0,2] = -2;
                    state.h[1,0] = 0;
                    state.h[1,1] = 2;
                    state.h[1,2] = 0;
                    state.h[2,0] = -2;
                    state.h[2,1] = 0;
                    state.h[2,2] = 2;
                }
                scerror = scerror | !rkindvsstatecheck(rkind, ref state);
            }
            minlm.minlmresults(ref state, ref x, ref rep);
            referror = referror | rep.terminationtype<=0 | Math.Abs(x[0]-2)>0.001 | Math.Abs(x[1])>0.001 | Math.Abs(x[2]-2)>0.001;
        }


Судя по всему, в этом методе минимизируется функция (x-2)^2 + y^2 + (z-x)^2

В инструкции написано, что 

Цитата

В зависимости от того, что именно требуется вычислить, подпрограмма MinLMIteration может устанавливать в True одно и только одно из следующих полей:

    * NeedF – сигнализирует о том, что требуется вычислить значение функции F (не путайте с вектором fi )
    * NeedFG – сигнализирует о том, что требуется вычислить значения функции F и градиента F
    * NeedFiJ – сигнализирует о том, что требуется вычислить вектор функций fi  и матрицу Якоби
    * NeedFGH – сигнализирует о том, что требуется вычислить значение функции F, градиент F и гессиан F


Однако по коду явно видно, что, например, когда if( state.needfgh ) то градиенты вообще не вычисляются.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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