最小二乘法擬合方位角與徑向速度的關係

# -*- coding: GB2312 -*-
"""
Created on Thu Jan 21 20:56:24 2016

@author: Administrator
"""

import numpy as np
from scipy.optimize import leastsq
import pylab as pl
import sys

def func(x, p):
    """
    數據擬合所用的函數: a + b*sin(cx + d)
    """
    a, b, c, d = p
    return a + b*np.sin(c*x+d)
 
def residuals(p, y, x):
    """
    實驗數據x, y和擬合函數之間的差,p爲擬合需要找到的係數
    """
    return y - func(x, p)
 

file=open("E:\\fit\\AM_new.csv",'r')
dataLines = file.readlines()
angle = []
dataA = []
#dataB = []
#dataC = []
#dataD = []

for line in dataLines:
    angleCur,dataACur,dataBCur,dataCCur,dataDCur = line.split(',')
    
    if angleCur != 'NaN':
        angle.append(float(angleCur)/180*np.pi)
    if dataACur != 'NaN':
        dataA.append(float(dataACur))
    #if dataBCur != 'NaN':
        #dataB.append(float(dataBCur))
    #if dataCCur != 'NaN':
        #dataC.append(float(dataCCur))
    #if dataDCur != 'NaN':
        #dataD.append(float(dataDCur))
 
p0 = [3, 1, 1, 0] # 第一次猜測的函數擬合參數
 
# 調用leastsq進行數據擬合
# residuals爲計算誤差的函數
# p0爲擬合參數的初始值
# args爲需要擬合的實驗數據
plsq = leastsq(residuals, p0, args=(dataA, angle))
 
print u"擬合參數", plsq[0] # 實驗數據擬合後的參數
 
pl.plot(angle, dataA, label="raw data")
pl.plot(angle, func(angle, plsq[0]), label="fitting data")
pl.legend()
pl.show()



發佈了81 篇原創文章 · 獲贊 7 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章