最小二乘線性及平面擬合原理及C 實現

2022-05-28 12:21:10 字數 2205 閱讀 8169

一、線性最小二乘擬合

使用乙個簡單函式在整體上逼近已知函式,使其在整體上盡可能與原始資料曲線近似。記為:

稱之為擬合曲線

,若該函式為插值多項式,則所有偏差為零。

但實際情況中,我們不可能要求近似曲線

y =

嚴格通過這麼多數據點。但為了使其盡可能反映所給資料的變化趨勢,我們可以要求偏差的絕對值盡可能小,甚至是所有偏差中的最大值盡可能小。我們可以通過使選取的近似曲線在節點xi

處的偏差的平方和達到最小來實現這一目標,這一原則就是 最小二乘原則。

按最小原則選擇的擬合曲線

就稱為最小二乘擬合曲線,此方法稱為最小二乘法。

實用公式推導:

假設我們此處有這樣一組資料點,這些點的分布接近於在一條直線上,因此選一條直線(一條曲線則加入對應方程推導)來擬合這組資料,令:

根據最小二乘原則,有:

令a0,a1為未知數,則此處轉換為求二元函式s(a0,a1)的極小點問題:

由此可得:

聯立解得:

即得到了待求的擬合直線段。

c++實現:

bool gfittingline(double *xarray, double *yarray, int firstindex, int lastindex,

double &a, double &b)

double d = s0*s2-s1*s1;

b = (s2*t0-s1*t1)/d;

a = (s0*t1-s1*t0)/d;

return true;

}

實現對二維平面離散點的曲線擬合

二、最小二乘面擬合

對空間中的一系列散點,尋求乙個近似平面,與線性最小二乘一樣,只是變換了擬合方程:

使用平面的一般方程:

ax + by + cz + d = 0

可以令平面方程為:

由最小二乘法知:

同樣分別取 a0,a1,a2的偏導數:

即是:換算為矩陣形式有:

可以直接通過克拉默法則求出a0,a1,a2的行列式表示式,有:

c++實現(gdaterm3() 為自定義的三階行列式計算函式):

bool gfittingplane(double *x, double *y, double *z, int n, double &a, double &b, double &c)

r = gdeterm3(x2, xy, x1, xy, y2, y1, x1, y1, n);

if(is_zero(r)) return false;

a = gdeterm3(xz, xy, x1, yz, y2, y1, z1, y1, n) / r;

b = gdeterm3(x2, xz, x1, xy, yz, y1, x1, z1, n) / r;

c = gdeterm3(x2, xy, xz, xy, y2, yz, x1, y1, z1) / r;

return true;

}

最小二乘線性擬合

實驗 給出實驗資料 程式 如下 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...

最小二乘擬合 6 7 最小二乘擬合問題

資料擬合問題的一般形式 任給一組離散資料 注 這裡的擬合函式不一定為多項式函式 記殘量的平方和為 求使得殘量平方和最小得一組係數就是線性最小二乘問題,為最小二乘問題得基函式,求得的擬合函式為資料的最小二乘擬合。求解 利用偏導數為零得到極值點的原理可以得到最小二乘問題滿足的方程組,求解方程組中未知係數...

最小二乘擬合

來自 某小皮 最優化函式庫optimization 優化是找到最小值或等式的數值解的問題。scipy.optimization子模組提供函式最小值,曲線擬合和尋找等式的根的有用演算法。最小二乘擬合 假設有一組實驗資料 xi,yi 事先知道它們之間應該滿足某函式關係yi f xi 通過這些已知的資訊,...