【发布时间】:2017-02-20 22:46:41
【问题描述】:
我想求解以下非线性方程组。
注意事项
-
a_k和x之间的dot代表dot product。 - 第一个等式中的
0代表0 vector,第二个等式中的0是scaler 0 - 如果重要的话,所有矩阵都是稀疏的。
已知
-
K是一个n x n(正定)矩阵 - 每个
A_k都是一个已知(对称)矩阵 - 每个
a_k是一个已知的 n x 1 向量 -
N是已知的(假设 N = 50)。但我需要一种可以轻松更改 N 的方法。
未知(试图解决)
-
x是一个n x 1一个向量。 - 每个
alpha_k为1 <= k <= N一个缩放器
我的想法。
我正在考虑使用scipy root 来查找 x 和每个 alpha_k。我们基本上有来自第一个方程的每一行的n 方程和来自约束方程的另一个N 方程来求解我们的n + N 变量。因此,我们有所需数量的方程来获得解。
我对@987654345@ 和alpha_k's 也有一个可靠的初步猜测。
玩具示例。
n = 4
N = 2
K = np.matrix([[0.5, 0, 0, 0], [0, 1, 0, 0],[0,0,1,0], [0,0,0,0.5]])
A_1 = np.matrix([[0.98,0,0.46,0.80],[0,0,0.56,0],[0.93,0.82,0,0.27],[0,0,0,0.23]])
A_2 = np.matrix([[0.23, 0,0,0],[0.03,0.01,0,0],[0,0.32,0,0],[0.62,0,0,0.45]])
a_1 = np.matrix(scipy.rand(4,1))
a_2 = np.matrix(scipy.rand(4,1))
我们正在努力解决
x = [x1, x2, x3, x4] and alpha_1, alpha_2
问题:
- 我实际上可以暴力破解这个玩具问题并将其提供给求解器。但是我该如何解决这个玩具问题,以便我可以轻松地将其扩展到当我说
n=50和N=50的情况下 - 对于较大的矩阵,我可能必须显式计算雅可比矩阵??。
任何人都可以给我任何指示吗?
【问题讨论】:
-
你看过 scipy sparse linalg 求解器吗?
-
展示蛮力方法。我们需要您的代码开始。
-
这可能完全关闭,但也许cvxopt 可能适合您的问题。只是一个想法。
-
least_squares支持稀疏矩阵。文档字符串有一个root-finding的例子 -
一些随机 cmets:(1) 如果您了解有关该问题的更多细节,将会有所帮助。非线性有点模糊,是不是也是非凸的? (2)如果是非凸的,则不能在
cvxopt(保罗的方法)内制定。 (3) 如果它是凸的,则可以在 cvxopt/cvxpy 和 co 中制定它。并且您将得到一个多项式时间求解器(仍然存在凸问题,无法在 DCP @ cvxopt 等中制定。)(4)也许我遗漏了一些东西,但这个问题看起来受到限制,我没有请参阅 sparse.linalg 或 least_squares 解决此问题。 (5) 试试SLSQP。
标签: numpy scipy sparse-matrix mathematical-optimization equation-solving