Привет, я пытаюсь использовать метод Ньютона для минимизации функции, но я продолжаю получать эту ошибку при запуске кода, и я не знаю, почему. Любая помощь горячо приветствуется. Спасибо!
Ошибка:
ValueError: shapes (2,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)
Код:
import sympy as sy
from sympy import symbols
import numpy as np
from numpy import linalg as la
from scipy.optimize import minimize
a1=0.3
a2=0.6
a3=0.2
b1=5
b2=26
b3=3
c1=40
c2=1
c3=10
h=0.000001
def TutFunc(x):
x=np.empty((2,1))
u = x[0][0] - 0.8
v = x[1][0] - ((a1+(a2*u**2))*(1-u)**0.5-(a3*u))
alpha = -b1+b2*u**2*(1-u)**0.5+b3*u
beta = c1*v**2*(1-c2*v)/(1+c3*u**2)
y= alpha*np.exp(-beta)
return y
def JacobianFun(x):
x=np.empty((2,1))
Jx1 = (TutFunc(x+[[h],[0]]) - TutFunc(x-[[h],[0]]))/(2*h)
Jx2 = (TutFunc(x+[[0],[h]]) - TutFunc(x-[[0],[h]]))/(2*h)
jaco = np.array([[Jx1],[Jx2]])
return jaco
def HessianFun(x):
x=np.empty((2,1))
Hx1x1 = (TutFunc(x+[[h],[0]]) - 2*TutFunc(x) + TutFunc(x-[[h],[0]]))/h**2
Hx1x2 = (TutFunc(x+[[h],[h]]) - TutFunc(x+[[h],[-h]]) - TutFunc(x+[[-h],[h]]) + TutFunc(x-[[h],[h]]))/(4*h**2)
Hx2x1 = Hx1x2
Hx2x2 = (TutFunc(x+[[0],[h]]) - 2*TutFunc(x) + TutFunc(x-[[0],[h]]))/h**2
Hess = np.array([[Hx1x1, Hx1x2],[ Hx2x1, Hx2x2]])
return Hess
x0=([0.7, 0.3]
x=minimize(TutFunc,x0,method= 'Newton-CG', jac=JacobianFun, hess=HessianFun)
x0=([0.7, 0.3]
? это неполное выражение - person Evgeny   schedule 24.08.2018def JacobianFun(x): x=np.empty((2,1))
, который эффективно стирает наш аргумент в каждой функции, я думаю, что это неправильное поведение. - person Evgeny   schedule 24.08.2018x
, я думаю, что код становится смесью двух способов, и неясно, какой типJacobianFun
возвращает - вектор с плавающей запятой вектора двух функций. - person Evgeny   schedule 24.08.2018