用Python如何找到函数的最小值

一、穷举法求解最小值

穷举法是一种最朴素的找到函数最小值的方法。其基本思想是:先取一个范围内的值,然后把函数在该范围内的值都计算出来,最后找到计算结果最小的值。这个范围和步长的选择会影响结果的准确性和计算速度。

下面是一个使用穷举法求解函数最小值的示例代码:

def func(x):
    return (x-1)**2 + 3

def search_min(func, start, end, step):
    min_x = start
    min_y = func(start)
    x = start
    while x <= end:
        y = func(x)
        if y < min_y:
            min_y = y
            min_x = x
        x += step
    return min_x, min_y

min_x, min_y = search_min(func, -10, 10, 0.01)
print("最小值的 x 值为:{}".format(min_x))
print("最小值为:{}".format(min_y))

代码中定义了一个函数 func(x),表示需要求解最小值的函数。然后使用参数 start, end 和 step 来控制计算范围和步长,函数 search_min() 就可以求得这个函数的最小值了。最后运行代码,可以得到最小值的 x 值和最小值。

二、梯度下降法求解最小值

梯度下降法是求解最小值比较常见的一种方法,它是一种迭代优化算法,通过不断地迭代,将函数的参数调整到最小值处,并返回最小值。梯度下降法的核心思想是,对于一个函数的任意一点,计算出该点的梯度(导数),将这个梯度与一个学习率(learning rate)相乘得到一个步长,然后沿着步长的方向移动一小步,就可以得到一个新的函数值。迭代多次后,就可以不断靠近最小值。

下面是一个使用梯度下降法求解最小值的示例代码:

import numpy as np

def func(x):
    return (x-1)**2 + 3

def grad_func(x):
    return 2 * (x-1)

def gradient_descent(func, grad_func, start, learning_rate=0.1, max_iters=1000, eps=1e-6):
    for i in range(max_iters):
        grad = grad_func(start)
        if np.abs(grad) < eps:
            break
        start -= learning_rate * grad
    return start, func(start)

min_x, min_y = gradient_descent(func, grad_func, 10)
print("最小值的 x 值为:{}".format(min_x))
print("最小值为:{}".format(min_y))

代码中定义了函数 func(x) 和 grad_func(x),分别表示需要求解最小值的函数和该函数的导数。然后使用参数 start, learning_rate, max_iters 和 eps 来控制初始值、学习率、最大迭代次数和精度,函数 gradient_descent() 就可以迭代求得这个函数的最小值了。最后运行代码,可以得到最小值的 x 值和最小值。

三、Scipy优化库求解最小值

Scipy 是 Python 的一个科学计算库,其中包含了一些常用的数学优化算法,可以用来求解函数的最小值。其中最常用的函数是 minimize(),它可以通过设置不同的方法来选择不同的优化算法,比如 BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法、CG(共轭梯度)算法、L-BFGS-B(限制L-BFGS)算法等等。

下面是一个使用 Scipy 库求解最小值的示例代码,使用了 BFGS 算法:

import scipy.optimize as opt

def func(x):
    return (x-1)**2 + 3

res = opt.minimize(func, 0, method='BFGS')
print("最小值的 x 值为:{}".format(res.x[0]))
print("最小值为:{}".format(res.fun))

代码中的 func(x) 函数同上文一致,函数 minimize() 是 Scipy 库中的函数,用于求解函数最小值。传入 func 和初始值 0,然后指定使用 BFGS 算法来进行优化。运行代码,可以得到最小值的 x 值和最小值。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/152181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-12 00:55
下一篇 2024-11-12 00:55

相关推荐

  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论