python数学建模--sympy三维图像绘制

news2024/11/29 22:50:16

目录

  • 问题引出
  • 库选择与绘制准备
  • plot3d类api简介
    • 图像绘制与参数说明
    • 关键字参数
    • 绘图举例
  • 绘图的案例
    • 三角函数
    • 另一个三角函数

问题引出

在求解二元函数最值的时候,我们不知道自己经过若干个步骤求出的结果是否正确,那么我们该怎么办呢?一种办法就是将这个函数的图像绘制出来
三维图像的作用在于,它不仅能让我们直观的看出待求二元函数在指定区间内的形状,而且对于我们求得的最值以及求极值的步骤有着重要的指导意义

库选择与绘制准备

matplotlib是一个比较基础的专业绘图库,它也可以用来绘制三维图像,但是需要额外导入mpl_toolkits库,在前段时间学习sympy库时注意到了它里面的plotting子模块,里面封装了若干个绘图类,其中的一个plot3d类可以实现三维绘图,而且调用十分方便

注意,sympy中的绘图类仍然使用matplotlib库提供的后端支持,也就是说使用sympy绘图类需要首先安装matplotlib

plot3d类api简介

plot3d(*args, show=True, **kwargs)

图像绘制与参数说明

同一坐标系内绘制单个图像

plot3d(expr, range_x, range_y, **kwargs)
参数描述
expr函数表达式
range_x,range_y变量x,y的取值区间(默认区间为[-10,10])

在同一坐标系内绘制双图像(两个二元函数)

plot3d(expr1,expr2, range_x, range_y, **kwargs)

同一坐标系内绘制多个图像(多个二元函数)

plot3d((expr1, range_x, range_y),(expr2, range_x, range_y,) ,...,**kwargs)

关键字参数

参数名数据类型描述
nb_of_points_xint在该参数处对x取值范围均匀采样
nb_of_points_yint在该参数处对y取值范围均匀采样
surface_colorFunction which returns a float绘出图像的颜色
titlestr图像标题
size(float, float)图像尺寸

绘图举例

下面例子来自sympy官网

# 单图像
from sympy import symbols
from sympy.plotting import plot3d
x, y = symbols('x y')
plot3d(x*y, (x, -5, 5), (y, -5, 5))

运行结果
在这里插入图片描述

# 双图像
plot3d(x*y, -x*y, (x, -5, 5), (y, -5, 5))

运行结果
在这里插入图片描述

# 多图像
plot3d((x**2 + y**2, (x, -5, 5), (y, -5, 5)),
    (x*y, (x, -3, 3), (y, -3, 3)))

运行结果
在这里插入图片描述

绘图的案例

读完了plot3d的api,我们尝试解决一些实际问题

三角函数

绘制 y = s i n x 2 + y 2 , x ∈ [ − 5 , 5 ] , y ∈ [ − 5 , 5 ] 的图像,并找出其最小值对应的坐标 绘制y=sin\sqrt{x^2+y^2},x\in [-5,5],y\in [-5,5]的图像,并找出其最小值对应的坐标 绘制y=sinx2+y2 ,x[5,5],y[5,5]的图像,并找出其最小值对应的坐标

代码实现

from sympy import symbols
from sympy.plotting import plot3d
from sympy import *
x, y = symbols('x y')
plot3d(sin(sqrt(x**2+y**2)),(x, -5, 5), (y, -5, 5))

运行结果
在这里插入图片描述

注意看图像窗口的右上角,它代表三维图像上的点,会随着鼠标的指向而发生变化,虽然sympy绘图类不会返回给我们精确地函数最值,但是我们可以通过观察图像、拖动图像来找到函数最值得大概位置,这就是绘制出图像的意义所在

另一个三角函数

实际上,这篇博客的灵感来源于笔者最近在学习的模拟退火算法,该算法的其中一个应用方向是求带约束的二元函数极值,由于参数设置等的不同,导致对于同一个二元函数运行同样的程序,每次得到的函数极值各不相同,但是笔者也不知道哪次得到的极值是正确的,然后看到了这篇博客

