如何解决在Python中将Jacobian传递给newton_krylov非线性求解器
我想通过在python中使用newton_krylov求解器来求解非线性代数方程组。
定义方程组的函数如下:
def sys(x,param1,param2,param3,param4):
...
return f
在输入处获得一个向量x
,以及三个向量param1
,param2
,param3
和一个数字param4
,它们作为参数,并在输出处返回另一个向量f
。
我还有一个函数可以给出系统的雅可比行列式。看起来像
def jac(x,param3):
dim,=x.shape # this is the first line of this function that appears to be problematic
...
return jacob
此函数在输入时使用向量x
,以及与sys
相同的参数,是param4
的一部分,然后返回另一个向量jacob
。
最后,求解器的调用方式如下
sol=newton_krylov(lambda x:sys(x,param4),guess,method=jac(x,param3))
这时,我在dim,=x.shape
函数中的行jac
上收到一条错误消息,内容为:ValueError:太多的值无法解包(预期为1)。
我相信求解器无法理解x
中的method=jac(x,param3)
是未知变量的向量,但是我不知道如何解决这个问题。
非常感谢有答案的人。
解决方法
向量parallelFor
的形状为x
,其中n是向量中值的数量。因此,(n,1)
返回x.shape
,但是您期望它返回(n,1)
。一种解决方案是捕获(n,)
,但不存储它。即
1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。