我试着用python来解一个由6个非线性方程组成的系统。有9个变量,其中3个是预先确定的(留下一个由6个方程组成的系统,其中6个未知数)。问题是,它可能是任何3个,我无法事先知道。在
下面是方程式(如果你感兴趣的话)。在
c11*c12+c21*c22+c31*c32=0
c11*c13+c21*c23+c31*c33=0
c12*c13+c22*c23+c32*c33=0
c11*c21+c12*c22+c13*c23=0
c11*c31+c12*c32+c13*c33=0
c21*c31+c22*c32+c23*c33=0
注意:这是我认为最快/最容易解决的方法。另一个可能的表达是:
|c11 c21 c31|
A = |c12 c22 c32|
|c13 c23 c33|
|c11 c12 c13|
B = |c21 c22 c23|
|c31 c32 c33|
|1 0 0|
A*B = |0 1 0|
|0 0 1|
我的问题是:是否有必要将其中的3个设置为已修复,并且scipy.optimize.fsolve(或更合适的模块?)求解剩余参数?
所以,我自己找到了一个有效的解决办法。不确定这是否是最好的解决方案,但它是有效的。在
回答我的问题,scipy.optimize.fsolve接受参数args=(此处为额外参数)。我把预先确定的参数放在这里。当调用函数时,首先解析参数,并将3个预定值放在适当的位置。在
剩下的6个变量在一个列表中传递,并被迭代以填补剩余的空白。由于参数不变,所以每个变量总是放在矩阵中的同一位置。在
使用这种方法,任意3个矩阵元素都可以预先确定,fsolve将尝试确定余数。在
fsolve的调用语句如下所示:
knwonVals是一个预定参数的列表,i是一个起始猜测(所有6个缺失的参数都得到相同的起始猜测)。full_output允许返回可选输出,warning=False关闭未找到解决方案时出现的警告消息。有关详细信息,请查看http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html
对于感兴趣的人,问题的完整代码如下。在
^{pr2}$相关问题 更多 >
编程相关推荐