0

我遇到了一个非常大的非线性方程组,它看起来像:

  • M'UM = A
  • M'VM = B

其中 M、U、V 是未知d*d矩阵,A 和 B 是d*d具有以下性质的已知矩阵:

  • U 和 V 是对角矩阵
  • M 的主对角线元素全为 1
  • A 和 B 是对称矩阵,它们的条目是已知的
  • M' 表示 M 的转置。

请注意,(非线性)方程的总数和未知变量的总数是相同的,即。d(d+1) 准确地说。因此,它确保该系统具有独特的解决方案。

我试图通过R使用nleqslvBB. 但是他们的文档没有涵盖以矩阵形式输入未知数的情况。在最坏的情况下,我们可以手动编写所有方程式,并使用上述软件包。但是,我正在寻找更好的方法。

任何帮助将不胜感激。即使有人建议其他一些可能在这方面有所帮助的编程语言或软件,那也没关系。谢谢你。

4

1 回答 1

0

我找到了这个问题的部分解决方案。具体来说,我找到了一种方法来找到 M'UM = A 的解决方案,给定 A,假设 A 是对称矩阵。

具体来说,每个实对称矩阵都可以写成

X = QDQ 转置

其中 Q 由 X 的一组正交特征向量形成,D 的对角线包含相应的特征值。

资源。

使用 numpy,很容易得到特征值和特征向量:

def solve(A):
    eigenvalues, eigenvectors = np.linalg.eig(A)
    M = eigenvectors
    U = np.diag(eigenvalues)
    M_prime = M.T
    return M, U, M_prime

然后,我在一个随机对称数组上尝试了这个:

A = np.array([[0.2777055 , 0.17491669, 0.22634241],
       [0.17491669, 0.94572725, 0.4859058 ],
       [0.22634241, 0.4859058 , 0.89480942]])

M, U, M_prime = solve(A)
M @ U @ M_prime

结果:

array([[0.2777055 , 0.17491669, 0.22634241],
       [0.17491669, 0.94572725, 0.4859058 ],
       [0.22634241, 0.4859058 , 0.89480942]])

果然,当你将这三个矩阵相乘时,你会得到原来的 A。

不幸的是,我不知道如何以同时满足这两个方程的方式来解决这个问题。

于 2022-02-24T01:05:32.347 回答