def poly(file):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq # 最小二乘算法
from decimal import Decimal, ROUND_HALF_UP
df = pd.read_csv(file)
x = np.array(df.iloc[:, 0].values)
y = np.array(df.iloc[:, 1].values)
n = 3 # 多项式次数
# 目标函数
# 多项式函数
def fun(p, x): # 回归模型函数
w0, w1, w2, w3 = p
return w0 + w1 * x + w2 * x ** 2 + w3 * x ** 3
def error(p, x, y): # 误差
return fun(p, x) - y
p0 = np.random.randn(n + 1) # 初始参数值
para = leastsq(error, p0, args=(x, y))
w0, w1, w2, w3 = para[0]
print(para[0])
#w0=round(w0, 2)
w0=Decimal(w0).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
w1 = Decimal(w1).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
w2 = Decimal(w2).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
w3 = Decimal(w3).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
print(w0, w1, w2, w3)
return w0, w1, w2, w3
if __name__=="__main__":
poly("lousai-22-01.csv")