IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python数学建模--sympy三维图像绘制 -> 正文阅读

[Python知识库]python数学建模--sympy三维图像绘制

问题引出

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

库选择与绘制准备

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]之间,这就为我们的算法求解提供了一个方向

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:24:53  更:2022-11-05 00:25:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 6:57:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码