在使用Python作图的过程中,碰到了几次需要隐函数作图的问题,目前我暂时只知道两种方法,一种是使用sympy库,另一种是使用matplotlib中等高线的方法,这里分别总结下。

Sympy库隐函数作图

Sympy库隐函数作图主要使用了plot_implicit函数以及parse_expr函数,首先来简单看下该plot_implicit函数的参数说明。

1

2

3

4

5

6

7

8

9

10

11def plot_implicit(expr, x_var=None, y_var=None, **kwargs):

"""A plot function to plot implicit equations / inequalities.

Arguments

=========

- ``expr`` : The equation / inequality that is to be plotted.

- ``x_var`` (optional) : symbol to plot on x-axis or tuple giving symbol

and range as ``(symbol, xmin, xmax)``

- ``y_var`` (optional) : symbol to plot on y-axis or tuple giving symbol

and range as ``(symbol, ymin, ymax)``

主要参数是expr,x_var,y_var是对坐标轴设置一些属性,一般可以不使用,一些其他的功能可以参考官网

parse_expr函数可以把一个式子解析为可以传入plot_implicit的参数,可以用来表达各种式子,具体的部分看后面的例子。

首先来看下plot_implicit的例子

1

2

3

4from sympy import *

from sympy.parsing.sympy_parser import parse_expr

plot_implicit(parse_expr('x**2+y**2-5'))

plot_implicit(parse_expr('x**2-y**2+5'))

可以看到确实是我们熟悉的图像。现在考虑比较复杂的式子,比如我们需要

$x^3+sin(y^2)+1=0$

1plot_implicit(parse_expr('x**3+sin(y**2)+1'))

Sympy库作隐函数图像还是比较方便的,但是有一个比较大的问题,我暂时没找把两个图像作在一张图中的方法,比如我们要画

$x+y=0,x^2+y^2=5$的图像,好像没办法做到,这就比较头疼了,好在我最后发现matplotlib的等高线可以”曲线救国”。

2020/4/21更新:感谢网友在评论区的提醒,现在找到可以将两个图像作在一张图的方法——增加Or函数即可:

1

2

3

4

5

6

7

8

9

10

11

12from sympy import log, Eq, symbols,Or

from sympy.plotting import plot_implicit

l, g = symbols('l g')

r = 1.1

b = 2

b0 = 1

plot_implicit(Or(

Eq(log(10 * r - r * l * b / (r + 1) - log(g) * b * r / (b0 * (r + 1)))

+ l * b / (r + 1) -r * b * log(g) / (b0 * (r + 1)) - log(10 * r),0),

Eq(log(9 * r - r * l * b / (r + 1) - log(g) * b * r / (b0 * (r + 1)))

+ l * b / (r + 1) -r * b * log(g) / (b0 * (r + 1)) - log(9 * r),0)

), (l, 0, 10), (g, 0, 30))

Matplotlib利用等高线给隐函数作图

首先来看等高线怎么作图

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20import matplotlib.pyplot as plt

import numpy as np

#构造等高线函数

def f(x,y):

return x**2+y**2-5

#定义点的数量

n=500

#作点

x=np.linspace(-3,3,500)

y=np.linspace(-3,3,500)

#构造网格

X,Y=np.meshgrid(x,y)

#绘制等高线,8表示等高线数量加1

plt.contour(X,Y,f(X,Y),8)

plt.show()

可以看到这一个圈表示的就是等高线,看到这个的时候,我想到如果把这个参数8设为0,

不就只表示一条曲线了,于是尝试了一下,果然如此。

1

2plt.contour(X,Y,f(X,Y),0)

plt.show()

所以可以利用这点来对等高线作图,此外,我们可以把这个图像和普通的图像坐在一张图里,

这点就比Sympy更方便了。

1

2

3plt.contour(X,Y,f(X,Y),0)

plt.plot(x,y)

plt.show()

总结

结合之前的讨论,以后对隐函数作图使用matplotlib更方便,流程如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18#构造等高线函数

def f(x,y):

#定义点的数量

n=500

#作点

x=np.linspace(-3,3,500)

y=np.linspace(-3,3,500)

#构造网格

X,Y=np.meshgrid(x,y)

#绘制图像

plt.contour(X,Y,f(X,Y),0)

#作其他图像

plt.plot(x,y)

plt.show()

python 隐函数绘制_Python隐函数作图相关推荐

  1. 用python海龟画图_Python 海龟作图的问题

    最近在帮别人看一个 Python 海龟作图的问题. 遇到的第一个问题是: 代码跑起来之后,出现的窗口会死掉 经过研究发现产生问题的原因是缺少 turtle.mainloop() 语句(莫名其妙的是教材 ...

  2. python柱形图绘制_Python数据分析:柱形图的绘制方法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 没有安装PyEcharts的,先安装PyEcharts: data = p ...

  3. python风轮绘制_python 的绘制图形库 turtle

    pyhton特点 turtle是python的标注库之一 Python计算生态 = 标准库 + 第三方库 标准库:随解释器直接安装到操作系统中的功能模块 -第三方库:需要经过安装才能使用的功能模块 - ...

  4. python人像绘制_python 绘制三国人物关系图

    author:weizhendong data:2019.12.19 func:绘制三国演义人物关系图 """ import codecs import jieba.po ...

  5. python人像绘制_python实现人像动漫化的示例代码

    利用百度api实现人像动漫化 百度API地址:https://ai.baidu.com/tech/imageprocess/selfie_anime 技术文档:https://ai.baidu.com ...

  6. python人像绘制_Python绘制可爱的卡通人物 | 【turtle使用】

    Turtle库 简介 什么是Turtle 首先,turtle库是一个点线面的简单图像库,能够完成一些比较简单的几何图像可视化.它就像一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始 ...

  7. matlab绘制三维隐函数图像

    matlab中三维隐函数绘制函数:fimplicit3 520这个日子,我们就用matlab的三元隐函数绘图来绘制一个小爱心: 已知条件: 源代码: %绘制三元隐函数 f=@(x,y,z) (x.^2 ...

  8. matlab 绘制三维空间隐函数自由曲面

    1.简介 本博客介绍了一个常用于三维隐函数绘制的函数,利用自由曲面-球面为事例,介绍该函数的用法. 本功能实现主要的两个函数 isofurface patch 其实主要是第一个函数有用 2.isosu ...

  9. 【转】隐函数绘制并提取数据

    隐函数绘制并提取数据 转贴来自: http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=212297&fromuid=60645 ...

最新文章

  1. 考察新人的两道c语言题目
  2. 轻用其芒,动即有伤,是为凶器;深藏若拙,临机取决,是为利器!
  3. 【笔记】公钥密码学之基于离散对数的密码体制
  4. Reapter 中客户端控件和服务器端控件的选择
  5. matplotlib 可视化细节,丰富的可选参数
  6. omni rpc python生成地址_python编辑图形界面单一功能MAC随机地址生成
  7. 微机8088主板图绘制
  8. 5分钟了解什么是自然语言处理技术
  9. STM32CubeMX | | 使用小熊派玩转颜色识别传感器(纯手工打造E53传感器模块)
  10. 彼岸花开开彼岸 奈何桥前可奈何 作者:天涯游子
  11. 武汉大学计算机学院期末考试时间,【通知公告】关于2018-2019学年第二学期期末考试工作安排的通知...
  12. 文章标题 execution(* cn.sxt.dao.impl.*.*(..))解释
  13. 开源代码学习之persepolis【一】
  14. 肖仰华谈知识图谱:知识将比数据更重要,得知识者得天下
  15. 【数据分析师自学系列-MySQL】创建新表create table、create table as、create table like的区别
  16. 关于实名认证上线时无法立即返回实名认证结果的问题
  17. 免费生成微信小程序的经验
  18. 力扣765——情侣牵手(贪心+BFS)
  19. ImageMagick将多张图片拼接成一张图片_怎么免费把图片转成PDF?教你4种实用方法...
  20. Revit二次开发,新手接入IExternalCommand、IExternalApplication,如何使用它们!

热门文章

  1. 百度系统服务器地址,百度公共DNS地址是多少?百度DNS设置方法(windows、lunix、mac)...
  2. 计算机应用会考试题,余杭区2006年职高计算机应用基础会考试题
  3. webview和android做壳,Android Studio 制作一个 WebView 外壳
  4. echarts 绘制省份地图 [ 把不同省份的市合并在一起 ]
  5. 解决办法:Call stored procedure using ExecuteSqlCommand (expects parameters which was not supplied)
  6. SPFA+寻路(行路难,洛谷2832)
  7. 使用pnpm+vue-cli,出现报错:Error: command failed: pnpm install --reporter silent --shamefully-hoist
  8. 2022秋科学道德与学风雨课堂期末考试B卷
  9. vba中excel和word复制粘贴
  10. 开发租车的APP过程中需要解决哪些问题?