pyhton數據處理與分析之scipy優化器及不同函數求根
1、Scipy的優化器模塊optimize可以用來求取不同函數在多個約束條件下的最優化問題,也可以用來求取函數在某一點附近的根和對應的函數值;
2、scipy求取函數最優解問題(以多約束條件下的最小值為例)如下所示:
import numpy as np #導入數據結構nmupy模塊
import matplotlib.pyplot as plt
from scipy.optimize import minimize #導入最小值優化模塊
def func(x):
return (2*x[0]*x[1]+2*x[0]-x[0]**2+2*x[1]**2) #定義函數
def func_deriv(x):
dfdx0=(-2*x[0]+2*x[1]+2)
dfdx1=(2*x[0]+4*x[1])
return np.array([dfdx0,dfdx1])
cons=({"type":"eq","fun":lambda x:np.array([x[0]**3-x[1]]),"jac":lambda x:np.array([3*(x[0]**2),-1.0])},{"type":"ineq","fun":lambda x:np.array([x[1]-1]),"jac":lambda x:np.array([0,1])})#定義函數的多個約束條件
res=minimize(func,[-1.0,1.0],jac=func_deriv,constraints=cons,method="SLSQP",options={"disp":True}) #最小值優化函數格式調用
print("RESTRICT:",res)
3、scipy的root函數也可以用來求取在特定點附近的一元函數的根:
import numpy as np #導入數據結構nmupy模塊
import matplotlib.pyplot as plt
from scipy.optimize import root
def f(x):
return x**2-3*x+2
sol=root(f,1) #表示求取函數f(x)在x=1附近處的根
print("ROOT:",sol.x,sol.fun) #輸出最優根處的x的值及其數值計算的函數值