python-11-最小二乘拟合leastsq和数据文件操作

1 最小二乘拟合

import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt

def func(x,p):
    #数据拟合所用函数A*sin(2*pi*k*x+theta)
    A,k,theta=p
    return A*np.sin(2*np.pi*k*x+theta)
def residuals(p,x,y):
    #实验数据x,y 和拟合函数之间的差,p为拟合需要的找到的系数
    return y-func(x, p)
x=np.linspace(0,-2*np.pi,100)
A,k,theta=10,0.34,np.pi/6#真实数据的函数参数
y0=func(x,[A,k,theta])#真实数据
y1=y0+2*np.random.randn(len(x))#加入噪声得到实验数据


p0=[7,0.2,0]#第一次猜测的函数拟合参数
#调用leastsq进行数据拟合
#residuals为计算误差的函数
#p0为拟合参数的初始值
#args为需要拟合的实验数据
plsq=leastsq(residuals,p0,args=(x,y1))
print("真实参数:",[A,k,theta])
print("拟合参数:",plsq[0])#实验数据拟合后的参数

plt.plot(x,y0,label='真实数据')
plt.plot(x,y1,label='带噪声的实验数据')
plt.plot(x,func(x,plsq[0]),label='拟合数据')
plt.legend()
plt.show()

在这里插入图片描述真实参数: [10, 0.34, 0.5235987755982988]
拟合参数: [-9.7440893 0.34310722 3.73484561]

2 数据文件操作

2.1 写入数据文件

import time
with open("log.txt",'a+',encoding="utf-8") as fw:
	tmp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
	fw.write(tmp+"\t"+data_json+"\n")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值