曲线拟合的最小二乘法:加权最小二乘法 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='')

输入案例
请添加图片描述

Logo

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

更多推荐