[英]Python fmin(find minimum) for a vector function
I would like to find the minimum of 3dvar function defined as: 我想找到最小的3dvar函数定义为:
J(x)=(x-x_b)B^{-1}(x-x_b)^T + (yH(x)) R^{-1} (yH(x))^T (latex code) J(x)=(x-x_b)B ^ { - 1}(x-x_b)^ T +(yH(x))R ^ { - 1}(yH(x))^ T(乳胶代码)
with B,H,R,x_b,y given. 给出B,H,R,x_b,y。 I would like to find the argmin(J(x)). 我想找到argmin(J(x))。 However it seems fmin in python does not work. 然而,似乎python中的fmin不起作用。 (the function J works correctly) (函数J正常工作)
Here is my code: 这是我的代码:
import numpy as np
from scipy.optimize import fmin
import math
def dvar_3(x):
B=np.eye(5)
H=np.ones((3,5))
R=np.eye(3)
xb=np.ones(5)
Y=np.ones(3)
Y.shape=(Y.size,1)
xb.shape=(xb.size,1)
value=np.dot(np.dot(np.transpose(x-xb),(np.linalg.inv(B))),(x-xb)) +np.dot(np.dot(np.transpose(Y-np.dot(H,x)),(np.linalg.inv(R))),(Y-np.dot(H,x)))
return value[0][0]
ini=np.ones(5) #
ini.shape=(ini.size,1) #change initial to vertical vector
fmin(dvar_3,ini) #start at initial vector
I receive this error: 我收到此错误:
ValueError: operands could not be broadcast together with shapes (5,5) (3,3)
How can I solve this problem? 我怎么解决这个问题? Thank you in advance. 先感谢您。
reshape argument x
in the function dvar_3
, the init
argument of fmin()
needs a one-dim array. 在函数dvar_3
参数x
, fmin()
的init
参数需要一个dvar_3
数组。
import numpy as np
from scipy.optimize import fmin
import math
def dvar_3(x):
x = x[:, None]
B=np.eye(5)
H=np.ones((3,5))
R=np.eye(3)
xb=np.ones(5)
Y=np.ones(3)
Y.shape=(Y.size,1)
xb.shape=(xb.size,1)
value=np.dot(np.dot(np.transpose(x-xb),(np.linalg.inv(B))),(x-xb)) +np.dot(np.dot(np.transpose(Y-np.dot(H,x)),(np.linalg.inv(R))),(Y-np.dot(H,x)))
return value[0][0]
ini=np.ones(5) #
fmin(dvar_3,ini) #start at initial vector
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.