用模拟退火算法求解带约束的二元函数极值问题之二:用MATLAB绘图验证

实际上很多时候,可视化能够解决很多想象不到的问题,于是笔者也想要尝试一下使用python进行可视化,这个例子中仍然使用原博客中的二元函数

f ( x , y ) = 6 x 2 + x 2 + y 2 + 5 s i n ( x ) + 3 c o s ( y ) + 50 x ∈ [ − 5 , 5 ] , y ∈ [ − 5 , 5 ] f(x,y)=\frac{6x}{2+x^2+y^2}+5sin(x)+3cos(y)+50\\x\in[-5,5],y\in[-5,5] f(x,y)=2+x2+y26x+5sin(x)+3cos(y)+50x[5,5]y[5,5]

代码实现

from sympy import symbols
from sympy.plotting import plot3d
from sympy import *
x, y = symbols('x y')
expr=6*x/(2+x**2+y**2)+5*sin(x)+3*cos(y)+50
plot3d(expr,(x, -5, 5), (y, -5, 5))

运行结果
在这里插入图片描述

从上面的图中我们可以看出该二元函数的函数值范围大约在[42.5,60]之间,这就为我们的算法求解提供了一个方向

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

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

相关文章

学完Python,不做程序员,只接兼职,哎,就是玩儿

现在这个时代,人人开始追求做斜杠青年,多方面开展副业,赚取几份工资。有很多朋友就抓住了Python的风口,靠着Python兼职月入一万。那么学完Python,有哪些可以做的兼职呢? 一、闲暇时间,接自由单…

2020年数维杯数学建模B题以家庭为单位的小规模多品种绿色农畜产品经营模式开发求解全过程文档及程序

2020年数维杯数学建模 B题 以家庭为单位的小规模多品种绿色农畜产品经营模式开发 原题再现: 在全球化疫情蔓延和国民生活水平稳步提高大形势下,居民对于绿色农畜产品的需求可能会迎来新的爆发期。传统大规模种植或养殖模式因其较大的风险、产品质量的非…

第四章 带头双向链表的讲解与实现

初阶数据结构 第一章 时间复杂度和空间复杂度 第二章 动态顺序表的实现 第三章 单向链表的讲解与实现 第四章 带头双向链表的讲解与实现 文章目录初阶数据结构前言一、什么是头节点(哨兵位)二、双向链表结点的定义三、接口函数的实现1、初始化2、尾插3、…

【附源码】计算机毕业设计java中国朝鲜族民族特色服务系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

超全,看完这份微服务架构与实践文档,微服务不再难

前言: 微服务近年来受到了极大的关注并成为趋势,不信的话可以查看 Google Trends。 可以看到从2014年开始人们对它产生了极大的兴趣,随着时间的推移,这一趋势仍在增长。 随着数字化转型的推进,越来越多的企业开始尝…

IntelliJ IDEA禁止某些文件夹indexing

IntelliJ IDEA禁止某些文件夹indexing 文章目录IntelliJ IDEA禁止某些文件夹indexing问题描述方法一:标记文件夹为Exclude方法二:.iml文件中手动加入excludeFolder节点方法三:直接加入IDEA忽略文件和文件夹列表问题描述 IDEA启动后&#xff…

计算机毕业设计(附源码)python在线答题系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

MySQL数据库——日志管理、备份与恢复

一、数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 二、数据…

【Tomcat】解决Tomcat服务器乱码问题

俩地方开展出现乱码的原因1、以startup.bat文件打开的服务器出现乱码2、在IDEA中运行Tomcat服务器出现乱码问题3、有关社区版IDEA如何开发JavaWeb项目出现乱码的原因 使用了错误的字符编码去解码字节流,所以出现乱码咱思维要清晰,就去找字符编码是否与其…

