将预定参数传递给scipy.optimize.fs

2024-09-26 21:41:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用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(或更合适的模块?)求解剩余参数?


Tags: 系统感兴趣方程方程式线性方程组预先确定c11c31
1条回答
网友
1楼 · 发布于 2024-09-26 21:41:10

所以,我自己找到了一个有效的解决办法。不确定这是否是最好的解决方案,但它是有效的。在

回答我的问题,scipy.optimize.fsolve接受参数args=(此处为额外参数)。我把预先确定的参数放在这里。当调用函数时,首先解析参数,并将3个预定值放在适当的位置。在

剩下的6个变量在一个列表中传递,并被迭代以填补剩余的空白。由于参数不变,所以每个变量总是放在矩阵中的同一位置。在

使用这种方法,任意3个矩阵元素都可以预先确定,fsolve将尝试确定余数。在

fsolve的调用语句如下所示:

paramSolve1, infodict, ier, mesg = scipy.optimize.fsolve(func,(i,i,i,i,i,i),args = (knownVals[0],knownVals[1],knownVals[2]), full_output = True, warning = False)

knwonVals是一个预定参数的列表,i是一个起始猜测(所有6个缺失的参数都得到相同的起始猜测)。full_output允许返回可选输出,warning=False关闭未找到解决方案时出现的警告消息。有关详细信息,请查看http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html

对于感兴趣的人,问题的完整代码如下。在

^{pr2}$

相关问题 更多 >

    热门问题