最小二乘法拟合方位角与径向速度的关系

# -*- 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()



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值