赞
踩
pip install numpy
pip install scipy
-安装完成后 重新启动origin才能运行
# 最小二乘拟合实例
import numpy as np
from scipy.optimize import leastsq
def func( x, p,c):
"""
数据拟合所用的函数: A*cos(2*pi*k*x + theta)
"""
n, k = p
return c[1]+(c[0]-c[1])* (x ** n / (k ** n + x ** n))
def residuals(p, y, x,c):
"""
实验数据x, y和拟合函数之间的差,p为拟合需要找到的系数
"""
return y - func(x, p,c)
xp = np.genfromtxt('C:/Users/Administrator/Desktop/1.txt')
#print(xp) # 返回list
# x = np.lipase(0, 20)
n, k = 50, 3 # 真实数据的函数参数
x = xp[:, 0]
y = xp[:, 1]
c=[max(y),min(y)]
# y0 = func(x, [n, k],c) # 真实数据
y1 = y
p0 = [1,50] # 第一次猜测的函数拟合参数 n,k
## 调用leastsq进行数据拟合
## residuals为计算误差的函数
## p0为拟合参数的初始值
## args为需要拟合的实验数据
plsq = leastsq(residuals, p0, args=(y,x,c))
#
y2=func(x,plsq[0],c)
# print (u"真实参数:", [A, k, theta] )
print(u"拟合参数", plsq[0]) # 实验数据拟合后的参数
RSS=np.dot(np.transpose(y1 - y2),(y1-y2))
R2=1-RSS/(np.var(y1)*(len(y1)-1))
print("MSE:",RSS)
print("R2:", R2)
#sklearn求解的MSE值
#
# pl.plot(x, y, color='r',label=u"真实数据")
# pl.plot(x, y1, color='b',label=u"带噪声的实验数据")
# pl.plot(x, func(x, plsq[0]), color='g', label=u"拟合数据")
# pl.legend()
# pl.show()
y = y m i n + ( y m a x − y m i n ) ∗ x n x n + k n y=y_{min} + (y_{max}-y_{min})*\frac{x^n}{x^n+k^n} y=ymin+(ymax−ymin)∗xn+knxn
与董说
。。。。。。。。。。。。。。没得冷笑话的一周
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。