python SciPy 优化器

news2024/10/6 4:12:01

SciPy 优化器

SciPy 的 optimize 模块提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题,比如查找函数的最小值或方程的根等。

NumPy 能够找到多项式和线性方程的根,但它无法找到非线性方程的根,如下所示:

x + cos(x)

因此我们可以使用 SciPy 的 optimze.root 函数,这个函数需要两个参数:

  • fun - 表示方程的函数。

  • x0 - 根的初始猜测。

该函数返回一个对象,其中包含有关解决方案的信息。

实际解决方案在返回对象的属性 x ,查看如下实例:

实例

查找 x + cos(x) 方程的根:

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print(myroot.x)

# 查看更多信息

#print(myroot)

执行以上代码,输出结果如下:

-0.73908513]

看更多信息:

实例

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print(myroot)

执行以上代码,输出结果如下:

    fjac: array([[-1.]])
     fun: array([0.])
 message: 'The solution converged.'
    nfev: 9
     qtf: array([-2.66786593e-13])
       r: array([-1.67361202])
  status: 1
 success: True
       x: array([-0.73908513])

最小化函数

函数表示一条曲线,曲线有高点和低点。

高点称为最大值。

低点称为最小值。

整条曲线中的最高点称为全局最大值,其余部分称为局部最大值。

整条曲线的最低点称为全局最小值,其余的称为局部最小值。

可以使用 scipy.optimize.minimize() 函数来最小化函数。

minimize() 函接受以下几个参数:

  • fun - 要优化的函数

  • x0 - 初始猜测值

  • method - 要使用的方法名称,值可以是:'CG','BFGS','Newton-CG','L-BFGS-B','TNC','COBYLA',,'SLSQP'。

  • callback - 每次优化迭代后调用的函数。

  • options - 定义其他参数的字典:

{

"disp": boolean - print detailed description

"gtol": number - the tolerance of the error

}

实例

x^2 + x + 2 使用 BFGS 的最小化函数:

from scipy.optimize import minimize

def eqn(x):
  return x**2 + x + 2

mymin = minimize(eqn, 0, method='BFGS')

print(mymin)

