失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python 隐函数绘制_Python隐函数作图

python 隐函数绘制_Python隐函数作图

时间:2022-10-03 22:04:13

相关推荐

python 隐函数绘制_Python隐函数作图

在使用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的等高线可以”曲线救国”。

/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隐函数作图》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。