1

データに適合させる必要がある次のカスタム関数があります。

function y=reflectometriaRC(x,v0,t0,v1,t1,v2,v3,tau)

y=zeros(size(x));

for i=1:length(x)
    if x(i)<t0,
        y(i)=v0;
    elseif x(i)<t0+t1,
        y(i)=v1;
    else
        y(i)=v2+v3*(1-exp(-(x(i)-(t0+t1))/tau));
    end
end
end

この関数の例を次の図に示します。

ここに画像の説明を入力

問題は、「フィット」機能を適切に機能させるための正しいオプションが見つからないことです。

私はこのようなことを試しました:

x=transpose([0:200*10^-12:1200*10^-9]);
y=reflectometriaRC(x,0,100*10^-9,0.98,100*10^-9,0,1.96,250*10^-9);
ft = fittype('reflectometriaRC(x,v0,t0,v1,t1,v2,v3,tau)');
f = fit( x, y, ft,'Robust','on', 'MaxFunEvals',600000,'MaxIter',400000000, 'StartPoint', [0, 0, 0.5, 0, 0,0, 0], 'Lower',[0, 0, 0.5, 0, 0,0, 0]  );
coeffvalues(f)

しかし、結果はある種の階段関数にすぎません。

フィッティングを機能させるための適切な構成は何ですか?


このコードのアイデアは、基本的な TDR のようなパルス発生器で使用されるオシロスコープから測定値を取得することです。1m の同軸線の端にある RC 回路の被試験デバイス。上のリンクの画像は、秒とボルトで可能な値のスケールです。

4

1 に答える 1

1

一般に、制約の少ないデータにマルチパラメーター モデルを当てはめるのは難しい問題です。最終的には、マルコフ連鎖モンテカルロ アプローチを使用するなど、より洗練されたアプローチを使用する必要がある場合があります。これには、グローバル エラーの最小値に収束することが保証されるという利点があります (予測可能な時間ではありませんが)。

別のフィッティング アルゴリズムを使用してみましたか? 統計ツールボックスにアクセスできる場合は、 を試してくださいdoc nlinfit。この関数は、Levenberg-Marquardt アルゴリズムまたは反復再重み付け最小二乗アルゴリズムのいずれかを使用できます。さらに、当てはめたパラメーターの信頼区間を比較的簡単に取得できるため、当てはめの程度がよくわかります。

fit があまりうまくいかない理由は、デフォルトで、極小値に陥りやすい勾配降下法に依存する Levenberg-Marquardt アルゴリズムを使用するためです。したがって、公平を期すために nlinfit ですが、もう少し制御できます。

まず、関数を少し再定義します。

function y=reflectometriaRC(b, x)
%The function to fit; inputs: b, a vector of parameters, and x, 
%the independent variable (e.g. time)
v0=b(1);
t0=b(2);
v1=b(3);
t1=b(4);
v2=b(5);
v3=b(6);
tau=b(7);

y=zeros(size(x));

for i=1:length(x)
    if x(i)<t0,
        y(i)=v0;
    elseif x(i)<t0+t1,
        y(i)=v1;
    else
        y(i)=v2+v3*(1-exp(-(x(i)-(t0+t1))/tau));
    end
end
end

次に、スクリプトで次のようにします。

opts = statset('nlinfit');
opts.RobustWgtFun = 'bisquare';
beta0= [0, 0, 0.5, 0, 0,0, 0];
params=nlinfit(x, y, @reflectometricaRC, beta0,opts);

これにより、実際のパラメータに比較的近いパラメータが返されます。数値的には、4 つのうち 3 つが同一 (ゼロ) で、その他は 2 倍以内ですが、適合はまだ大きくありません。おそらくbeta0、使用されているエラー モデルである をいじる必要があるか、または -- 私のアドバイス -- より多くの計算時間を使用MCMCアプローチを使用する必要があります。これは、高次元モデルを適合させるときに私が使用するものです。

それが役立つことを願っています!

于 2014-06-25T09:18:20.000 に答える