Попытка найти минимум функции g (x) и значение x в этом минимуме - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь найти минимум созданной функции г (альфа) * ​​1002 * и, что более важно, найти значение альфа на этом минимуме или близко кминимум.

Я использую следующий код: он создает функцию f , векторы D , avec и grad и использует ее для создания функции g (alpha) , минимум которой я хочу найти, вместе со значением alpha .

Проблема заключается в том, что послеприменение решить из библиотеки sympy Я не получаю числовое число alpha .Вместо этого я получаю следующую ошибку:

TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'

Код:

import numpy as np
from scipy.optimize import fmin
from sympy import Symbol, solve
from scipy import interpolate

Emax = 10
bins = 200
x = np.linspace(1, Emax, num = Emax, dtype=np.int)   #create grid of indexes
y = np.linspace(1, bins, num = bins, dtype=np.int)
z = np.random.rand(bins, Emax)                       # random matrix   
f = interpolate.interp2d(x,y,z, kind='cubic')        # make the matrix continious

D= np.zeros(bins)
D = 2*f(1.5, y)  # create vector
avec = np.array([4.0, 16.0])  
grad = np.array([1e-5,1e-5])

g= lambda alpha: np.sum(np.square(np.subtract(D,  (avec[0]-alpha*grad[0])*f((avec[1]- 
                                          alpha*grad[1]),y))))

oo= fmin(g,(0.0))

alfa = Symbol("alfa")
slv= solve((np.sum(np.square(np.subtract(D,  (avec[0]-alfa*grad[0])*f((avec[1]- 
                                          alfa*grad[1]),y)))) - oo), alfa)

Я знаю, что это решение может быть не лучшим для этой проблемы.Я новичок в Python, и если у вас есть предложения, как найти alpha здесь, пожалуйста, скажите мне.

1 Ответ

0 голосов
/ 16 декабря 2018

Я думаю, вы действительно путаете то, что делает sympy.sympy - это модуль для решения и печати аналитических уравнений.Вам не нужно использовать этот пакет вообще для этой задачи.

Вы действительно находите минимум g здесь.Вы сохраняете этот результат в oo.

Итак, удалите последние 2 строки, начинающиеся с alfa = ... и slv = ..., а затем просто введите print(oo).oo - это значение, которое вы ищете, значение альфа, которое минимизирует функцию g

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