python用最小二乘法拟合正弦函数

#载入库
import numpy as np
from scipy.optimize import leastsq
import pylab as pl

#定义函数形式和误差
def func(x,p):
    A,k,theta=p
    return A*np.sin(2*np.pi*k*x+theta)
def residuals(p,y,x):
    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))
#trian the para
p0=[7,0.2,0]#在非线性拟合中,初始参数对结果的好坏有很大的影响
Para=leastsq(residuals,p0,args=(y1,x))
a1,a2,a3=Para[0]
#plot
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
plt.scatter(x,y1,color="red",label="Sample Point",linewidth=3) #画样本点
y=a1*np.sin(2*np.pi*a2*x+a3)
plt.plot(x,y,color="orange",label="Fitting Line",linewidth=2) #画拟合直线
plt.legend()
plt.show()

结果如下:

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值