首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MATLAB 驗證數據指數關係:從線性假設到參數估計的完整流程

     編輯:程式設計綜合問答

問題重述

已知 12 組 (X, Y) 數據,假設存在指數關係 y = a * exp(b * x),如何編程驗證?

數學轉化:線性化處理

對數兩邊:ln(y) = ln(a) + b * x。令 Y' = ln(Y)、A = ln(a),得線性模型 Y' = A + b * x。

MATLAB 實現步驟

  1. 數據準備與預處理:
    X = [...]; Y = [...];  % 12 組數據
    Ylog = log(Y);        % 自然對數
  2. 最小二乘擬合:
    p = polyfit(X, Ylog, 1);  % 一次多項式擬合
    b = p(1);                 % 斜率
    A = p(2);                 % 截距
    a = exp(A);               % 還原 a
  3. 擬合優度評估:
    Yfit = a * exp(b * X);
    R2 = 1 - sum((Y - Yfit).^2) / sum((Y - mean(Y)).^2);  % 決定係數
    disp(['a = ', num2str(a), ', b = ', num2str(b), ', R² = ', num2str(R2)]);
  4. 可視化驗證:
    figure;
    subplot(1,2,1); plot(X, Y, 'o', X, Yfit, '-'); legend('原始數據','擬合曲線');
    subplot(1,2,2); semilogy(X, Y, 'o', X, Yfit, '-');  % 半對數圖應近似直線

判斷標準

  • R² > 0.95 且殘差無系統性分佈 → 強支持指數關係。
  • 半對數圖(semilogy)呈直線 → 直觀確認。
  • 若不滿足,嘗試冪函數 y = a*x^b(雙對數線性化)或多項式擬合。

進階:非線性最小二乘(無需線性化)

fun = @(p, x) p(1) * exp(p(2) * x);
p0 = [1, 0.1];  % 初始猜測
p_fit = lsqcurvefit(fun, p0, X, Y);  % 需優化工具箱
a = p_fit(1); b = p_fit(2);

直接擬合原始模型,避免對數變換放大小數據誤差,結果更魯棒。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved