在Python中用Matrix形式求解非线性方程组

时间:2012-08-22 21:09:55

标签: python matrix equations nonlinear-functions

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

A = M-by-M矩阵

X = M-by-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的LINEAR函数。

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

我对python相对较新,所以非常感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分: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)< / p>

你的等式是Av = v,或者Av = Iv(其中I是m×m单位矩阵),所以你想要求解(A-I)v = 0.这让人联想到特征值问题。该特征值问题的characteristic equation为0 = det(AI)= det(([a i ] m×1 x)([b j ] 1×m y) - I),其中det是行列式(我将特征值固定为1)。

一种可能的方法是数值求解det(([a i ] m×1 x)([b j ] < sub> 1×m y) - I)= 0表示x和y(使用类似Newton's method的寻根算法),得到一个常数矩阵A.

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


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