已知 12 組 (X, Y) 數據,假設存在指數關係 y = a * exp(b * x),如何編程驗證?
對數兩邊:ln(y) = ln(a) + b * x。令 Y' = ln(Y)、A = ln(a),得線性模型 Y' = A + b * x。
X = [...]; Y = [...]; % 12 組數據
Ylog = log(Y); % 自然對數
p = polyfit(X, Ylog, 1); % 一次多項式擬合
b = p(1); % 斜率
A = p(2); % 截距
a = exp(A); % 還原 a
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)]);
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);
直接擬合原始模型,避免對數變換放大小數據誤差,結果更魯棒。