matlab最小二乘法擬合直線:matlab擬合直線代碼

今天我們一起學習一下參數擬合問題,這一問題在我們日常學習生活中是很常見的。在初中的時候我們經常碰到這樣一個問題,已知兩個點(x1,y1)和(x2,y2)讓我們求出一條過這兩點的曲線y=kx+b。在這個問題中我們碰到了兩個參數k 和b的求解問題,我們回顧一下初中的解決方案:

1.首先我們將兩個點帶入,得到

y1=k*x1+b

y2=k*x2+b

2.我們通過求解方程得出k 和b

這一個思路完整的敘述了參數擬合的整個過程,事實上,對於該問題我們只是希望的找到一條直線,使他到這兩個點的距離誤差最短。通過建立評價函數對各參數求偏導令其為零的可得到所需要的兩個方程

y1=k*x1+b

y2=k*x2+b

在高中我們計算圓參數,橢圓參數以及回歸求係數等這些均是一個典型的參數擬合問題,再到大學項目中的系統參數辨識以及複雜函數擬合等

對於這一問題 我們matlab 怎麼解決那

我們給出兩種思路

一.通過給定的函數直接參數擬合

%已知函數形式—多項式等給定的簡單函數形式

x=[1 3 5 8 9];

y=[2 5 7 10 13];

%已知函數形式為y=k*x+b

coeff=polyfit(x,y,1);

k=coeff(1);b=coeff(2);

二.通過設置目標函數求解—原理就是優化演算法迭代求解

目標函數:

function err=objfun(x,y,p)

%目標函數

%找到一條曲線是的到目標曲線最小 err=sum((y-yi)^2)

err1=p(1)*x+p(2)-y;

err=err1*err1′;

end

主程序調用目標函數

x=[1 3 5 8 9];

y=[2 5 7 10 13];

loss=@(p)objfun(x,y,p) %帶入已有參數

p_initial=[0 0];%定義優化工具箱迭代初值

[p,fval]=fmincon(loss,p_initial);

k1=p(1);b1=p(2);

當然對於複雜的問題,方法二問題解答精度受限於初值的影響,通常可通過設置數據集窮舉參數作為初值或者定義目標函數優化參數初值進一步解決擬合問題

對於日常科研過程中,要主要識別擬合問題:

1. 在信號處理方面,給出傳遞函數讓你求參數:該問題只需要將傳遞函數進行變換成差分形式,再結合方式2求解。

2. 給出已知數據,通過該數據進行預測,實際上該問題也可以從擬合的角度出發找到當前數據最接近的函數形式,在通過該形式的函數帶入全新的數值。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/216940.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 00:25
下一篇 2024-12-09 00:25

相關推薦

發表回復

登錄後才能評論