1. 程式人生 > >python隱函式畫圖以及匿名函式lambda使用.md

python隱函式畫圖以及匿名函式lambda使用.md

python隱函式畫圖以及匿名函式lambda使用

一.匿名函式lambda使用

因為一會畫隱函式畫圖想用一下lambda匿名函式,所以就在這裡學習一下其用法,本質上來講lambda就是把函式換了中說法,其應用場景可以用在一些簡單函式的定義上,比如你想定義一個比較大小的函式,而該函式就一句話,所以你不想很麻煩的使用def定義,此時就可以用lambda進行定義。用法如下:

comp = lambda a,b: a>b
comp(3,2)   

這段程式碼的意思就是定義一個函式comp,只是是使用lambda定義的,一個函式要有引數和返回值,它的引數就是lambda後面的a,b而返回值就是冒號後面的a>b,這樣本來要

def comp(a,b):
    return a>b  

這樣定義的函式就變成了一句話,所以lambda函式簡單的使用就是這樣。

二.畫隱函式

在python開發中,很多時候要畫函式圖,對於顯函式比較好畫直接使用pyplot就行了,但是對於隱函式就有點麻煩,下面介紹兩種隱函式畫圖的方式。

1. 使用Sympy庫畫隱函式

使用方式如下:

%pylab inline
from sympy.parsing.sympy_parser import parse_expr
from sympy import plot_implicit
exc = lambda exper: plot_implicit(parse_expr(exper))
exc('x**2+(y-x**(2/3))**2-1')  

執行後是一個小心心:

在這裡插入圖片描述

這段程式碼意思很簡單,%pylab inline是因為使用的Jupyter編譯器,所以要加上,下面兩個from是匯入庫,exc就是定義了一個函式,輸入一個隱函式表示式,然後就能畫出對應圖形, x 2 + ( y

x 2 / 3 ) 2 2 1 = 0 x^2+(y-x^{2/3})^22-1 = 0 就是一個心形線。 不過這段程式碼執行效率很低,要執行很久才能執行出來。

2. 使用Matplotlib結合等高線畫隱函式

import matplotlib.pyplot as plt
import numpy as np
#作點
x=np.linspace(-3,3,500)
y=np.linspace(-3,3,500)

#構造網格
x,y=np.meshgrid(x,y)
z = x**2+(y-x**(2/3))**2-1
#繪製等高線,8表示等高線數量加1
plt.contour(X,Y,z,0)
plt.show()    

這個畫圓還行,畫心就只能畫一半,不過其執行很快。程式碼的含義:

x,y就是在座標域畫成網格線,然後定義一個z就相當於等高線函式,最後關鍵是contour中最後一個引數,你需要傳入0,否則其會畫出來很多線。具體含義我也不太清楚,你如果自己定義的話,只需要修改z就行了,把z等於你的隱函式就能畫出一個隱函式圖來。

參考

https://docs.sympy.org/dev/modules
Python隱函式作圖