0 / 0 / 0
Регистрация: 05.12.2019
Сообщений: 2

Метод наискорейшего спуска . Метод золотого сечения

05.12.2019, 16:20. Показов 6734. Ответов 2

Студворк — интернет-сервис помощи студентам
Пытаюсь реализовать метод наискорейшего спуска. в качестве одномерной оптимизации использую метод золотого сечения


Написал такой на код Python 3.7 . Все ли верно?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import numpy as np
from matplotlib import pylab
from mpl_toolkits.mplot3d import Axes3D
 
 
 
def f(x1, x2):
    return 10*x1 ** 2 + x2 ** 2
 
 
def goldenratio(x,y): # Метод золотого сечения
    e = 0.1
    a = 0
    b = 1
    k1 = (3-5**0.5)/2
    k2 = (5**0.5 -1)/2
    l1 = a + k1 * (b - a)
    l2 = a + k2 * (b - a)
    f1 = l1*f(x,y)
    f2 = l2*f(x,y)
    while (b - a)/2 >=e:
        if f1 < f2:
            b, l2, f2 = l2, l1, f1
            l1 = a + k1 * (b - a)
            f1 = l1 * f(x, y)
        else:
            a, l1, f1 = l1, l2, f2
            l2 = a + k2 * (b - a)
            f2 = l2 * f(x, y)
 
    return (a+b)/2
 
def grad_descent():
    global f
    # в начале градиентного спуска инициализируем значения x и y
    x,y = 10, 10
    # будем сохранять значения аргументов и значений функции в процессе град. спуска в переменную states
    steps = [[20, 20, 20]]
    i = 0
    steps.append([x, y, f(x, y)])
    while abs(steps[-1][2] - steps[-2][2]) >= 10**(-6):
        i += 1
        lr = goldenratio(x,y)
        grad_x1 = 20*x # производная функции по x
        grad_x2 = 2*y # производная функции по y
        x -= lr*grad_x1
        y -= lr*grad_x2
        steps.append([x, y, f(x, y)])
        print(i)
    return np.array(steps)
 
def makeData ():
    x = np.arange (-10, 10, 0.01)
    y = np.arange (-10,10, 0.01)
    xgrid, ygrid = np.meshgrid(x, y)
 
    zgrid =f(xgrid, ygrid)
    return xgrid, ygrid, zgrid
 
 
 
steps = grad_descent()
x, y, z = makeData()
fig = pylab.figure()
axes = Axes3D(fig)
#
for i in steps[1::]:
    axes.scatter(i[0], i[1], i[2],  color='red')
axes.plot_surface(x, y, z, color='#7FFFD4', alpha=0.5)
print(steps[-1])
pylab.show()
fig.savefig('a.png')
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2019, 16:20
Ответы с готовыми решениями:

Оптимальный градиентный метод (метод наискорейшего спуска)
Просьба помочь разобраться с простым алгоритмом. Не понимаю, почему ищет неверное значение переменной x, оно должно быть равно 1 или...

Метод градиентного спуска
Имеется СЛАУ, но не знаю, как запрограммировать, сам алгоритм есть, надо решить методом наискорейшего спуска:

Метод градиентного спуска для функции
Пытался написать метод градиентного спуска для функции x^2+y^2,вроде код более менее верно написан,но возникает ошибка...

2
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
06.12.2019, 11:12
Методом золотого сечения ты находишь экстремум функции, а методом скорейшего спуска минимизируя функцию, ты пытаешься сравнить результаты? Я правильно понял?
0
0 / 0 / 0
Регистрация: 05.12.2019
Сообщений: 2
06.12.2019, 14:12  [ТС]
Методом скорейшего спуска я ищу минимум функции. Метод золотого сечения использую для нахождение L(шага) на каждой итерации. Вот ссылка на метод https://lektsia.com/7x96f6.html
Миниатюры
Метод наискорейшего спуска .  Метод золотого сечения   Метод наискорейшего спуска .  Метод золотого сечения  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2019, 14:12
Помогаю со студенческими работами здесь

Метод градиентного спуска, для ряда Тейлора
помогите нужен код на Python.Формула градиентного спуска

Не правильно работает метод покоординатного спуска с использованием метода золотого сечения
подскажите пожалуйста. реализую метод покоординатного спуска с использованием метода золотого сечения. Что-то не так работает.. помогите...

Градиентный метод с дроблением шага и Метод наискорейшего спуска
Ребята!Помогите пожалуйста реализовать Градиентный метод с дроблением шага,Метод наискорейшего спуска в Mathcad,функция...

Метод наискорейшего спуска или градиентный метод
Помогите пожалуйста с заданием. Дали отчет и там нужно сделать 4 задания, 3 сделал осталось последнее из книги Numerical methods. using...

Метод золотого сечения или Метод дихотомии
Подскажите пожалуйста. Нужно реализовать алгоритм поиска интервала, содержащего минимум функции. f(x)=x^2+2*x-4. X€.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru