題目如下:等式約束下的拉格朗日乘子法求解過程
題目如上:
from scipy.optimize import minimize
import numpy as np
#目標函式:
deffunc
(args)
: fun =
lambda x:60-
10*x[0]
-4*x[1
]+ x[0]
**2+ x[1]
**2- x[0]
*x[1
]#fun = lambda x: 10 - x[0]**2 - x[1]**2
return fun
#約束條件,包括等式約束和不等式約束
defcon
(args)
: cons =()
#cons = (,
# )
return cons
if __name__ ==
"__main__"
: args =()
args1 =()
cons = con(args1)
x0 = np.array(
(2.0
,1.0))
#設定初始值,初始值的設定很重要,很容易收斂到另外的極值點中,建議多試幾個值
#求解#
res = minimize(func(args)
, x0, method=
'slsqp'
, constraints=cons)
print
(res.success)
print
("x1="
,res.x[0]
,"; x2="
,res.x[1]
)print
("最優解為:"
,res.fun)
結果如下:
題目如上:
#匯入sympy包,用於求導,方程組求解等等
from sympy import
*#設定變數
x1 = symbols(
"x1"
)x2 = symbols(
"x2"
)alpha = symbols(
"alpha"
)#beta = symbols("beta")
#構造拉格朗日等式
l =60-10
*x1 -
4*x2 + x1*x1 + x2*x2 - x1*x2 - alpha *
(x1 + x2 -8)
#求導,構造kkt條件
difyl_x1 = diff(l, x1)
#對變數x1求導
difyl_x2 = diff(l, x2)
#對變數x2求導
difyl_alpha = diff(l, alpha)
#對alpha求導
#求解kkt等式
aa = solve(
[difyl_x1, difyl_x2, difyl_alpha]
,[x1, x2, alpha]
)print
(aa)
x1=aa.get(x1)
x2=aa.get(x2)
alpha=aa.get(alpha)
print
("最優解為:",60
-10*x1 -
4*x2 + x1*x1 + x2*x2 - x1*x2 - alpha *
(x1 + x2 -8)
)
結果如下:三種方法,結果一致!!
筆記 6 Python學習 函式
def 函式名 呼叫 函式名 乙個函式引數 def second name print name 我愛你!second 花花 花花我愛你!多個函式引數 def add num1,num2 result num1 num2 print result add 1,2 3函式的返回值return def ...
6 Python學習筆記 列表,元祖
列表 列表建立 var 1,2,3 列表訪問 索引以及切片訪問列表的區域性內容 列表的修改 1 可以通過索引切片的方式修改列表中已經存在的元素 刪除元素 del var 通過索引刪除元素 列表的方法 extend seq 將seq序列的每乙個元素依次追加到列表末尾 pop index 彈出指定索引位...
6 python學習之執行python的方式
python的直譯器 使用python 2.x直譯器 python py 使用python 3.x直譯器 python3 py 其他直譯器 知道 python的直譯器如今有多個語言的實現,包括 1 互動式執行python的優缺點 優點缺點 2 退出官方的直譯器 1 直接輸入exit exit 2 使...