Python黄金分割法求解--非线性规划问题极小值

本文详细介绍了如何使用Python编程实现黄金分割法,这是一种经典的数值优化方法,用于寻找非线性规划问题的极小值点。通过实例展示了算法的步骤和代码实现,帮助读者理解并应用该方法解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

import math
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist

def f(x):
    # 自定义函数
    # 因为有形参x,故不用sympy声明符号变量
    return 5*pow(x, 2) + 3*x + 4

def goldOpt(a, b, theta):
    # 黄金分割法求单峰函数极小值
    alpha = (math.sqrt(5) - 1) / 2
    t1 = a + (1 - alpha)*(b - a)
    t2 = a + alpha*(b - a)
    
    step_num = 0
    
    while abs(b-a) > theta:
    
        step_num += 1
        f1 = f(t1)
        f2 = f(t2)
        if f1 < f2:
            b = t2
            t2 = t1
            f2 = f1
            t1 = a + (1 - alpha)*(b - a)
        else:
            a = t1
            t1 = t2
            f1 = f2
            t2 = a + alpha * (b - a)
        x_opt = (a + b) / 2
        y_opt = f(x_opt)
        print((x_opt, y_opt))
    return (x_opt, y_opt, step_num)

x_opt, y_opt, step_num = goldOpt(a=-2, b=2, theta=0.03)

X = np.lin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值