import numpy as np
from scipy.optimize import leastsq
#from scipy.integrate import quad,dblquad,nquad
import math
import xlrd
import matplotlib as mat
mat.use("TkAgg")
import matplotlib.pyplot as plt
x=[]
y=[]
data = xlrd.open_workbook(r'D:/fit.xlsx')
table = data.sheet_by_name(u'Sheet1')
num=800
for i in range(num):
x.append(table.cell_value(i,2))
y.append(table.cell_value(i,1))
x=np.asarray(x)
y=np.asarray(y)
print(x,y,len(x))
def func(p,x):
un_alpha, un_mill =p
return un_mill*((1-x)**un_alpha-(1-x)**(-(un_alpha/2)))
def error(p,x,y,s):
#print(s)
return func(p,x)-y
plt.figure()
for i in range(10):
p0=[i,i]
s="Test the number of iteration" #试验最小二乘法函数leastsq得调用几次error函数才能找到使得均方误差之和最小的a~c
Para=leastsq(error,p0,args=(x,y,s)) #把error函数中除了p以外的参数打包到args中
un_alpha, un_mill=Para[0]
print("un_alpha:", un_alpha ,"un_mill:",un_mill)
plt.subplot(2,5,i+1)
plt.plot(x,y,"red")
plt.plot(x,func(Para[0],x),"green")
plt.show()
简单公式最小二乘
最新推荐文章于 2023-12-21 16:59:33 发布