python解非线性方程组的几种方法,python 解非线性方程
描述几组数学上已知的X和Y,求下列非线性方程的三个常系数K,B,F。
y(x)=1(ekx)(b(1 ebx b f(XB(1 ebx b)))y(x)=1-(e^{-kx})(b(1-e^{-\frac{x}{b}} f(x-b(1-e^{-\frac{x}{b}})))y(x)=1(ekx)(b(1 ebx f(XB(1 ebx))
将方程转换成标准的二元函数。
h ( x,y k,b,f)=y((ek x)(b(1 e XB f(x b(1 e XB)))h(x,y k,b,f)=y-((e^{-kx})(b(1-e^{-\ frac { x } { b } } f(x-b(1-e^{-\frac{x}{b}})))h(x,yk,b,f)=y((ekx)(b(1ebx f(x b(1 e bx)))
形成以下三元非线性方程
{ h ( x 0,y 0 k,b,f )=0 h ( x 1,y 1 k,b,f )=0 h ( x 2,y 2 k,b,f )=0 \begin{cases} h(x_0,y_0k,b,f)=0 \\ h(x_1,y_1k,b,f)=0 \\ h(x_2,y_2k,b,f)=0 \\ \end{cases} h(x0,y 0 k , b , f )=0 h ( x 1
代码由python的fsolve求解,代码如下:
import numpy as NP from scipy . optimize import fsolve,rootdef func(X): def h(x,y,k,b,f):return y-(1-NP . exp(-k * X))*((b *(1-NP . exp(-X/b))f *(X-b *(1-NP . exp(-X/b))))k,b,f=X.tolist() x=[8.833,4.949,20.005] y=[4 1])print(RES)#[0.31822147 5.13982664 0.20741606]重要提示:fslove得到的是局部最优解,因此不一定能得到全局最优解,所以迭代初始值x0可能对结果影响很大,一个不合适的初始值可能导致不收敛或偏差太大的结果,因此给出如下警告。
RuntimeWarning:根据最近十次迭代的改进来衡量,迭代没有取得良好的进展。
一般情况下,fsolve在使用时只需要提供要求解的函数func和初始迭代值x0。
解为方程组时,func要求返回方程列表(list或者list或者np.array都可以);当解为单个方程时,直接返回方程即可。
详见官网文档。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。