# -*- 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()
最小二乘法擬合方位角與徑向速度的關係
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.