Main Content

カスタム モデル

カスタム モデルとライブラリ モデル

必要なパラメトリック方程式が Curve Fitting Toolbox™ ライブラリに含まれていない場合は、独自のカスタム式を作成することができます。ただし、ライブラリ モデルを使用すると収束が速いという利点があります。これは、以下の理由によります。

  • 大部分のライブラリ モデルでは、最適な既定の係数開始点が計算されます。カスタム モデルの場合、区間 [0,1] でランダムな既定の開始点が選択されます。カスタム モデルの適切な開始点を見つける必要があります。

  • ライブラリ モデルでは解析的なヤコビアンを使用します。カスタム モデルでは有限差分を使用します。

線形近似と非線形近似

カスタム式近似タイプを使用してカスタムの一般方程式を作成できます。一般モデルは (おそらく非線形な) 項の非線形結合です。これらはパラメーターについて非線形である場合がある方程式で定義されます。カスタム式近似では非線形最小二乗近似の手順を使用します。

カスタム式近似タイプを使用してカスタム線形方程式を定義できます。ただし、非線形近似は線形最小二乗近似よりも効率が悪く、通常は時間がかかります。

  • 方程式を一連の線形関数で表せるかわからない場合は、[カスタム式] を選択します。適切な開始点を探す必要がある場合があります。

  • カスタム式の線形最小二乗近似が必要な場合は、代わりに [線形近似] モデル タイプを選択します。詳細については、カスタム線形近似を参照してください。

カスタム式近似の対話的な選択

曲線フィッター アプリで、[曲線フィッター] タブの [近似タイプ] セクションにある矢印をクリックしてギャラリーを開きます。近似ギャラリーで、[カスタム] グループの [カスタム式] をクリックします。

[近似オプション] ペインで、カスタム式近似を使用して独自の方程式を定義します。[カスタム式] をクリックすると、カスタム式の例が表示されます。以下の図は曲線データの場合です。

Default custom equation for a curve fit

曲面データの場合、カスタム式の例は xy の両方を使用します。

Default custom equation for a surface fit

  1. xyz を編集して有効な任意の変数名に変更できます。

  2. 下のボックスで、例を編集して独自のカスタム式を定義します。独自の変数名を使用した有効な MATLAB® 式を入力できます。関数名またはスクリプト名を指定できます (曲線フィッター アプリでのファイルで定義された曲線による近似を参照)。

  3. 開始点または範囲を指定する場合は、[詳細オプション] をクリックします。既定の設定では、開始値は区間 [0,1] の間でランダムに選択され制約がありません。適切な開始点および範囲を探す必要がある場合があります。例については、ENSO データのカスタム非線形解析を参照してください。

    近似オプションを設定し、その他の近似設定を変更すると、可能な場合は下限、上限、開始点の選択がアプリに記憶されます。カスタム式の場合、曲線フィッター アプリは常にユーザーの値を記憶します。ただし、多くのライブラリ モデルでは、近似設定を変更すると開始点または下限の新しい最適な値が自動的に計算されます。

保存済みの曲線フィッター アプリ セッションの一部としてカスタム式を保存できます。

関数は、近似および近似の前処理の間に何度も実行される可能性があります。データをファイルに書き込む、診断情報をコマンド ウィンドウに表示するなどの副次的な影響をもつ関数を使用する場合、時間がかかる可能性があることに注意してください。

以下の例を参照してください。

曲線フィッター アプリでのファイルで定義された曲線による近似

