前言
最小二乘線性擬合是常規(guī)操作冕广,本文直接跨過妒牙。由于多元線性擬合和一元非線性擬合關(guān)系密切孽亲,故本文將其二放在一起討論沿盅。本文重點(diǎn)是實(shí)現(xiàn)單元的非線性擬合把篓。最后補(bǔ)充一句:不論是一元線性、一元非線性腰涧、多元線性韧掩,其核心思想都是:多項(xiàng)式擬合;核心方法都是:最小二乘原理窖铡。
多元非線性擬合原理
定義:變量與個(gè)自變量都存在線性關(guān)系疗锐,即構(gòu)成了多元線性關(guān)系:
每一個(gè)自變量都有一組(有個(gè))測量值坊谁,我們可以記做:。注意:滑臊,因?yàn)榉匠虜?shù)要比未知數(shù)多口芍。變量序號與其觀測值序號如下表:
觀測值序號\變量序號 | ||||||
---|---|---|---|---|---|---|
1 | ||||||
2 | ||||||
n |
如何衡量擬合效果?還是根據(jù)最小二乘原理雇卷,只不過是未知參數(shù)多了一些而已△尥郑現(xiàn)在的未知數(shù)為,即將最小二乘原理運(yùn)用到包含個(gè)的函數(shù)上即可:
對于上式关划,我們一次對求各個(gè)的偏導(dǎo)數(shù)并令其值為0小染,可得如下個(gè)方程:
最后用于求解的正規(guī)方程組為:
解上面的線性方程組即可得到一些列系數(shù)调榄。
一元非線性擬合
為什么說一元非線性擬合和多元線性擬合關(guān)系密切呢踊赠?因?yàn)闉榱擞?jì)算方便,我們會使用變量替換的方法每庆,將一元非線性各階式子用不同的變量代替筐带,轉(zhuǎn)換成多元非線性蝉绷,然后用上面的正規(guī)方程組求解窿冯。
例如:已知有組非線性數(shù)據(jù),用m階一元非線性多項(xiàng)式擬合:
我們只需要用代換()凤价,就可以將一元非線性轉(zhuǎn)換為多元線性:
用上面多元線性的操作鸽斟,根據(jù)最小二乘原理令關(guān)于每個(gè)未知系數(shù)的偏導(dǎo)數(shù)為0,可得正規(guī)方程的矩陣的通用形式如下:
關(guān)于上面最終求解方法有3個(gè)細(xì)節(jié)要注意:
- 觀測值個(gè)數(shù)只出現(xiàn)在求和的上限利诺,故不影響矩陣結(jié)構(gòu)富蓄;
- 系數(shù)的個(gè)數(shù),要比多項(xiàng)式最高階數(shù)多1個(gè)慢逾,即多了前面的立倍;
- 系數(shù)矩陣為對稱方陣,尺寸比多項(xiàng)式最高階次多1侣滩。
舉一個(gè)例子:
如何現(xiàn)在有個(gè)觀測數(shù)據(jù)口注,想要最高階數(shù)的多項(xiàng)式擬合,即:
最終求解矩陣(尺寸:)就是:
用Matlab實(shí)現(xiàn)任意階非線性擬合
數(shù)據(jù)自己給君珠,然后輸入想要的階數(shù)后寝志,自動(dòng)求解擬合公式:
% 任意多項(xiàng)式擬合數(shù)據(jù)點(diǎn), 當(dāng)然最好不要超過6階
clear; clc;
% 這里修改原始觀測數(shù)據(jù):
xnum = 1:10;
ynum = [3.8 6.3 7.9 8.6 9.2 9.5 9.7 9.9 10.1 10.2];
m = double(input('擬合階數(shù)m = '));
n = length(xnum);
% 等號左邊矩陣: 每個(gè)元素的冪 = row + col -2
A = zeros(m+1,m+1);
for row = 1:m+1
for col = 1:m+1
A(row,col) = sum(xnum.^(row+col-2));
end
end
% 等號右邊矩陣: 一行m+1列
B = zeros(m+1,1);
for num = 1:m+1
B(num,1) = sum((xnum.^(num-1)).*ynum);
end
% 多項(xiàng)式系數(shù)/方程求解:
a = inv(A)*B;
syms x;
ytmp = sym(zeros(1,m+1));
for num = 1:num
ytmp(num) = x^(num-1);
end
fprintf('擬合結(jié)果為:\n');
y = vpa(sum(ytmp.*a'),6) % 擬合的多項(xiàng)式結(jié)果
figure(1);
scatter(xnum,ynum);
hold on;
x = min(xnum):0.1:max(xnum);
y = double(subs(y));
plot(x,y);
grid on;
xlabel('x'); ylabel('y');
title('原點(diǎn)為樣本點(diǎn);實(shí)線為多項(xiàng)式擬合結(jié)果');
例如5階效果: