生活随笔
收集整理的這篇文章主要介紹了
跟黄申老师学数学(python实现)-01迭代法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
直觀定義
迭代法(Iterative Method),簡單來說,其實(shí)就是不斷地用舊的變量值,遞推計(jì)算新的變量值。循環(huán)。
具體應(yīng)用
- 求數(shù)值的精確/近似解
- 二分法(Bisection method)
- 牛頓迭代法(Newton’s method)
- 在一定范圍內(nèi)查找目標(biāo)值
- 機(jī)器學(xué)習(xí)中的迭代算法
- K-均值算法(K-means clustering)
- PageRank 的馬爾科夫鏈(Markov chain)
- 梯度下降法(Gradient descent)
應(yīng)用詳解
求方程的精確/近似解
def get_squre_root(n,delta_threshold=0.000000000000001,max_try=1000):
if n <= 1:
return -1min = 1.0n =
float(n)max = nmid = (max+min)/2.0
print(mid)
for i
in range(max_try):_n = mid * middelta = _n-n
if delta == 0:
print(
"精確值")
return midabs_delta = abs(delta)
if abs_delta <= delta_threshold:
print(
"近似值")
return mid
else:
if delta>0:max = mid
else:min = midmid = (max+min)/2.0
print(mid)
return minget_squre_root(16)
復(fù)制代碼查找匹配記錄
快速查找記錄,除了用字典,還可以用著名的 二分查找法(前提是有序)。這也是迭代逼近的典型案例。
def search(words_list,target_word):if not words_list:
return Falsemin =
1max = len(words_list)
while True:mid = (max + min)/
2mid_word = words_list[mid]
if target_word == mid_word:print(mid)
return Trueelif target_word > mid_word:min = mid
else:max = mid
if max <= min:
return Falsereturn False
words_list = [
"e"]
words_list = sorted(words_list)
print(words_list)
print(search(words_list,
"i"))
復(fù)制代碼
def search(words_list,target_word):if not words_list:
return Falsemin =
0max = len(words_list) -
1while True:mid = min + (max - min)/
2mid_word = words_list[mid]
if target_word == mid_word:print(mid)
return Trueelif target_word > mid_word:min = mid
else:max = mid
if max <= min:
return Falsereturn False
words_list = [
"i",
"love",
"my",
"wife",
"than",
"myself's",
"body",
"."]
words_list = sorted(words_list)
print(words_list)
print(search(words_list,
"i"))
復(fù)制代碼- 二分查找,再改bug后,第三版(應(yīng)該沒bug了吧。。)
def search(words_list,target_word):if not words_list:
return Falsemin =
0max = len(words_list) -
1while True:mid = min + (max - min)/
2mid_word = words_list[mid]
if target_word == mid_word:print(mid)
return Trueelif target_word > mid_word:min = mid +
1else:max = mid -
1if max < min:print(max)
return Falsereturn False
words_list = [
"i",
"love",
"my",
"wife",
"than",
"myself's",
"body",
"."]
words_list = sorted(words_list)
print(words_list)
print(search(words_list,
"i"))
復(fù)制代碼思考
迭代法的特點(diǎn)是“分而治之”,不斷重復(fù)一個(gè)相似的行為,一步步地縮小目標(biāo)范圍。計(jì)算機(jī)很適合處理這種重復(fù)的工作,而人類并不擅長,所以有時(shí)候不敏感。在編程的時(shí)候,可以特意留意這一差異。
WechatIMG37.jpeg
總結(jié)
以上是生活随笔為你收集整理的跟黄申老师学数学(python实现)-01迭代法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。