0

指数関数に適合するデータがあります。データは 3 ~ 4 個のピークを持つスペクトルです。これらのピークのテールに指数関数を当てはめたいです。しかし、f=fit(X,Y,'exp1'); を使用すると、matlab はスペクトルの選択された領域ではなく、スペクトル全体の曲線に適合します。これは、選択した領域が X 軸のゼロにないためだと思います (ginput コマンドを使用して領域を選択し、それを分割してカーブ フィットを行います)。したがって、私が理解している限り、Matlab は x 軸のゼロからプロットしており、そのように間違いを犯しています。これを取り除き、指数関数でフィッティングされたデータの選択された領域を取得するにはどうすればよいですか? %%ファイルを読み込んでスペクトルをプロットするには

function DA13_07_09;

cdir='\\ST-Computer\data\clusters\';

LsTimes=[0, 29906, 129892, 229878];
ScList.t0_us=LsTimes-3000;
ScList.t0_us(1)=0;
ScList.BinW_us=  [100  , 200    , 200     , 200     ];
ScList.tf_us=LsTimes+10E+3; ScList.tf_us(1)=1E+6;

fname='Xe6_550nm_0030';
rf=0;
if rf
F=ReadMSFile2([cdir, fname, '.dat'], ScList);
eval (['save ', fname, ' F;']);
else
eval (['load ', fname]);
end;
pf=1;
if pf
figure(1); clf;
semilogy(F.data{1}.tt_us/1e+3, F.data{1}.yy_counts, '.-');
PrepFig(1, 'time after injection (ms)', 'counts', fname);

AL=round(min([length(F.data{2}.tt_us), length(F.data{3}.tt_us), length(F.data{4}.tt_us)])*2/3);
tsum=F.data{2}.tt_us(1:AL)-LsTimes(2);
ysum=F.data{2}.yy_counts(1:AL)+F.data{3}.yy_counts(1:AL)+F.data{4}.yy_counts(1:AL);

figure(2); clf;
semilogy(F.data{2}.tt_us-LsTimes(2), F.data{2}.yy_counts, '-', ...
    F.data{3}.tt_us-LsTimes(3), F.data{3}.yy_counts, '-', ...
    F.data{4}.tt_us-LsTimes(4), F.data{4}.yy_counts, '-', ...
    tsum, ysum, '-');
legend({'29 ms', '129 ms', '229 ms', 'sum'});
PrepFig(2, 'time after laser (\mus)', 'counts', fname);
end;

%% To plot and fit the curve
A=F.data{1}.tt_us/1e+3;
B=F.data{1}.yy_counts;
[xclick, yclick]=ginput(2);
tIndex=find(A>=xclick(1,1)&A<=xclick(2,1));
t1=(A(tIndex))';
C1=(log(B(tIndex)))';

f=fit(t1,C1,'exp1');
figure(3);
plot(f,t1,C1)
4

1 に答える 1