gtfd
This commit is contained in:
29
89-1.py
29
89-1.py
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user