python实现黄金分割法

一.问题

在这里插入图片描述
使用黄金分割法来计算

二.代码

#黄金分割法python求解PPT上第一个例题
#因为函数要求解最大值而这个方法一般求解最小值所以把函数取负

import numpy as np
import matplotlib.pyplot as plt

rate = 0.618034

def f(x):
    #求解体积函数公式,乘1.0将结果变为浮点数
    return -1.0*x*(350-2*x)*(260-2*x)  

def tarceback(f,a0,b0,accuracy):
    a = a0
    b = b0
    x2 = a+rate*(b-a)
    x1 = b-rate*(b-a)
    f1 = f(x1)
    f2 = f(x2)
    print(x1,x2)
    arr = search(f,a,b,x1,x2,f1,f2,accuracy)
    printFunc(f,a,b,arr[0],arr[1])
    
def search(f,a,b,x1,x2,f1,f2,accuracy):
    if f1<=f2:
        if x2-a<accuracy:
            print(x1,f1)
            return (x1,f1)
        else:
            b = x2
            x2 = x1
            f2 = f1
            x1 = a+b-x2
            f1 = f(x1)
            print(x1,x2)
            return search(f,a,b,x1,x2,f1,f2,accuracy)
    else:
        if b-x1<accuracy:
            print(x2,f2)
            return (x2,f2)
        else:
            a = x1
            x1 = x2
            f1 = f2
            x2 = a+b-x1
            f2 = f(x2)
            print(x1,x2)
            return search(f,a,b,x1,x2,f1,f2,accuracy)

def printFunc(f,a,b,x,y):
    t = np.arange(a,b,0.01)
    s = f(t)
    plt.plot(t,s)
    plt.plot([x],[y],'ro')
    plt.plot([x,x],[y,0],'k--')
    plt.plot([0,x],[y,y],'k--')
#     plt.annotate(r'$(x,y)$',xy=(x,y))
    plt.show()

tarceback(f,0,130,0.05)

三.结果

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Python黄金分割法可以用于求解函数的极值点。黄金分割法的示例代码如下: ```python # 多项式函数 def f(x): return -x*(350-2*x)*(260 -2*x) # 黄金分割法求极值 def G(a,b,e): a1 = b-0.618*(b-a) a2 = a + 0.618*(b-a) f1,f2 = f(a1),f(a2) while abs(b-a)>e: if f1<f2: b,a2,f2= a2,a1,f1 a1 = b-0.618*(b-a) f1 = f(a1) else: a,a1,f1=a1,a2,f2 a2 = a + 0.618*(b-a) f2 = f(a2) a = (a+b)/2 print("黄金切割法下的极值点为a* = {:.4f}".format(a)) return a if __name__ == '__main__': print("**************输入参数**************") a,b = map(float,input("请输入区间:").split(' ')) e = eval(input("请输入精度:")) print("极值f(a*) = {:.4f}".format(f(G(a,b,e)))) print("************************************") ``` 这段代码使用了黄金分割法来求解多项式函数的极值点。首先定义了函数f(x),然后定义了黄金分割法实现函数G(a,b,e)。函数G的参数a和b是极值点所在的区间的边界,而e是计算精度。在函数G中,通过迭代计算来逼近极值点。最终得到的极值点通过打印输出给出。 黄金分割法是一种搜索极点的优化算法,它通过不断缩小搜索范围来逼近极点。每次迭代,黄金分割法会根据当前的搜索范围计算出两个内部点,然后根据函数值的大小关系来更新搜索范围。通过反复迭代,黄金分割法可以逐渐逼近极点。 在使用黄金分割法时,需要指定搜索范围的初始边界和计算精度。初始边界确定了搜索范围,而计算精度决定了迭代的停止条件。黄金分割法的迭代过程中,会根据函数值的大小关系不断更新搜索范围,直到满足停止条件为止。 黄金分割法是一种简单且有效的优化算法,适用于求解一维函数的极值点。它具有较好的搜索效率和收敛性,常被应用于各种优化问题的求解中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [黄金分割法(Python)](https://blog.csdn.net/weixin_46327567/article/details/114891272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [最优化方法Python计算:一元函数搜索算法——黄金分割法](https://blog.csdn.net/u012958850/article/details/130358684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比奇堡咻飞兜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值