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'))
可以看到確實是我們熟悉的圖像?,F在考慮比較復雜的式子,比如我們需要
$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隐函数作图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初识三层结构
- 下一篇: Python爬虫-京东商品到货自动邮件通