曲线拟合的最小二乘法:加权最小二乘法 python
曲线拟合的最小二乘法:加权最小二乘法 python
·
曲线拟合的最小二乘法:加权最小二乘法 python
import numpy as np
def GJ(a): #定义高斯列主元素消去法
row=a.shape[0]
for j in range(0,row):
if j<row:
b=FindLarge(a[j:,j])
else:
b=0
b1=b+j # 主元和对角线所在行交换
c= np.copy(a[b1,:])
a[b1,:]=a[j,:]
a[j,:]=c
for i in range(0, row):
if i==j:
continue
a[i,:]=a[i,:]-a[j,:]*a[i,j]/a[j,j]
return a
def FindLarge(a0): #寻找主元
b0=np.argmax(a0)
return b0
def augmentMatrix(A, b):
if(len(A) != len(b)):
raise 'The number of rows is different'
result = []
for i in range(len(A)):
row = []
for j in range(len(A[i])):
row.append(A[i][j])
for j in range(len(b[i])):
row.append(b[i][j])
result.append(row)
return result #生成增广矩阵
x=[]
y=[]
Y=[]
W=[]
X=[]
a=[]
n=int(input("请输入最高项的次数:"))
xxx=(input("请输入x的值,以空格分隔:"))
yyy=(input("请输入y的值,以空格分隔:"))
www=(input("请输入w的值,以空格分隔:"))
x=xxx.split(" ")
m=len(x)
y=yyy.split(" ")
W=www.split(" ")
x=[float(x) for x in x]
y=[float(x) for x in y]
W=[float(x) for x in W]
for i in range(n+1):
onerow=[]
onerow1=[0]
for j in range(n+1):
onerow.append(0)
X.append(onerow)
Y.append(onerow1)
for i in range(n+1):
for j in range(n+1):
he=0
for k in range(m):
he+=W[k]*x[k]**(i+j)
X[i][j]=he
for i in range(n+1):
he=0
for k in range(m):
he+=y[k]*W[k]*x[k]**(i)
Y[i][0]=he
AA1=augmentMatrix(X,Y)
A1 = np.mat(AA1, dtype=float)
a1=GJ(A1)
for i in range(n+1):
xxx=a1[i,n+1]/a1[i,i]
yyy=round(float(xxx),3) #结果保留三位小数
a.append(yyy)
print("a%d="%(i),yyy)
print('fai(x)=',a[0],end='')
for i in range(1,n+1):
print('+',a[i],"x**%d"%(i),end='')
输入案例

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)