給:minf(x),初始點:x0
過程①
求出下降方向d:∇^2 f(x0) * d =- ∇f(x0)
過程②
更新x:x1 = x0 + d
過程③
||∇f(x)|| < ε,則得到x* = x
import matplotlib.pyplot as plt
import sympy
import numpy as np
plt.rcparams[
'font.sans-serif']=
['simhei'
]#用來正常顯示中文標籤
plt.rcparams[
'axes.unicode_minus']=
false
x1 = sympy.symbol(
'x1'
)x2 = sympy.symbol(
'x2'
)f = x1 **
2+ x2 **
2+ x1 * x2 +
2* x1 -
3* x2
# 梯度向量 gfun
gfun =
lambda x: np.array([2
* x[0]
+ x[1]
+2,2
* x[1]
+ x[0]
-3])
# 海森矩陣 hess
hess =
lambda x: np.array([[
2,1]
,[1,
2]])
x = np.array(
[0.0
,0.0])
defnewton
(x):
lx1=
lx2=
for i in
range
(100):
0])1
])dk = gfun(x)
print
(x) length = np.linalg.norm(dk)
# print(length)
if length <
0.05
:print
(x)break
else
: v2fk = hess(x)
dk =-1
*np.linalg.solve(v2fk, dk)
x += dk
plt.plot(lx1,lx2,linestyle=
"--"
, marker=
"o", color=
"blue"
,label=
"newton軌跡"
)def
graph()
: x1 = np.arange(-3
,3+0.05
,0.05
) x2 = np.arange(-1
,4.5
+0.05
,0.05
)[x1, x2]
= np.meshgrid(x1, x2)
f = x1 **
2+ x2 **
2+ x1 * x2 +
2* x1 -
3* x2 # 給定的函式
最速下降法(適用於求二階極小值)
最速下降法步驟 給 min,初始點 x0 a0,b0 t,精度 過程 求出求出下降方向d,步長 下降方向 d f x 下次更新x的最優步長 x f x d 0 過程 更新x x1 x0 d0 過程 當 f x 則停,最小值x x 最速下降法 精確搜尋 import sympy import nump...
折半查詢法(僅適用於已排好順序)
includeusing namespace std templateint binarysearch type array,int lenght,type key 不適用於char 型別 array mid key right mid 1 left mid 1 return 1 int main ...
適用於初學者的Python基礎(二)
字串 這種資料型別在生活中很常見,比如密碼,姓名,賬號等等 1.python中的字串格式 2.字串輸出 3.字串輸入 4.下標和切片 所謂的下標就是編號,好比每個足球運動員身上的號碼牌一樣,通過這個號碼牌我們就可以找到這個人 字串中 下標 的使用 如果想要取出部分字元,那麼可以通過下標的方法 下標從...