因為 pow 是內置的方法,而 sin 是 math 包提供的方法。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于成都網站設計、成都網站制作、肥城網絡推廣、小程序開發(fā)、肥城網絡營銷、肥城企業(yè)策劃、肥城品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供肥城建站搭建服務,24小時服務熱線:028-86922220,官方網址:www.cdcxhl.com
如果你自己定義了一個 pow 方法,就會覆蓋掉默認的 pow 方法,但是如果你 import 了兩個包,兩個里面都有 sin 方法,那么使用的時候如果不指定是哪個的話就無法準確執(zhí)行了。同理,如果引用的是外部包的方法或者類的話,就一定要使用包名引用。如果每次打包名嫌麻煩的話,可以使用 import math as m 這樣的縮寫,下次就可以使用 m.sin() 了。
任意波形的生成 (geneartion of arbitrary waveform) 在商業(yè),軍事等領域都有著重要的應用,諸如空間光通信 (free-space optics communication), 高速信號處理 (high-speed signal processing),雷達 (radar) 等。在任意波形生成后, 如何評估生成的任意波形 成為另外一個重要的話題。
假設有一組實驗數(shù)據,已知他們之間的函數(shù)關系:y=f(x),通過這些信息,需要確定函數(shù)中的一些參數(shù)項。例如,f 是一個線型函數(shù) f(x)=k*x+b,那么參數(shù) k 和 b 就是需要確定的值。如果這些參數(shù)用 p 表示的話,那么就需要找到一組 p 值使得如下公式中的 S 函數(shù)最?。?/p>
這種算法被稱之為 最小二乘擬合 (least-square fitting)。scipy 中的子函數(shù)庫 optimize 已經提供實現(xiàn)最小二乘擬合算法的函數(shù) leastsq 。下面是 leastsq 函數(shù)導入的方式:
scipy.optimize.leastsq 使用方法
在 Python科學計算——Numpy.genfromtxt 一文中,使用 numpy.genfromtxt 對數(shù)字示波器采集的三角波數(shù)據導入進行了介紹,今天,就以 4GHz三角波 波形的擬合為案例介紹任意波形的擬合方法。
在 Python科學計算——如何構建模型? 一文中,討論了如何構建三角波模型。在標準三角波波形的基礎上添加了 橫向,縱向的平移和伸縮特征參數(shù) ,最后添加了 噪聲參數(shù) 模擬了三角波幅度參差不齊的隨機性特征。但在波形擬合時,并不是所有的特征參數(shù)都要納入考量,例如,噪聲參數(shù)應是 波形生成系統(tǒng) 的固有特征,正因為它的存在使得產生的波形存在瑕疵,因此,在進行波形擬合并評估時,不應將噪聲參數(shù)納入考量,最終模型如下:
在調用 scipy.optimize.leastsq 函數(shù)時,需要構建誤差函數(shù):
有時候,為了使圖片有更好的效果,需要對數(shù)據進行一些處理:
leastsq 調用方式如下:
合理的設置 p0 可以減少程序運行時間,因此,可以在運行一次程序后,用擬合后的相應數(shù)據對 p0 進行修正。
在對波形進行擬合后,調用 pylab 對擬合前后的數(shù)據進行可視化:
均方根誤差 (root mean square error) 是一個很好的評判標準,它是觀測值與真值偏差的平方和觀測次數(shù)n比值的平方根,在實際測量中,觀測次數(shù)n總是有限的,真值只能用最可信賴(最佳)值來代替.方根誤差對一組測量中的特大或特小誤差反映非常敏感,所以,均方根誤差能夠很好地反映出測量的精密度。
RMSE 用程序實現(xiàn)如下:
擬合效果,模型參數(shù)輸出:
leastsq 函數(shù)適用于任何波形的擬合,下面就來介紹一些常用的其他波形:
使用python的matplotlib畫正弦函數(shù)圖像,還要用到numpy庫,代碼如下9行所示:
import numpy as np;
from matplotlib import pyplot as plt;
fig = plt.figure();
ax2= fig.add_subplot(111);
x=np.arange(0,100)/10;
y=np.sin(x);
ax2.plot(x,y);
plt.savefig('sine.png');
plt.show();