![]() |
visual basic||нахождение минимума функции методом покоординатного градиентного спуска
Здравствуйте. Посмотрите пожалуйста правильно ли я решил задачу нахождения минимума функции методом покоординатного (градиентного спуска).
Почему-то у меня при градиентном спуске при любых значениях одна итерация итерируется. Количество итераций при покоординатном спуске то же подозрительно мало. Исходные данные: Функция- a*x*x+b*y*y-c*x*y-d*y где a,b,c,d коофициенты х,у координаты начальной точки (все вводятся с клавиатуры)также есть е(погрешность>=10^-5 Код:
Rem покоординатный спуск |
bezumes
Цитата:
Как это делать правильно я не помню. Но помню как это делал я. 0. очищаем экран 1. Цикл по всем y от 0 до Ymax 2. Цикл по всем x от 0 до Xmax 3. Если floor((f(x,y)-A)/B) <> floor((f(x+1,y)-A)/B) значит через (x, y) проходит линия уровня. рисуем точку 4. Аналогично 3, но для (x, y) и (x, y+1) Здесь floor - окгругление вниз Ещё можно линии раскрасить разными цветами. Или вообще применить цветовое кодирование (как на картах морей) - выбрать градиент какого-нибудь цвета. Тогда минимому функции будет соответствовать самый тёмный цвет, максимому - самый светлый. P.S. программу не читал. Но может посмотрю потом. |
А что делать если у меня при нахождении минимума покоординатным спуском при некоторых значениях прога в бесконечный цикл вываливается. В частности при значениях a=1;b=2;c=3;d=4;x=5;y=6;
я обошел эту проблему проверкой количества итераций. Причем вычисления первых итераций производится довольно шустро, а потом при кол итераций>50 Происходит резкое замедления вычисления. вот этим я пользовался при написании данного кода Код:
Private Sub Command1_Click() |
покоординатный спуск:
При фиксакции константой х, получаю уравнение линии.Как у линии может быть минимум.Получается что,при f(y)->min y->+бесконечности или - бесконечности.И что теперь, придется расматривать её на каком-то отрезке(его че, с головы брать).Есле на отрезке, то что придется искать методами дихотомии или золотого сечения(через производные то не получится, вторая производная всегда будет равна нулю а первая всегда одного знака) |
Время: 12:29. |
Время: 12:29.
© OSzone.net 2001-