📄 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 + -