Python+NumPy繪制常見曲線的方法詳解
在NumPy中,所有的標(biāo)準(zhǔn)三角函數(shù)如sin、cos、tan等均有對應(yīng)的通用函數(shù)。
一、利薩茹曲線
(Lissajous curve)利薩茹曲線是一種很有趣的使用三角函數(shù)的方式(示波器上顯示出利薩茹曲線)。利薩茹曲線由以下參數(shù)方程定義:
x = A sin(at + n/2)
y = B sin(bt)
利薩茹曲線的參數(shù)包括 A 、 B 、 a 和 b 。為簡單起見,我們令 A 和 B 均為1,設(shè)置的參數(shù)為 a=9 , b=8
import numpy as np import matplotlib.pyplot as plt A=B=1 a=9 b=8 t = np.linspace(-np.pi, np.pi, 201) #使用linspace函數(shù)初始化變量t x = np.sin(a * t + np.pi/2) # sin 函數(shù)和NumPy常量 pi 計(jì)算變量 x y = np.sin(b * t) # sin函數(shù)計(jì)算變量y plt.plot(x, y) plt.show()
運(yùn)行結(jié)果:

二、計(jì)算斐波那契數(shù)列
斐波那契數(shù)列的遞推關(guān)系可以用矩陣來表示。斐波那契數(shù)列的計(jì)算等價(jià)于矩陣的連乘??捎脙煞N方法計(jì)算了斐波那契數(shù)列
1)黃金比例計(jì)算方法,使用 rint 函數(shù)對浮點(diǎn)數(shù)取整但不改變浮點(diǎn)數(shù)類型
1,1,2,3,5,8,13,21,34,55,89,……
# 斐波那契數(shù),用黃金分割公式或通常所說的比奈公式,加上取整函數(shù)
n = np.arange(1, 9)
sqrt5 = np.sqrt(5)
phi = (1 + sqrt5)/2 #利用根號5計(jì)算黃金比例,或者直接用phi=1+0.618
print("比例:",phi)
print('\n')
fibonacci = np.rint((phi**n - (-1/phi)**n)/sqrt5) #用rint()函數(shù)對浮點(diǎn)數(shù)取整但不改變浮點(diǎn)數(shù)類型
print("Fibonacci", fibonacci)2)利用矩陣進(jìn)行計(jì)算:用 matrix 函數(shù)創(chuàng)建矩陣
# 斐波那契數(shù),用矩陣來表示斐波那契數(shù)列的遞推關(guān)系
F = np.matrix([[1, 1], [1, 0]])
print ("8th Fibonacci:", (F ** 10)[0, 0])運(yùn)行結(jié)果:
比例: 1.618033988749895
Fibonacci [ 1. 1. 2. 3. 5. 8. 13. 21.]
8th Fibonacci: 89
三、方波
方波可以近似表示為多個(gè)正弦波的疊加。任意一個(gè)方波信號都可以用無窮傅里葉級數(shù)來表示。
需要累加很多項(xiàng)級數(shù),且級數(shù)越多結(jié)果越精確,這里取 k=99(可以分別設(shè)置為9,50,1000等進(jìn)行測試觀察生成效果) 以保證足夠的精度。繪制方波的步驟如下。
1) 初始化 t 和 k 開始,并將函數(shù)值初始化為
m = np.linspace(-np.pi, np.pi, 201) #從 -pi 到 pi 上均勻分布的 201 個(gè)點(diǎn) k = np.arange(1,99) # k=99 以保證足夠的精度,如圖中的9 20 99顯示的波形 k = 2 * k - 1 f = np.zeros_like(m)
2)使用 sin()求正弦函數(shù),用sum()數(shù)計(jì)算各項(xiàng)級數(shù):
for i in range(len(m)): #使用 sin 和 sum 函數(shù)進(jìn)行計(jì)算
f[i] = np.sum(np.sin(k * m[i])/k)
f = (4 / np.pi) * f3)繪制波形
plt.plot(t, f) plt.show()

四、鋸齒波和三角波
鋸齒波和三角波也是常見的波形。和方波類似,也可以將它們表示成無窮傅里葉級數(shù)。對鋸齒波取絕對值即可得到三角波。鋸齒波的無窮級數(shù)表達(dá)式如下:
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(-np.pi, np.pi, 201)
k = np.arange(1, 99)
f = np.zeros_like(t)
for i in range(len(t)):
f[i] = np.sum(np.sin(2 * np.pi * k * t[i])/k)
f = (-2 / np.pi) * f
plt.plot(t, f, lw=1.0)
plt.plot(t, np.abs(f), lw=2.0)
plt.show()運(yùn)行結(jié)果:

以上就是Python+NumPy繪制常見曲線的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python NumPy繪制曲線的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Python plt.savefig 保存圖片時(shí)一片空白的問題
今天小編就為大家分享一篇解決Python plt.savefig 保存圖片時(shí)一片空白的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python3在各種服務(wù)器環(huán)境中安裝配置過程
這篇文章主要介紹了python3在各種服務(wù)器環(huán)境中安裝配置過程,源碼包編譯安裝步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
Django基礎(chǔ)知識與基本應(yīng)用入門教程
這篇文章主要介紹了Django基礎(chǔ)知識與基本應(yīng)用,結(jié)合實(shí)例形式分析了Django框架基本的項(xiàng)目創(chuàng)建、啟動、查看版本等操作,并結(jié)合一個(gè)簡單的blog應(yīng)用示例分析了Django的基本使用方法,需要的朋友可以參考下2018-07-07
Python?FastAPI?Sanic?Tornado?與Golang?Gin性能實(shí)戰(zhàn)對比
本文將深入比較Python的FastAPI、Sanic、Tornado以及Golang的Gin框架的各種特性、性能表現(xiàn)以及適用場景,通過詳實(shí)的性能測試和實(shí)際示例代碼,將探討它們在構(gòu)建現(xiàn)代高性能應(yīng)用中的優(yōu)劣勢,以便開發(fā)者根據(jù)需求做出明智的選擇2024-01-01
python使用Psutil模塊實(shí)現(xiàn)獲取計(jì)算機(jī)相關(guān)信息
psutil 是一個(gè)跨平臺的庫,用于獲取進(jìn)程和系統(tǒng)運(yùn)行狀態(tài)的信息,這篇文章主要為大家詳細(xì)介紹了python如何調(diào)用psutil模塊實(shí)現(xiàn)獲取計(jì)算機(jī)相關(guān)信息,有需要的小伙伴可以了解下2023-11-11
python使用xmlrpclib模塊實(shí)現(xiàn)對百度google的ping功能
這篇文章主要介紹了python使用xmlrpclib模塊實(shí)現(xiàn)對百度google的ping功能,實(shí)例分析了xmlrpclib模塊的相關(guān)技巧,需要的朋友可以參考下2015-06-06
python實(shí)現(xiàn)最短路徑的實(shí)例方法
在本篇內(nèi)容里小編給大家整理的是關(guān)于python實(shí)現(xiàn)最短路徑的實(shí)例方法,有需要的朋友們可以參考下。2020-07-07
python讀文件保存到字典,修改字典并寫入新文件的實(shí)例
下面小編就為大家分享一篇python讀文件保存到字典,修改字典并寫入新文件的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

