Python 最小化‖;Ax&x2212;b‖;(如何编写与scipy.optimize.fmin()一起使用的函数)

Python 最小化‖;Ax&x2212;b‖;(如何编写与scipy.optimize.fmin()一起使用的函数),python,scipy,minimize,algebra,Python,Scipy,Minimize,Algebra,我正在尝试最小化Ax−b‖通过scipy.optimize.fmin功能。我们使用的数据是: A = np.row_stack([[1,1,2],[1,2,1],[2,1,1],[2,2,1]]) B = np.row_stack([[1],[-1],[1],[-1]]) x由x=(AtA)找到^(−1) Atb,下面是我执行此任务的代码 def find_x(A,B): At = np.transpose(A) # Transpose A AtA = np.matmul(A

我正在尝试最小化Ax−b‖通过
scipy.optimize.fmin
功能。我们使用的数据是:

A = np.row_stack([[1,1,2],[1,2,1],[2,1,1],[2,2,1]])

B = np.row_stack([[1],[-1],[1],[-1]])
x由
x=(AtA)找到^(−1) Atb
,下面是我执行此任务的代码

def find_x(A,B):
    At = np.transpose(A) # Transpose A
    AtA = np.matmul(At, A) # Multiply A with At
    return np.matmul(np.matmul(np.linalg.inv(AtA),At),B)
分配说明说我应该将此结果与
scipy.optimize.fmin()
的结果进行比较,根据我所读的内容,我需要一个对象/函数来求解
fmin
。但我真的不知道,如果函数不包含x,我如何为它编写代码,x是我想通过优化找到的向量

我已经尝试过这样定义函数的基本方法:

def f(x):
    k = np.subtract(np.matmul(A, x), B)
    return np.linalg.norm(k)
并将其贯穿整个过程:

def fmin(x0):
    return scipy.optimize.fmin(f(x),x0)

其中x0是一些初始猜测(与find_x的结果形状相同),但我只得到一条错误消息“'numpy.float64'对象不可调用”

scipy.optimize.fmin(f(x),x0)
应该是
scipy.optimize.fmin(f,x0)
您想传递一个接受一些输入的函数,而不是已经计算过的函数(或者正如文档所说:func callable func(x,*args)->callable!!=
“'numpy.float64'对象不可调用”
)。其他东西看起来有点嘈杂,但应该可以(尽管我没有测试任何东西)。(旁注:与fmin进行比较的任务非常奇怪,因为这将是世界上最后一个应该使用的算法->对于这样一个自然平滑的优化问题,不使用一阶或二阶信息)啊,好吧,谢谢!我对python非常陌生,还不习惯通过文档查找我需要的信息,但我下次会尝试进行更深入的搜索!但不管怎样,你的意思是我可以“定义”f在fmin函数中?因为这是我尝试过的,但我无法运行代码,因为x是一个未知的变量。但是如果没有x,我还能定义f吗?fmin的目的是找到x。我在我的帖子中不清楚这个任务是由我的soley教授作为一项教育任务交给我的。所以比较re没有真正的目的sultsIt很难理解问题是什么。在我的第一句话中替换它可能就足够了,这样它就可以工作了。如果没有,请使用可复制的内容更新问题。是的,x是未知的优化对象,因此您永远不会传递对x进行计算的内容,但某些函数已经准备好从scipy获取x作为第一个参数可能你只是想在谷歌上搜索一些像高阶函数之类的东西,也许是在python上下文中。