感谢师兄提供的题图。(这图应该是p的,我找电视剧,没谢三哥这三个字。)
早些年做科研的时候,其实就用倚天屠龙走天下,一个矩阵对角化,一个非线性方程求解。当时是研究的冷原子,算是比较新的方向,量子光学的新时代吧。研究冷原子做自洽平均场,做计算会用到非线性方程,还记得是由自由能极值条件得出的一个粒子数方程,一个能隙方程,联立求解。我当年用的c语言的科学计算库,师兄用的fortran。我们组是非线性方程求解做的,还记得隔壁组用的是非线性最优化。
python提供了非线性方程组的求解fsolve函数,具体可以查阅文档,下面给出简单使用的举例。
基本需要一个接受数组返回同样长度数组的函数,随后调用即可,参数可以放在args用元组传递。
然而,这个函数只能解决实数的,我自己写了个复数版本的。我不知道有没有对应的库,是不是重复造轮子的行为。利用实部和虚部分离的方法,在内部调用fsolve解决。参数接口只用了最简单的部分,可以自己酌情加上去。
先写测试函数
函数和测试
值得一提的是,非线性方程求解一般不会是单解,而且依赖初值。所以,实际中,会选好的初值(你预估的结果)。特别在扫场(参数连续变化)时,会用前一个结果做后一个的初值,保持结果的连续性。
完。