执行以上代码,输出结果如下:

      fun: 1.75
 hess_inv: array([[0.50000001]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 8
      nit: 2
     njev: 4
   status: 0
  success: True
        x: array([-0.50000001])

参考资料:https://www.runoob.com/scipy/scipy-optimize.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工具类库 Hutool介绍与使用(请记得收藏)

工具类库 Hutool介绍 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自于每个用户的精雕…

VMware vCenter上用OVF模板部署虚拟机

前言 在我们项目操作过程中,使用VMware vCenter系统,经常会出现使用原有部署环境来部署虚拟机,供项目组使用,此时我们克隆虚拟机就要用到OVF模板来克隆操作,这是一个非常实用的功能。 一、打开Vcenter,选定…

Redis学习笔记2_数据结构

Redis数据结构Redis数据结构二、数据结构2.1Redis核心对象2.2底层数据结构2.2.1 SDS-simple dynamic stringsds内存布局sds的操作为什么使用SDS,SDS的优势?2.2.2 listlist内存布局2.2.3 dictdict内存布局2.2.4 zskiplistzskiplist内存布局2.2.5 intsetin…

前端实现登录拼图验证

前言 不知各位朋友现在在 web 端进行登录的时候有没有注意一个变化,以前登录的时候是直接账号密码通过就可以直接登录,再后来图形验证码,数字结果运算验证,到现在的拼图验证。这一系列的转变都是为了防止机器操作,但对…

Python 第六章 函数

6.1函数的定义和调用6.1.1定义函数格式:def 函数名 ([参数列表]):["""文档字符串"""]函数体[return 语句]6.1.2函数调用格式:函数名([参数列表])python中函数可以嵌套定义例如:def add_modify(a,b):resultabpr…

Vue3响应式原理解析

前言 今年上半年开始,自己开始在新项目中使用 Vue3 进行开发,相比较于 Vue2 来说,最大的变化就是 composition Api 代替了之前的 options Api,更像是 React Hooks 函数式组件的编程方式。 Vue3相对于Vue2响应式原理也发生了变化…

vue日期组件el-date-picker中更改默认日期格式并且实时显示的方法

在项目中有一个需求是这样的,要求实时显示他的当前默认时间,并且不能修改 使用了默认:default-value"currentTime"属性之后,新增的时候会报错,前端与后端传递的数据不匹配 因为默认时间被new date() 解析之后返回的数据是默认时间形式的,格式不符 方法如下: 第一步&a…

Elasticsearch入门 - Mac上Elasticsearch和Kibana的安装运行与简单使用

文章目录一,Mac上Elasticsearch和Kibana的安装1.1 环境与下载1.2 安装与运行1.3 问题1.3.1 elasticsearch安装后其他机器不能访问1.3.2 kibana安装后其他机器不能访问二,Elasticsearch在Kibana的常见命令2.1 查看集群的健康状态2.2 索引2.2.1 查看所有索…

Scrum 敏捷开发

什么是敏捷开发 敏捷 开发是一个术语,用于描述迭代软件开发。 迭代软件开发通过在短增量完成工作(通常称为 冲刺, Sprint)来缩短 DevOps 生命周期。 冲刺通常长达一到四周。 敏捷开发通常与传统或瀑布式开发形成鲜明对比&#xff…

Vue基础9之脚手架的使用、ref属性、props配置项和mixin混入

Vue基础9使用Vue脚手架初始化脚手架说明具体步骤项目文件介绍将前面写好的单文件组件放入这里运行脚手架文件结构render的作用修改默认配置配置项ref属性props配置项简单的传值方法默认的字符串传值使用v-bind对数字类型进行传值限制数据类型接收数据时候只对数据类型进行限制接…

Java 搜索二维矩阵 II

搜索二维矩阵 II中等编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22]…

v-model表单

1、v-model的基本使用 表单提交是开发中非常常见的功能,也是和用户交互的重要手段: 比如用户在登录、注册时需要提交账号密码;比如用户在检索、创建、更新信息时,需要提交一些数据; 这些都要求我们可以在代码逻辑中获…

【GD32F427开发板试用】+软件IIC(OLED显示)

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:四季的温度 gitee开源地址https://gitee.com/sijiwendu/gd32-f427-v/tree/master/module/oled 上一次完成DHT11开发文章https://aijishu.com/a…

什么是EDA?常见的EDA工具有哪些?

大家都知道,芯片设计难度非常大,要把上千亿颗晶体管集成在面积不到指甲盖大小的芯片上。其实能实现这样目标所以靠的是电子设计自动化(Electronics Design Automation)工具,也就是我们所称的EDA工具。 什么是EDA&…

从零搭建SpringCloud服务

一.微服务基础1.什么是SpringCloud?SpringCloud官网:https://spring.io/projects/spring-cloud(个人建议是用谷歌浏览器访问官网打开中文翻译粗略把官网读一遍)个人理解:以前的服务器就好像,一个会语数外全…

Elasticsearch:从实例中学习 nested 数据类型的 CRUD 及搜索

nested 数据类型是一个比较高级的话题。在本文中,将介绍 Elasticsearch 中针对嵌套对象的一些高级 CRUD 和搜索查询。 如果你想了解有关 Elasticsearch 基础知识的更多信息,可以查看这些文章以快速入门或复习: Elasticsearch:关于…

koa-router 正解

Koa-Router 之前分析过 Koa/ Koa-Bodyparser 的源码,今天让我们来分析下koa-router的源码,这个插件其实还是挺重要的。毕竟作为路由,我们还是要知道他的工作原理 这里会重申下 其实我是分析了 koa-router 主干流程。一些小众类的方法并没有看…

多步骤复杂 SQL 优化实例

问题先看数据:deliver 表是主表,一个客户会发生多次投递行为:deliverItem 表是从表,一个投递行为有多个投递项,delivered 是投递状态(1 表示未完成,2 表示投递完成):需求…

如何了解一个软件的设计?

刚入职,接手新项目,面对一个全新项目,怎么快速研究它? 很多人直接看源码,一头扎入代码,很快就迷失其中,最初那股子探索精神,也会逐渐被迷茫所替。有多少次你满怀激情打开一个开源项…

极光推送REST API与Java后台对接

极光推送官网的web推送页面 因为是对接它的api,所以我参照这这个样式实现了一个,效果如下: 定时任务推送界面,可定制。实现了推送一次和每日定时推送,如果再扩展的话有每周、每月的功能,只是没有这个业务…