我正在尝试解决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相对较新,所以非常感谢任何帮助。
谢谢
答案 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
另一种解决方案是将整个事物粘贴在非线性方程求解器中。这种方法比我上面解释的慢。