vue3.0微信活动推广分享项目-实现验证码登录功能

⭐️⭐️⭐️ 作者:船长在船上 🚩🚩🚩 主页:来访地址船长在船上的博客 🔨🔨🔨 简介:CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发…

二、稀疏数组和队列

稀疏数组 1、基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以用稀疏数组来保存该数组。 2、处理方式 记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模数组中,从而缩小…

【OpenCV】红绿灯检测C++Demo实现

很久以来一直想实现红绿灯检测,今天它来了。 文章目录原理代码实现打包程序为exe原理 OpenCV好强,能够提取红绿灯的轮廓,并根据颜色空间判断红绿,不依赖深度学习算法也能做到可用的效果/demo。 红绿灯检测的基本步骤如下&#x…

20221103使用ffmpeg提取mp4视频的字幕

20221103使用ffmpeg提取mp4视频的字幕 2022/11/3 12:19 百度搜索: MP4 内置字幕 提取 https://www.6yxk.com/ruanjianjiaocheng/224526.html 提取mp4格式视频字幕的方法(工具) ffmpeg -i D:\temp\001.mp4 -map 0:s:0 sub1.srt 百度搜索: ffmp…

web前端面试题附答案044 - vue获取param参数,有什么缺点吗?

看这个vue的图标像不像小时候看的《魔神坛斗士》身上的某个元素。真希望成年人的世界就像小时候一样简单快乐。 今天这道面试题主要围绕vue中获取param参数展开,看完本文你可以吸取到以下知识点 ◇ 首先是最基本的2中获取方式 ◇ 如果不用vue应该怎么获取&#xff…

Linux查看性能相关命令

#Linux查看性能相关命令 ##CPU性能 ###/cat/proc/cpuinfo 这个文件能够获取到物理cpu的数量,每个物理cpu的核心数,是否开启超线程等信息 物理cpu: 表示主板上实际存在的cpu数量 cpu核数: 单个cpu上可以处理数据的芯片组数量,如双核,四核等 逻辑cpu数量: 一般来说,…

数据链路层 随机接入-CSMA/CA协议

媒体接入控制-动态接入控制-随机接入 CSMA/CA协议 载波监听多址接入/碰撞避免CSMA/CA 既然CSMA/CA协议已经成功的应用于使用广播信道的有限局域网,那么同样使用广播信道的无线局域网能不能也使用CSMA/CD协议呢? 在无线局域网中,仍然可以使…

httpClient同步、异步性能对比

0、测试目的 同步阻塞模式下,如果服务端接口响应较慢,那会直接影响客户端接口请求的吞吐量,虽然可以通过在应用代码中通过异步线程的方式优化,但是会增加客户端的线程开销。所以考虑用异步模式来解决这个问题 因此测试时&#x…

【网络篇】如何给虚拟机添加网卡,设置固定ip

引言 基于Centos7,准备两台虚拟机作为rac服务器。 以Oracle rac集群的配置说明。 网络分配 根据子网地址,我们给虚拟机分配如下ip: 名称公网私网网关rac1192.168.189.10192.168.83.10192.168.189.2rac2192.168.189.11192.168.83.11192.168.189.2 说明…

从零到一手写迷你版Vue

Vue响应式设计思路 Vue响应式主要包含: 数据响应式监听数据变化,并在视图中更新Vue2使用Object.defineProperty实现数据劫持Vu3使用Proxy实现数据劫持模板引擎提供描述视图的模板语法插值表达式{{}}指令 v-bind, v-on, v-model, v-for,v-if渲染将模板转…

高性能服务器之Reactor设计

今天来针对上一节课讲的多路转接知识再进一步进行设计,Reactor是基于epoll的ET模式设计的,在现在的高校和企业中是广泛应用的,今天我们来实现一个简洁版,完整版博主可没那个实力~ 目录 基本原理 代码实现 epoll_server.cc A…