Минимизируйте функцию, используя метод постоянного градиента p-шага в Pyhton - PullRequest
0 голосов
/ 17 марта 2020

Я хочу минимизировать следующую функцию J (u) = 0,5 * лямбда * | u-uap | ^ 2, используя метод градиента с постоянным p-шагом, и для этого я пишу следующие строки кода в Python.

import numpy as np
import os
# Définition de la fonctionnelle J
#def J(y,uap):
#    u1,u2,u3,u4 = y
#    u = np.array([u1,u2,u3,u4])
#    #uap = np.array([-0.8811745 , 241.88383317,  40.0355949 ,  77.24687151])
#    return (1 / 2)*np.abs(u-uap)**2 
def DuJu (y,uap,lbda):
    u1,u2,u3,u4 = y        
    u = np.array([u1,u2,u3,u4])        
    return lbda*np.array((u-uap))

Nt = 100
tgrid, dt = np.linspace(0, 200, num=Nt, retstep=True)
uaprox = np.array([-0.8811745 , 241.88383317,  40.0355949 ,  77.24687151])

#Algorithme du gradient
theta_iter  = np.array([0.0,0.0,0.0,0.0])# Initialisation  u0
err = np.array([0.0,0.0,0.0,0.0])
rho = 0.05 #rho
lam = 0.1
while err.all()<10**(-7):
    theta_iter -=rho*(DuJu(theta_iter,uaprox,lam)).sum() # uk+1 = uk - rho * DuJu
    err = np.abs(theta_iter).sum() # ||uk+1 - uk||
    os.system('cls')    
print(theta_iter)    
print(err)

, где u - вектор R ^ 4 и uap = (-0.8811745, 241.88383317, 40.0355949, 77.24687151) и при выполнении кода я получаю следующие результаты:

[1.79142563 1.79142563 1.79142563 1.79142563]
7.165702501600001

Каждый раз, когда я изменяю параметры, я получаю равные значения в каждом компоненте вектора u, и я не знаю, в чем заключается ошибка в алгоритме.

Не могли бы вы помочь мне определить ошибку или другим способом? реализовать алгоритм градиента с постоянным шагом rho?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...