この例では、曲線フィッター アプリで近似モデルとして関数名またはスクリプト名を指定する方法を示します。ファイルに関数を定義し、それを使用して曲線で近似します。

  1. 関数を MATLAB ファイルに定義します。

    function y = piecewiseLine(x,a,b,c,d,k)
    % PIECEWISELINE   A line made of two pieces
    % that is not continuous.
    
    y = zeros(size(x));
    
    % This example includes a for-loop and if statement
    % purely for example purposes.
    for i = 1:length(x)
        if x(i) < k
            y(i) = a + b.* x(i);
        else
            y(i) = c + d.* x(i);
        end
    end
    end

    MATLAB パス上にファイルを保存します。

  2. データを定義し、曲線フィッター アプリを開きます。

    x = [0.81;0.91;0.13;0.91;0.63;0.098;0.28;0.55; ...
        0.96;0.96;0.16;0.97;0.96];
    y = [0.17;0.12;0.16;0.0035;0.37;0.082;0.34;0.56; ...
        0.15;-0.046;0.17;-0.091;-0.071];
    
    curveFitter
  3. 曲線フィッター アプリ内の [曲線フィッター] タブで、[データ] セクションの [データの選択] をクリックします。[近似データの選択] ダイアログ ボックスで、[X データ] および [Y データ] のリスト内で、それぞれ x および y を選択します。近似名として Piecewise Function を入力します。

  4. 自分で定義した関数 piecewiseLine を曲線フィッター アプリで使用します。[曲線フィッター] タブの [近似タイプ] セクションで、矢印をクリックしてギャラリーを開きます。近似ギャラリーで、[カスタム] グループの [カスタム式] をクリックします。[近似オプション] ペインで、カスタム式のテキスト ボックスに関数の式を入力します。この関数は、x データといくつかの近似用パラメーターを取ります。

    piecewiseLine(x,a,b,c,d,k)

    曲線フィッター アプリにより、関数を使用して近似が作成されます。

Custom equation using piecewise line function

ヒント

コマンド ラインで同じ関数を使用して近似する場合は、同じ式を fittype への入力として使用してから、fittypefit への入力として使用します。

ft = fittype("piecewiseLine(x,a,b,c,d,k)");
f = fit(x,y,ft)
他の例については、関数 fit を参照してください。

コマンド ラインでのカスタム式近似の選択

カスタム モデルで近似するには、次のいずれかを行います。

  • カスタム モデルを関数 fitfitType 入力引数に指定します。MATLAB 式 (任意の .m ファイルを含む)、線形モデル項の cell 配列もしくは string 配列、または無名関数を使用できます。

  • 関数 fittype を使用して fittype オブジェクトを作成し、関数 fit の入力引数として使用します。

この例では、データを読み込み、ワイブル モデルを定義するカスタム式を関数 fit への入力として使用します。

time = [ 0.1;  0.1;  0.3;  0.3;  1.3;  1.7;  2.1;  2.6;  3.9;  3.9; ...
         5.1;  5.6;  6.2;  6.4;  7.7;  8.1;  8.2;  8.9;  9.0;  9.5; ...
         9.6; 10.2; 10.3; 10.8; 11.2; 11.2; 11.2; 11.7; 12.1; 12.3; ...
        12.3; 13.1; 13.2; 13.4; 13.7; 14.0; 14.3; 15.4; 16.1; 16.1; ...
        16.4; 16.4; 16.7; 16.7; 17.5; 17.6; 18.1; 18.5; 19.3; 19.7;];
conc = [0.01; 0.08; 0.13; 0.16; 0.55; 0.90; 1.11; 1.62; 1.79; 1.59; ...
        1.83; 1.68; 2.09; 2.17; 2.66; 2.08; 2.26; 1.65; 1.70; 2.39; ...
        2.08; 2.02; 1.65; 1.96; 1.91; 1.30; 1.62; 1.57; 1.32; 1.56; ...
        1.36; 1.05; 1.29; 1.32; 1.20; 1.10; 0.88; 0.63; 0.69; 0.69; ...
        0.49; 0.53; 0.42; 0.48; 0.41; 0.27; 0.36; 0.33; 0.17; 0.20;];

f = fit(time,conc,"c*a*b*x^(b-1)*exp(-a*x^b)","StartPoint",[0.01 2 5])
plot(f,time,conc)

fittype を使用してカスタム モデルを定義するには、次の形式を使用します。

f = fittype(expr)
これにより、文字ベクトル、string スカラー、cell 配列、string 配列または無名関数 expr に含まれる MATLAB 式に対するカスタム モデルの fittype オブジェクトが構築されます。

以下の詳細については、fittype のリファレンス ページを参照してください。

  • fittype を使用した従属変数と独立変数、問題のパラメーター、係数の指定。

  • カスタム式の線形近似アルゴリズムを使用するための項の cell 配列または string 配列の指定。expr が文字列または無名関数の場合、非線形近似アルゴリズムが使用されます。

    線形近似の詳細については、コマンド ラインでの線形近似の選択を参照してください。

  • 線形および非線形カスタム モデルの例。

詳しい手順の例については、国勢調査のカスタム非線形近似を参照してください。