Matlab優化擬合曲線

2021-03-02 算法工程師的學習日誌

分享一下使用非線性函數對數據進行擬合。非線性函數假定是標準指數衰減曲線,

y(t)=Aexp(−λt)

其中,y(t) 是時間 t 時的響應,A 和 λ 是要擬合的參數。對曲線進行擬合是指找出能夠使誤差平方和最小化的參數 A 和 λ,誤差平方和為目標函數

創建樣本數據

本文基於 A=40 和 λ=0.5 且帶正態分布偽隨機誤差的模型創建人工數據。

編寫目標函數

編寫一個函數,該函數可接受參數 A 和 lambda 以及數據 tdata 和 ydata,並返回模型 y(t) 的誤差平方和。將要優化的所有變量(A 和 lambda)置入單個向量變量 (x)。將目標函數保存為 func.m 的文件。

function sse = func(x,tdata,ydata)A = x(1);lambda = x(2);sse = sum((ydata - A*exp(-lambda*tdata)).^2);

fminsearch 求解器適用於一個變量 x 的函數。但 func函數包含三個變量。額外變量 tdata 和 ydata 不是要優化的變量,而是用於優化的數據。將 fminsearch 的目標函數定義為僅含有一個變量 x 的函數:

fun = @(x)func(x,tdata,ydata);

求最優擬合參數

從隨機正參數集 x0 開始,使用 fminsearch 求使得目標函數值最小的參數。

x0 = rand(2,1);bestx = fminsearch(fun,x0)bestx = 2×1
40.6877 0.4984

結果 bestx 與生成數據的參數 A = 40 和 lambda = 0.5 相當接近。

檢查擬合質量

檢查擬合質量,繪製數據和生成的擬合響應曲線。根據返回的模型參數創建響應曲線。

A = bestx(1);lambda = bestx(2);yfit = A*exp(-lambda*tdata);plot(tdata,ydata,'*');hold onplot(tdata,yfit,'r');xlabel('tdata')ylabel('Response Data')title('原始數據和擬合數據')legend('原始數據','擬合數據')hold off

