python-黄金分割法
2021/10/29 22:13:11
本文主要是介绍python-黄金分割法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
新手,求大佬指正
我的问题:
fx=str_fx.replace(“x”,"%(x)f") # 所有的"x"换为"%(x)function"
return eval(fx % {“x”: x}) # 字典类型的格式化字符串,将所有的"x"替换为变量x
怎么理解这段代码????
python-黄金分割法
- 我的问题:
- 程序
- 1.
- 2.
- 3.
- 4.
- 总结
程序
1.
from math import * import matplotlib.pyplot as plt from pylab import * # 通用函数f(x)靠用户录入 def function(x): fx=str_fx.replace("x","%(x)f") # 所有的"x"换为"%(x)function" return eval(fx % {"x": x}) # 字典类型的格式化字符串,将所有的"x"替换为变量x
2.
# 绘图函数:给定闭区间(绘图间隔),绘图间隔默认为0.05,若区间较小,请自行修改 def drawf(a,b,interp=0.05): x = [a+ele*interp for ele in range(0, int((b-a)/interp))] y = [function(ele) for ele in x] # y = [function(x)] plt.figure(1) plt.plot(x, y) xlim(a, b) title(init_str, color="b") plt.show()
3.
# 黄金分割法进行一维搜索的函数 def gold_div_search(a,b,esp): data=list() x1=a+t*(b-a) x2=b-t*(b-a) data.append([a,x1,x2,b]) while((b-a)>esp): if function(x1)>function(x2): #如果f(x1)>function(x2),则在区间(x1,b)内搜索 a=x1 x1=x2 x2=b-t*(b-a) plt.plot(x2,function(x2),'r*') elif function(x1)<function(x2): #如果f(x1)<function(x2),则在区间(a,x2)内搜索 b,x2=x2,x1 x1=a+t*(b-a) plt.plot(x1,function(x1),'r*') else: #如果f(x1)=function(x2),则在区间(x1,x2)内搜索 a=x1 b=x2 x1=a+t*(b-a) x2=b-t*(b-a) plt.plot(x1,function(x1),'r*',x2,function(x2),'r*') data.append([a,x1,x2,b]) with open("一维搜索(黄金分割法).txt",mode="w",encoding="utf-8")as a_file: # 保存的txt文件在程序的同目录下 for i in range(0,len(data)): a_file.write("%d:\t"%(i+1)) for j in range(0,4): a_file.write("function(%.3f)=%.3f\t"%(data[i][j],function(data[i][j]))) a_file.write("\n") print("写入文件成功!") return [a,b]
4.
t = 1-(sqrt(5)-1)/2 # 1-rou为黄金分割比 init_str = input("请输入一个函数,默认变量为x:\n") # 输入的最初字符串 para=input("请依次输入一维搜索的区间a,b和最终区间的精确值(用空格分隔)").split() # 导入区间 '''split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串''' para=[float(ele) for ele in para] a,b,esp=para str_fx=init_str.replace("^", "**") # 将所有的“^"替换为python的幂形式"**" gold_div_search(a,b,esp) # 调用黄金分割法并保存文件 drawf(a,b,(b-a)/2000) # 绘制函数图形
该处使用的url网络请求的数据。
总结
提示:
请输入一个函数,默认变量为x:
x**2-sin(x)
请依次输入一维搜索的区间a,b和最终区间的精确值(用空格分隔)0 1 0.0001(最后也有个空格)
写入文件成功!
结果:
1: function(0.000)=0.000 function(0.382)=-0.227 function(0.618)=-0.197 function(1.000)=0.159 2: function(0.000)=0.000 function(0.236)=-0.178 function(0.382)=-0.227 function(0.618)=-0.197 3: function(0.236)=-0.178 function(0.382)=-0.227 function(0.472)=-0.232 function(0.618)=-0.197 4: function(0.382)=-0.227 function(0.472)=-0.232 function(0.528)=-0.225 function(0.618)=-0.197 5: function(0.382)=-0.227 function(0.438)=-0.232 function(0.472)=-0.232 function(0.528)=-0.225 6: function(0.382)=-0.227 function(0.416)=-0.231 function(0.438)=-0.232 function(0.472)=-0.232 7: function(0.416)=-0.231 function(0.438)=-0.232 function(0.451)=-0.232 function(0.472)=-0.232 8: function(0.438)=-0.232 function(0.451)=-0.232 function(0.459)=-0.232 function(0.472)=-0.232 9: function(0.438)=-0.232 function(0.446)=-0.232 function(0.451)=-0.232 function(0.459)=-0.232 10: function(0.446)=-0.232 function(0.451)=-0.232 function(0.454)=-0.232 function(0.459)=-0.232 11: function(0.446)=-0.232 function(0.449)=-0.232 function(0.451)=-0.232 function(0.454)=-0.232 12: function(0.449)=-0.232 function(0.451)=-0.232 function(0.452)=-0.232 function(0.454)=-0.232 13: function(0.449)=-0.232 function(0.450)=-0.232 function(0.451)=-0.232 function(0.452)=-0.232 14: function(0.449)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.451)=-0.232 15: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.451)=-0.232 16: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 17: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 18: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 19: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 20: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 21: function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232 function(0.450)=-0.232
https://blog.csdn.net/weixin_44044411/article/details/88091024
这篇关于python-黄金分割法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门