二分函数详见rres,这段代码让算法运行两次defasdf(x):rres=8*x**3-2*x**2-7*x+3返回rresi=2left=0right=1whilei>0:i=i-1ans=0.1mid1=(left+right+ans)/2mid2=(left+right-ans)/2a=asdf(mid1)c=asdf(mid2)ifa>c:right=mid1else:left=mid2b=(left+right)/2print("leftlimit=%s,rightlimit=%s,minimumvaluex=%s"%(left,right,b))leftlimit=0.45,rightlimit=0.775,minimumvaluex=0.6125收获:这是我第一次实现的代码。学完算法,逻辑框架基本有了,剩下需要弄清楚的就是对应的python语言。于是我开始寻找“如何定义一个函数”(详见mofan的优酷),“循环体”和“if条件语句”的格式(https://blog.csdn.net/qq\_39407518/article/details/79822498)《数学符号》(详见莫凡的优酷),以及print的使用1.def是python中中指的定义,一般用来定义函数。如果你需要深度学习来构建网络,你可以使用它来定义网络。值得注意的是,函数后面一定要加return,并另起一行。不知道为什么,不加的话,函数公式就是个花瓶,就像一个无法输出的结果。2.最糟糕的是逻辑。一开始逻辑不清晰,或者代码有遗漏,导致我把left和right放到了循环体内,结果可想而知。不过也是因为这个错误,知道怎么用pycharm中的debug,很简单,百度一下就出来了。3.不知道是什么原因,在我的pycharm中无法使用莫凡视频中的printmultiplevariables一起输出,结果很奇怪。可能是因为我是win10不是ios。print如果多个变量一起输出,一定是print("name:%s,name2:%s"%(a,b))结果输出是name:a,name2:b问题:1.为什么要加返回?return表示输出这个def中的任意一个变量值作为结果显示。一般来说就是输出函数的关系表达式的名字,这样调用这个函数的时候就可以显示变量对应的函数值,否则只会运行没有结果,没有任何作用。格点法——三点等分法importnumpyasnpdefqwer(x):third=np.exp(x)-5*xreturnthirdleft=1right=2mid1=float(left+right)/2mid2=(left+mid1)/2mid3=(mid1+right)/2a=qwer(mid1)b=qwer(mid2)c=qwer(mid3)i=5whilei>0:i=i-1如果a>b:如果c>b:#bright=mid1mid1=mid2a=bmid2=(left+mid1)/2mid3=(mid1+right)/2b=qwer(mid2)c=qwer(mid3)else:#b>c#cleft=mid1mid1=mid3a=cmid2=(left+mid1)/2mid3=(mid1+right)/2b=qwer(mid2)c=qwer(mid3)else:#b>aifa>c:#Cleft=mid1mid1=mid3a=cmid2=(left+mid1)/2mid3=(mid1+right)/2b=qwer(mid2)c=qwer(mid3)else:#b>a&c>a#aleft=mid2right=mid3mid2=(left+mid1)/2mid3=(mid1+right)/2b=qwer(mid2)c=qwer(mid3)print("最小值=%s"%mid1)print("函数值=%s"%a)最小值=1.609375函数值=-3.047189552275773python中data变量第一次运行结果明显错误,所以我用了debug。原来mid1永远是1而不是1.5,于是我开始了解数据变量。一开始我猜测python默认所有变量都是整数,但是根据二分法的结果,我意识到这个猜测是错误的,所以没有必要改变整个文件的变量格式。于是我在mid1公式前面加了一个float,结果显示为1.5。但是如果我把整个公式用()括起来,前面加上float,结果还是1,不太明白为什么。不过我知道python的数据格式是根据输入量来决定的。也就是说,如果你的输入量是整数类型,那么与其直接相关的计算输出也一定是整数类型,而它仍然没有使用整数类型。在我没有使用+float/+.0这两个方法之前,mid1~3都是整数。left=1.0right=2.0mid1=(left+right)/2或者不再在mid1前面加float,直接在输入的amount后面点一个点。我真的很想抱怨印刷品。太麻烦了。弄个%s,有时候拼不起来!!!!斐波那契方法deffibonacci(n):i=0a=0b=1foriinrange(n):i=i+1c=a+ba=bb=creturncdefbn(x):ert=x**2-6*x+2返回ertz=2p=0left=0.00000right=10.00000L1=right-leftwhilez<100:m=fibonacci(z)l=L1/mk=1.000/mifk<0.03:print("n=%s,Fn=%s"%(z,m))L2=l*fibonacci(z-1)t=left+L2r=right-L2whilep<3:p=p+1l3=t-re=bn(t)o=bn(r)ife>o:right=tt=rr=left+l3else:#o>e??left=rr=tt=right-l3breakelse:z=z+1okk=(左+右)/2okky=bn(okk)print(左)print(右)print("最小值x=",okk)print("最小值y=",okky)写完这段代码别问我掌握了什么,问我有多喜欢python的精度表示:-)我决定只把数学写在future公式的代码会在输入量的小数学点后加很多0来定义斐波那契函数,每次调试完手都在抖O(∩\_∩)O~黄金分割法defgold(x):gg=x**2-6*x+9返回ggleft=1right=7ans=0.4a=left+0.618*(right-left)b=left+0.382*(right-left)gga=gold(a)ggb=gold(b)i=0whilei<7:print("i=%s"%i)print("left=%s,right=%s"%(left,right))print("xleft=%s,xright=%s"%(a,b))print("yleft=%s,yright=%s"%(ggb,gga))c=right-left如果c>0.4:i=i+1如果gga>ggb:right=aa=bb=left+0.382*(right-left)gga=ggbggb=gold(b)else:#gga
