【python】求解非线性方程

1.非线性方程

求方程的在给定初值1.5附近的一个实根
x 980 − 5.01 x 979 + 7.398 x 978 − 3.388 x 977 − x 3 + 5.01 x 2 − 7.398 x + 3.388 = 0 x^{980} - 5.01x^{979} + 7.398x^{978} - 3.388x^{977} - x^3 + 5.01x^2 - 7.398x + 3.388=0 x9805.01x979+7.398x9783.388x977x3+5.01x27.398x+3.388=0

使用scipy.optimize.fslovescipy.optimize.root,需要给初始值

from scipy.optimize import fsolve, root
fx = lambda x: x**980-5.01*x**979+7.398*x**978\
  -3.388*x**977-x**3+5.01*x**2-7.398*x+3.388
x1 = fsolve(fx, 1.5, maxfev=4000)  #函数调用4000次
x2 = root(fx, 1.5)

scipy.optimize.fslove结果:[1.21]
scipy.optimize.root结果:

message: The solution converged.(方案收敛)
success: True
status: 1
fun: [-1.233e+69]
x: [ 1.210e+00]
nfev: 319
fjac: [[-1.000e+00]]
r: [ 2.542e+80]
qtf: [ 2.002e+72]

2.非线性方程组

2.1.唯一解

{ x 1 2 + x 2 2 = 1 x 1 = x 2 \left\{ \begin{matrix} x_1^2+x^2_2=1 \\ x_1=x_2 \end{matrix} \right. {x12+x22=1x1=x2

使用scipy.optimize.fslovescipy.optimize.root,需要给初始值

from scipy.optimize import fsolve, root
fx = lambda x: [x[0]**2+x[1]**2-1, x[0]-x[1]]
s1 = fsolve(fx, [1, 1])
s2 = root(fx, [1, 1])
print(s1,'\n','--------------'); print(s2)

scipy.optimize.fslove结果:[0.70710678 0.70710678]
scipy.optimize.root结果:

message: The solution converged.
success: True
status: 1
fun: [ 4.441e-16 0.000e+00]
x: [ 7.071e-01 7.071e-01]
nfev: 9
fjac: [[-8.165e-01 -5.773e-01]
[ 5.773e-01 -8.165e-01]]
r: [-1.732e+00 -5.774e-01 1.633e+00]
qtf: [-3.646e-10 2.578e-10]

2.2.最小二乘解

{ f 1 ( x ) = 0 f 2 ( x ) = 0 ⋮ f n ( x ) = 0 \left\{ \begin{matrix} f_1(x)=0 \\f_2(x)=0 \\\vdots \\f_n(x)=0 \end{matrix} \right. f1(x)=0f2(x)=0fn(x)=0
其中 x x x m m m位未知量,若方程数>未知量则求该式的最小二乘解,即求 ∑ i = 1 n f i 2 ( x ) \sum^{n}_{i=1}f^2_{i}(x) i=1nfi2(x)的最小值

使用scipy.optimize.least_squares求非线性方程组的最小二乘解

from  scipy.optimize import least_squares
least_squares(funcs,x0)

其中 f u n c s = [ f 1 ( x ) , f 2 ( x ) , ⋯   , f n ( x ) ] T funcs = [f_1(x),f_2(x),\cdots,f_n(x)]^T funcs=[f1(x),f2(x),,fn(x)]T

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值