最小二乘法求参数
import numpy as np
from scipy.optimize import leastsq
##样本数据(Xi,Yi),需要转换成数组(列表)形式
Xi=np.array([1,2,3,4,5])
Yi=np.array([3,5,7,9,11])
#初始化参数列表
init_w_b_list = [0, 0]
def func(init_w_b, x):
"""
定义函数表达式
"""
w, b = init_w_b
result = w*x + b
return result
def error(init_w_b, x, y):
"""
定义误差函数
"""
errors = func(init_w_b, x) - y
return errors
# 迭代函数求,参数
# error 误差函数
# init_w_b_list 初始参数,列表形式
# args 待拟合参数
Para = leastsq(error, init_w_b_list, args=(Xi,Yi))
#读取结果
k,b = Para[0]
print("k=",k,"b=",b)
numpy多项式
import numpy as np
def mult_(M, x):
p_init = np.random.rand(M + 1)
print("=========p_init is=========")
print(p_init)
f = np.poly1d(p_init)
print("=========f is =========")
print(f)
print("=========x is =========")
print(x)
print("=========f(x) is =========")
print(f(x))
if __name__ == "__main__":
x = np.linspace(0, 1, 4)
y_ = real_func(x)
y = [np.random.normal(0, 0.1) + y1 for y1 in y_]
mult_(2, x)