This commit is contained in:
lwj
2025-06-19 00:08:48 +08:00
parent 3d1d16df10
commit e4e1a4be1e
4 changed files with 66 additions and 20 deletions

29
89-1.py
View File

@@ -43,6 +43,14 @@ def SovleRowMain(A,b):
# 最小二乘法拟合
def LeastSquares(list_x,list_y,n):
m = len(list_x)
for i in range(2*n):
tl = [list_x[j]**(i+1) for j in range(m)]
print(f"x^{i+1} :",tl)
print("sum:", sum(tl))
for i in range(n+1):
tl = [list_y[j]*list_x[j]**i for j in range(m)]
print(f"y*x^{i}: ",tl)
print("sum:", sum(tl))
x_n = []
b = []
for i in range(2*n+1):
@@ -71,13 +79,16 @@ def CalculateY(list_x, coeff):
re.append(0)
for j in range(len(coeff)):
re[i] += coeff[j]*list_x[i]**j
print("y预测:", re)
return re
# 计算均方根误差
def MeanSquareErr(list_y,list_y_approx):
m = len(list_y)
err = 0
print("y差值: ")
for i in range(m):
print(f"y-y测={list_y[i] - list_y_approx[i]}, (y-y测)^2={(list_y[i] - list_y_approx[i])**2}")
err += (list_y[i] - list_y_approx[i])**2
return err**0.5
@@ -108,17 +119,19 @@ if __name__ == "__main__":
coeff = LeastSquares(x,y,1)
PrintEquation(coeff)
y_approx = CalculateY(x, coeff)
print("均方根误差:")
print(MeanSquareErr(y,y_approx))
print("最大误差:")
print(MaxErr(y,y_approx))
# print()
print("均方根误差:",MeanSquareErr(y,y_approx))
# print()
print("最大误差:",MaxErr(y,y_approx))
print()
print("二次拟合")
coeff = LeastSquares(x,y,2)
PrintEquation(coeff)
y_approx = CalculateY(x, coeff)
print("均方根误差:")
print(MeanSquareErr(y,y_approx))
print("最大误差:")
print(MaxErr(y,y_approx))
# print()
print("均方根误差:",MeanSquareErr(y,y_approx))
# print()
print("最大误差:",MaxErr(y,y_approx))