matlap 指數曲線擬合及其R2的計算

2021-06-23 00:50:29 字數 1849 閱讀 5008

今天早上接到師姐的緊急傳呼,說是將一組資料按照確定的公式進行指數擬合。可是來北京後就沒用過matlap,很多基礎的東西都忘 了,沒事,有事無事找度娘啊!話不多說,說正事。我仔細閱讀了要求文件,核心有兩個,1:方程的構建,:2:計算流程

先拿公式:

已知資料:每個波段所對應的ad(λ)值和ad(440)(波長為440的值),λ為400-700 nm的波長,間隔1 nm

求解sd

波段資料如下:

資料特點是由很多site,每個site都要分別計算,想了下簡單,乙個迴圈的事,難點是如何動態設定已知變數a

d(440),查了一些,自己試驗了一下發現也挺簡單 。

不多說先放**,下面是計算每個site擬合方程的**:

function =caculatersd()

data=xlsread('nihe.xlsx'); %這是波段的原始資料

[r,c]=size(data);

result=zeros(r+2,c);

for i=2:c

a=data(1,i);

x=data(2:r,1);

y=data(2:r,i);

x0=0;  %因為估算了一下,0值比較接近真實的sd值,所以選擇0了

%定義擬合函式

f=@(sd,x)a*exp(sd*(440-x));

sd=lsqcurvefit(f,x0,x,y);

y1=a*exp(sd*(440-x));

% -----計算r方方法一------------ 

r2=norm(y1-mean(y1))^2/norm(y-mean(y))^2;

% -----計算r方 方法二------------        

%         ss0=0;

%         ss1=0;

%         for k=1:r-1

%            ss0=(y(k)-mean(y))*(y1(k)-mean(y1))+ss0;

%            ss1=(y(k)-mean(y))^2*(y1(k)-mean(y1))^2+ss1;

%         end

%         r2=(ss0/sqrt(ss1))^2;

%-----------------------------------      

%存入sd、ad、r2

result(r+1,i)=sd;

result(r+2,i)=r2;

result(2:r,i)=y1;

endxlswrite('result_sd_a8.xls',result)

end

計算完後,得檢視一下擬合效果吧

這個也簡單,上**

function =plotfun()

data=xlsread('nihe.xlsx'); %讀取原始資料

excutedata=xlsread('result_sd_a7.xls'); %讀取處理資料

[r,c]=size(data);

x=data(2:r,1);%獲取波段號

y=data(2:r,3); %讀取site2的波段值

y1=excutedata(2:r,3);%讀取處理後site2的波段值

plot(x,y,'-or',x,y1,'-*b');legend('實際值','計算值')

end

看了下圖,擬合效果很不錯啊

MATLAB 曲線擬合

x0.1 0.20.15 0.0 0.2 0.3y 0.95 0.84 0.86 1.06 1.50 0.72 函式功能多項式的擬合運算 呼叫方法polyfit x,y,n x為橫座標,y為縱座標,n為擬合階數。例子x 0 0.1 2.5 1y erf x p polyfit x,y,6 p 0.0...

matlab 曲線擬合

在matlab中經常需要對資料進行曲線擬合,如最常見的多項式擬合,一般可以通過cftool呼叫曲線擬合工具 curve fit tool 通過圖形介面可以很方便的進行曲線擬合,但是有些時候也會遇到不方便用圖形工具。因此這裡簡單的記下兩種常用的擬合方法。1 多項式擬合 polyfit和polyval ...

Python曲線擬合

z1 np.polyfit x,y,5 用3次多項式擬合 p1 np.poly1d z1 print p1 在螢幕上列印擬合多項式 yvals p1 x 也可以使用yvals np.polyval z1,x plot1 plt.plot x,y,k.markersize 16,label origi...