日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/8 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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隐函数作图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。