1

我正在尝试求解 AX=X 形式的非线性方程组,其中,

A = M×M 矩阵

X = M×1 矩阵

因此,我总共有 M (=200) 个方程(和 M 个未知数)。

进一步来说,

A = [f11(x,y) f12(x,y) .... f1m(x,y),

 f21(x,y) f22(x,y) .....f2m(x,y),

 ..        ..           ..

 fm1(x,y) fm2(x,y) .... fmm(x,y)]

X = [V1,

   V2,

   V3,
   .
   .
   Vm-2,
   0.33,
   0.33]

因此,X 有 M-2 个未知数(V1,V2 ... Vm-1),A 有两个(x 和 y)。A 的元素是 x 和 y 的线性函数。

我在 scipy.fsolve 和 sympy.nsolve 上做了功课,但他们似乎不接受矩阵格式的方程。此外,由于有 200 个方程,每个方程都有所有未知数,因此逐个消除变量是不切实际的。

我对 python 比较陌生,所以非常感谢任何帮助。

谢谢

4

1 回答 1

1

令 f ij (x,y) = a i x + b j y。设 a = (a 1 , ..., a m ), b = (b 1 , ..., b m ), v = (V 1 , ... V m-2 , 1/3, 1/ 3)是真正的列向量。然后

A = [f ij (x,y)] m×m = [a i x + b j y] m×m = [a i x] m×1 [b j y] 1×m = ([a i ] m×1 x)([b j ] 1×m y)

您的方程是 Av = v,或 Av = Iv(其中 I 是 m×m 单位矩阵),因此您想要求解 (AI)v = 0。这让人想起特征值问题。该特征值问题的特征方程是 0 = det(AI) = det(([a i ] m×1 x)([b j ] 1×m y) - I),其中 det 是行列式(我固定1) 处的特征值。

一种可能的方法是对 x 和 y 数值求解 det(([a i ] m×1 x)([b j ] 1×m y) - I) = 0 (使用像牛顿法这样的求根算法) ,产生一个常数矩阵 A。

接下来,返回并使用线性方程求解器来求解 (AI)v = 0 以找到 v 1 , v 2 , ..., v m-2使用您以数值方式求解的常数矩阵 A。不幸的是,这不会保留 v 底部的 1/3 常量,因此您必须返回并重做上一步几次,直到您得到一个矩阵 A,该矩阵 A 接近最后两个值的 1/3 .


另一种解决方案是将整个事物粘在非线性方程求解器中。这种方法将比我上面解释的方法慢。

于 2012-08-22T22:36:25.437 回答