python视频教程栏目介绍各种最优化算法
相关免费学习推荐:python视频教程
二分法
函数详见rres,此代码使该算法运行了两次
def asdf(x): rres=8*x**3-2*x**2-7*x+3 return rres i=2 left=0 right=1 while i>0 : i = i-1 ans = 0.1 mid1 = (left + right + ans) / 2 mid2 = (left + right - ans) / 2 a=asdf(mid1) c=asdf(mid2) if a > c : right = mid1 else : left = mid2 b=(left+right) / 2 print("左极限=%s,右极限=%s,极小值x=%s"%(left,right,b))
左极限=0.45,右极限=0.775,极小值x=0.6125
收获:
这是我第一个实现的代码。学习完该算法以后,逻辑框架基本上就有了,剩下需要明确的就是对应的python的语言。于是我就开始了查找“如何定义函数”(详见mofan的优酷),“循环体”和“if条件语句”的格式(https://blog.gaodaima.com/qq_39407518/article/details/79822498)“数学符号”(详见mofan的优酷),以及print的使用
1.def是python中指定义,一般用来定义函数,如果需要深度学习搭建网络可用来定义网络。值得注意的一点是
return必须要加在函数后面另起一行。
我不清楚为什么,但是如果没有加的话,那个函数公式就是一个花瓶,就像一个结果输不出去。
2.最坑的就是逻辑。一开始逻辑没理清楚,或者说在代码上有疏漏,导致我将left和right放在了循环体里,结果可想而知。不过也是因为这个错误,我知道pycharm中的debug怎么用,挺简单的,百度一下就出来了。
3.不知道什么原因,看的莫烦视频中的print多个变量一起输出是没有办法在我的pycharm中使用的,出来的结果很奇怪。可能是因为我是win10不是ios吧。print如果多个变量一起输出必须是print("名字:%s,名字2:%s"%(a,b))结果输出就是名字:a ,名字2:b
问题:1.为什么要加return?
return的意思是输出这个def里面任意一个变量值作为结果显示。一般情况而言,是输出函数的关系式的命名,这样当你调用这个函数的时候,变量对应的函数值才能显示出来,否则只运行没有结果,不会有效果。
格点法——三点等分法
import numpy as np def qwer(x): third = np.exp(x) - 5*x return third left = 1 right = 2 mid1 =float(left+right) / 2 mid2 = (left+mid1) / 2 mid3 = (mid1+right) /2 a = qwer(mid1) b = qwer(mid2) c = qwer(mid3) i = 5 while i > 0: i=i-1 if a > b: if c > b : #b right = mid1 mid1 = mid2 a=b mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) else:#b>c #c left = mid1 mid1 = mid3 a = c mid2 = (left + mid1) / 2 mid3 = (mid1 + right)<div style="color:transparent">本文来源gaodai^.ma#com搞#代!码网</div> / 2 b = qwer(mid2) c = qwer(mid3) else:#b>a if a > c: #C left = mid1 mid1 = mid3 a = c mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) else:#b>a&c>a # a left = mid2 right = mid3 mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) print("最小值=%s"%mid1) print("函数值=%s"%a)
最小值=1.609375 函数值=-3.047189552275773