?? fun_nlfit.asv
字號:
function [A,a,E]= fun_NLFit(T,K)% 函數 FUN_NLFIT() 根據輸入T,K的數據集,求出擬合公式 k = A*(T^a)*exp(E/T)% 的未知常數 A,a,E 。% % 求解策略是:% 首先將非線性的擬合公式轉化為線性公式,再用求解線性方程組的矩陣方法求出未知常數的值% 擬合公式的線性化表達式為: log(k) = log(A) + a*log(T) + E/T% 這里有三個未知常數,則依次取T,K各三個數據,組成 N 個線性方程組 Ax=b,% 其中:x=[log(A),a,E], A=[1 log(T) 1/T], b=log(k)% 解這些線性方程組,得到所有方程組的解組成的解矩陣 xMat,其大小為 N*3,% 對解矩陣的每一列求平均,即可得到所求的未知常數值logT=log(T);logK=log(K);daoT=T.^(-1);lenT=length(T);A=ones(3);xMat=[];% 為了提高擬合精度,從第一個數據點開始,依次分別取T、K的三個相鄰的數據點% 組成線性方程組,若 T 有 lenT 個元素,則可組成 lenT-2 個方程組for r=1:lenT-2 A(:,2)=logT(r:r+2); A(:,3)=daoT(r:r+2); b=logK(r:r+2); % A=[1 log(T) 1/T], b=log(k) x=(A\b)'; xMat=[xMat;x]; % 每解一次方程組,則將解 x 存入解矩陣 xMatend% 對解矩陣的每一列求平均,即可得到所求的未知常數值logA=mean(xMat(:,1));A=exp(logA);a=mean(xMat(:,2));E=mean(xMat(:,3));% 畫出由點集T、K構成的目標曲線h1=stem(T,K,'bo'); % ‘bo’表示每個點用一個小圓圈表示 set(h1,'MarkerFaceColor','green'); % 點的顏色為綠色 set(h1,'LineStyle','none'); % 隱藏基線到點的連線 set(get(h1,'BaseLine'),'LineStyle','none'); % 隱藏基線 hold on; % 保持由點集構成的目標曲線,以便和擬合曲線進行對比t=200:10:1300;lt=length(t);for i=1:lt k(i)=A*(t(i)^a)*exp(E/t(i)); % endplot(t,k,'r');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -