import sympy
'''1.定義相應的輸入和差值節點,
2.接下來需要計算法方程和
求出給出點的二次最小二乘擬合函式(a_0,a_1,a_2)
'''x_i = [0.00, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00]
y_i = [1.00, 1.75, 1.96, 2.19, 2.44, 2.71, 3.00]
w_i = [1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00]
def mathfunc(x, y, w):
"""input:多個點集,和權重集合
實現乙個函式,可以傳入任意對的點值,並實現乙個能夠求得特值函式的方法
output:函式y關於x的變數表示式
:return: list
"""gram_list_all =
d_list =
for i in range(2*2+1):#attention range中的值
gram_list_each = 0
#for j in range(len(x))::#邏輯錯誤,不應寫這個迴圈
for x_i, w_i in zip(x, w):
gram_list_each += w_i*(x_i**i)
#求d列表的相應的list
#定義一些的資料
for i in range(3):
t = 0
#for i in range(len(x)):#邏輯錯誤,不應寫這個迴圈
for x_i, f_i, w_i in zip(x, y, w):
t += w_i*(x_i**i)*f_i
return gram_list_all, d_list
"""1.math_func函式已經實現了陣列內gram矩陣和d向量簇的求解
2.編寫函式通過呼叫math_func函式求解a的值。
"""g, d = mathfunc(x_i, y_i, w_i)
# print(g,d)
a_0 = sympy.symbols('a_0')
a_1 = sympy.symbols('a_1')
a_2 = sympy.symbols('a_2')
w = [g[0]*a_0+g[1]*a_1+g[2]*a_2-d[0],g[1]*a_0+g[2]*a_1+g[3]*a_2-d[1],g[2]*a_0+g[3]*a_1+g[4]*a_2-d[2]]
result = sympy.solve(w,[a_0, a_1, a_2])
print('所求的函式表示式為:%f + %f*x + %f*x^2'%(result[a_0],result[a_1],result[a_2]))
供學習參考使用。 最小二乘擬合 6 7 最小二乘擬合問題
資料擬合問題的一般形式 任給一組離散資料 注 這裡的擬合函式不一定為多項式函式 記殘量的平方和為 求使得殘量平方和最小得一組係數就是線性最小二乘問題,為最小二乘問題得基函式,求得的擬合函式為資料的最小二乘擬合。求解 利用偏導數為零得到極值點的原理可以得到最小二乘問題滿足的方程組,求解方程組中未知係數...
最小二乘擬合
來自 某小皮 最優化函式庫optimization 優化是找到最小值或等式的數值解的問題。scipy.optimization子模組提供函式最小值,曲線擬合和尋找等式的根的有用演算法。最小二乘擬合 假設有一組實驗資料 xi,yi 事先知道它們之間應該滿足某函式關係yi f xi 通過這些已知的資訊,...
最小二乘線性擬合
實驗 給出實驗資料 程式 如下 write by void,2013.4.15,beijing import matplotlib.pyplot as plt import numpy as np x 13,15,16,21,22,23,25,29,30,31,36,40,42,55,60,62,6...