相關焦點

  • MATLAB通過優化擬合曲線
    其中,y(t) 是時間 t 時的響應,A 和 λ 是要擬合的參數。其中,時間為 ti,響應為 yi,i=1,…,n。誤差平方和為目標函數。通常,您要通過測量獲得數據。將要優化的所有變量(A 和 lambda)置入單個向量變量 (x)。
  • MATLAB萬能實用的非線性曲線擬合方法
    在科學計算和工程應用中,經常會遇到需要擬合一系列的離散數據,最近找了很多相關的文章方法,在這裡進行總結一下其中最完整、幾乎能解決所有離散參數非線性擬合的方法根據你的實際問題得到一系列的散點例如:根據上述的實際散點確定應該使用什麼樣的曲線,或者說是想要模擬的曲線
  • MATLAB曲線擬合及Fourier分析
    在這種情況下,如果強求構造的函數(曲線)通過各插值節點,顯然是不合理的。為此,人們設想構造一個函數(曲線)y=g(x)去擬合f(x),但它不必通過各插值節點,而只是使該曲線從這些插值節點中穿過,且使它在某種意義下最優。MATLAB的曲線擬合是用常見的最小二乘原理,所構造的g(x)是一個次數小於擬合節點個數的多項式。
  • 強大的matlab數據科學擬合庫cftool——直接導入數據進行擬合
    對於使用過matlab做數據處理的人來說,擬合是將平面上一系列的點,用一條光滑的曲線連接起來。因為這條曲線有無數種可能,從而有各種擬合方法。擬合的曲線一般可以用函數表示,根據這個函數的不同有不同的擬合名字。
  • 如何使用Matlab編程進行參數擬合
    x=[ones(10,1) (1:10)']y=x*[10;1]+normrnd(0,0.1,10,1)[b,bint, r,rint,stats]=regress(y,x,0.05)rcoplot(r,rint)4.2簡單線性模型-多項式擬合多項式曲線擬合函數:polyfit( )
  • Matlab擬合詳解
    更為強大的fit函數一維多項式擬合(曲線) p=0 最小二乘直線擬合p=1 三次樣條插值                 函數的類型                 串演算函數                 實時編輯器 Live Editor介紹第五節                 函數變量                 錯誤和異常的處理                 matlab
  • Matlab曲線擬合和插值
    MATLAB軟體提供了基本的曲線擬合函數的命令.
  • 【科研心得】基於MATLAB的曲線擬合
    所謂的曲線擬合,就是使用某一個模型(比如一元線性模型、指數模型以及Logistic模型等),將一系列的數據擬合成平滑的曲線,以便觀察兩組數據之間的內在聯繫,了解數據之間的變化趨勢。曲線擬合在科學研究、數學建模、實驗分析以及程序開發上都有很大的用處。這裡談到的曲線擬合,可根據自己的需要,選擇不同的模型,可得出不同的效果。
  • MATLAB繪製帶置信區間的擬合曲線
    曲線擬合是已知離散點上的數據集,構造一個解析函數(其圖形為一曲線),使在原離散點上儘可能接近給定的值。
  • 【基礎教程】Matlab 曲線擬合之polyfit與polyval函數
    xx=linspace(min(x),max(x)); % 繪圖用到的點的橫坐標yy=polyval(p1,xx); % 擬合曲線的縱坐標plot(x,y,'-or',x1,y1,'-ob',xx,yy); % 繪圖,原始數據+擬合曲線hold on;grid on;b0 = [y(1),-1];%設置初始值;Xi=linspace(min(x),max(x)); % 繪圖用到的點的橫坐標b
  • 應用matlab進行多項式擬合
    採用matlab軟體中的polyfit()函數進行多項式擬合,分別採用5階多項式和9階多項式進行擬合,並對擬合結果進行繪圖對比。clc;clear all;x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8];y=[1 2 3 5 6 7 6 5 4 1 ]; p5=polyfit(x,y,5); %5階多項式擬合
  • 線性擬合與曲線擬合,直接在圖上添加擬合曲線、擬合方程、判別係數...
    2、什麼是曲線擬合?真實世界研究中,變量間不一定是線性關係,比如疾病療效與療程長短的關係、服藥後血藥濃度與時間的關係等常呈曲線關係。此時,線性擬合效果不佳,曲線擬合提供了一個很好的解決思路。曲線擬合(Curve Fitting)是指選擇適當的曲線類型來擬合觀測數據,並用擬合的曲線方程分析兩個變量之間的關係。也可以說曲線擬合就是使用某個模型(或者稱為方程),將一系列的數據擬合出平滑的曲線,以便觀察兩組數據之間的內在聯繫,了解數據之間的變化趨勢。通過對數據進行曲線擬合,我們不但能找到數據中潛在的某種規律,還能對數據的變化進行預測。
  • 數學建模筆記——插值擬合模型(二)
    那什麼是擬合呢?擬合類似於插值,都是函數逼近的一種手段。區別在於,插值函數必須經過所有已知點,而擬合得到的函數,只需要滿足在某種意義下,已知點與該函數曲線的「誤差」最小。換句話說,擬合就是在平面上找到一條連續的曲線,使得所有已知點到這條曲線的總距離最小。這樣我們就有理由使用這條曲線來近似原函數曲線了。
  • Matlab 入門教程 | 014 曲線擬合:如何預測2030年中國總人口?
    今天我們以一個簡單的例子來說明如何使用Matlab進行曲線擬合和對數據進行分析預測。問題描述根據2000年-2019年中國人口數據,預測2030年、2050年中國的總人口大約是多少?思路:人口(Population)是時間(Year)的函數。
  • 數據擬合原理及MATLAB實現
    數據插值的特點是數據插值函數會嚴格過所有插值節點,而數據擬合只要求擬合函數合理地反映曲線趨勢,不要求必須過所有數據點。數據插值的用途是內部預測,即待預測點自變量在插值節點的自變量取值範圍之內。數據擬合則可以完成外部預測,比如已知前n天的數據,用來預測第n+1天的數據。
  • matlab插值擬合(二)
    1 基於最小二乘法的多項式擬合函數:polyfitp = polyfit(x,y,n),待擬合的多項式為p(1)*x^n + p(2)*x^(n-1) +…+ p(n)*x + p(n+1),其中x是擬合數據的自變量,y是因變量,n是擬合多項式的階數,如當n為1時,即為一次線性擬合。
  • 如何利用Origin進行曲線擬合?
    Origin 提供了強大的線性回歸和函數擬合功能,其中最有代表性的是線性回歸和非線性最小平方擬合。曲線擬合(curve fitting)是指選擇適當的曲線類型來擬合數據,並用擬合的曲線方程分析兩個變量之間的關係。通過對數據進行曲線擬合,我們不但能找到它的變化規律,還能對數據的變化進行一定程度的預測。
  • Matlab基礎知識概述
    2002 年初夏所推6.5 版的最大特點是:該版本採用了JIT 加速器,從而使MATLAB 朝運算速度與C 程序相比肩的方向前進了一大步。從2006開始,MathWorks 公司宣布每年更新兩次版本,在已經有了matlab2006a, matlab2006b, matlab2007a, matlab2007b~matlab2012a等等。
  • matlab符號微積分及應用舉例
    本節講述的三個函數用法都比較簡單,但涉及到實際問題時,可能需要從多方面思考,下面的例子是一個比較綜合的例子(涉及到曲線擬合、繪圖、函數微分的知識),希望對讀者有所幫助。 例、根據實際測量,得到河流某處寬 600m ,其橫截面不同位置某一時刻的水深如下表所示。
  • 【Matlab】繪圖
    我們剛剛畫的都是單個figure都只plot了一個曲線,那麼要plot多個曲線要怎麼辦呢,我們可以這麼寫plot(x1,y1,x2,y2,x3,y3...),是否刪除哪些曲線等Basic fitting & Data statisticsBasic fitting如字面意思一樣,就是最基礎的擬合曲線。因為我們做實驗的目的就是為了找出規律,所以常常需要看看有沒有什麼數學公式剛好能符合數據情況,這時候就需要擬合曲線了。residuals就是擬合的貼切程度,0就是完全符合,越偏離0擬合越失敗