1.問題提出:
給出一堆資料,假設有n組(x,y),求乙個k階擬合,使擬合後的曲線,最接近給出的資料趨勢,如下圖公式(0)。
2.解決方案:
這裡給出三種擬合方案:
1)絕對值之和最小,見公式(1)。
2)差值平方和最小,見公式(2)。(即最小二乘擬合)。
3)使差值絕對值最大的資料值最小,見公式(3)。
3.最小二乘擬合
3.1 思想
對ai求偏導,i=1~k。
以上範德蒙矩陣化簡之後:
由以上,即可以把擬合的係數定下來了。
切記,擬合的過程中,不能過擬合,也不能欠擬合。階數,要根據實際情況擬定。
示例:%%最小二乘模擬,
%%n階
clc;clear;close all;
%%確定階數
order=9;
x=-1:0.02:1;
i=1;
for a=-1:0.02:1
y(i)=((a*a-1)*(a*a-1)*(a*a-1)+0.5)*sin(2*a);
i=i+1;
end% plot(x,y,'r-');
grid on;
%%%對曲線加噪
w=randn(length(x))/20;
for i=1:1:101
y1(i)=y(i)+w(i);
endhold on;
plot(x,y1,'b.')
legend('real','jiazao',-1);
%%plot(x,'g*')
%%%對曲線進行擬合
%%x*a=y;a=[inv(x'*x)*x']*y;
lenrow=length(x);
lencol=order+1;
matrixx=zeros(lenrow,lencol);
%%往matrix裡面填 值
for i=1:1:lenrow
for j=1:1:lencol
matxtemp=1;
for k=j-1
matxtemp=1*x(i)^k;
endmatrixx(i,j)=matxtemp;
endend
matrixy=y1';
%%solve a
matrixtemp1=matrixx'*matrixx;
invmatrixtemp=inv(matrixtemp1);
matrixatemp=invmatrixtemp*matrixx';
matrixa=matrixatemp*matrixy;
% matrixa=inv(matrixx'.*matrixx).*matrixx'.*matrixy;
matrixy0=zeros(1,length(y1));
for i=1:1:length(y1)
matrixtemp=1;
matrixy0(i)=0;
for k=1:1:order+1
matrixy0(i)=matrixy0(i)+matrixa(k)*x(i)^(k-1);
endend
%%plot(a,matrixy0,'r-');
擬合結果對比:
最小二乘擬合 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...