Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

カスタム線形近似

カスタム線形モデルについて

曲線近似アプリで、[カスタム式] 近似を使用して独自の線形方程式または非線形方程式を定義できます。カスタム式近似では非線形最小二乗近似の手順を使用します。

[カスタム式] でカスタム線形方程式を定義できます。ただし、非線形近似は線形最小二乗近似よりも効率が悪く、通常は時間がかかります。カスタム式の線形最小二乗近似が必要な場合は、代わりに [線形近似] を選択します。線形モデルは (おそらく非線形な) 項の線形結合です。これらはパラメーターについて線形である方程式で定義されます。

ヒント

カスタム式の線形最小二乗近似が必要な場合は、[線形近似] を選択します。方程式を一連の線形関数で表せるかわからない場合は、代わりに [カスタム式] を選択します。詳細は、カスタム式近似の対話的な選択を参照してください。

線形近似によるカスタム近似の対話的な選択

  1. 曲線近似アプリで [X データ] および [Y データ] リストから曲線データを選択します。[線形近似] は曲面用ではなく曲線用であるため、曲線データを選択すると、モデル タイプ リストに [線形近似] のみが表示されます。

    曲線近似アプリにより既定の多項式近似が作成されます。

  2. モデル タイプ リストでモデル タイプを [多項式] から [線形近似] に変更します。

    リストから [線形近似] を選択すると、式の例が表示されます。

  3. x および y を有効な任意の変数名に変更できます。

  4. 下のボックスに式の例が表示されます。[編集] をクリックして [カスタム線形項の編集] ダイアログ ボックスで項の例を変更し、独自の方程式を定義します。

例については、曲線近似アプリでのカスタム線形ルジャンドル多項式による近似を参照してください。

コマンド ラインでの線形近似の選択

線形近似アルゴリズムを使用するには、モデル項の cell 配列を関数 fit または fittype への入力として指定します。項の式には係数を含めないでください。定数項がある場合は、cell 配列内で対応する式として '1' を使用します。

次の形式の線形モデルを指定する方法は次のとおりです。

 coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...
ここで、term1term2 などはいずれも係数を含みません。文字列の cell 配列として、係数を含めずに各項を次のように指定します。
LinearModelTerms = {'term1', 'term2', 'term3', ... }

  1. fittype に入力する必要がある線形モデルの項を特定します。たとえば、次のモデルを考えます。

    a*log(x) + b*x + c
    これは ab および c について線形です。これには 3 つの項 log(x)x1 (c=c*1 であるため) があります。このモデルを指定するには、項の cell 配列 LinearModelTerms = {'log(x)','x','1'} を使用します。

  2. 線形モデルの項の cell 配列を関数 fittype への入力として使用します。

    linearfittype = fittype({'log(x)','x','1'})
    linearfittype = 
    
         Linear model:
         linearfittype(a,b,c,x) = a*log(x) + b*x + c

  3. データを読み込み、fittype を関数 fit への入力として使用します。

    load census
    f = fit(cdate,pop,linearfittype)
    f = 
    
         Linear model:
         f(x) = a*log(x) + b*x + c
         Coefficients (with 95% confidence bounds):
           a =  -4.663e+04  (-4.973e+04, -4.352e+04)
           b =        25.9  (24.26, 27.55)
           c =   3.029e+05  (2.826e+05, 3.232e+05)
    または、線形モデルの項の cell 配列を関数 fit への入力として指定することもできます。
    f = fit(x,z,{'log(x)','x','1'})

  4. 近似とデータをプロットします。

    plot(f,cdate,pop)

例については、コマンド ラインでのカスタム線形ルジャンドル多項式による近似を参照してください。

カスタム線形ルジャンドル多項式による近似

曲線近似アプリでのカスタム線形ルジャンドル多項式による近似

この例では、いくつかのカスタム線形方程式を使用してデータに当てはめる方法を示します。データは生成済みで、核反応 12C(e,e'α)8Be に基づいています。方程式はルジャンドル多項式の項の和を使用します。

124 MeV の電子が 12C の原子核から散乱する実験を考えます。これに続く反応で、アルファ粒子が放出されて残留核 8Be が生成されます。放出されるアルファ粒子の数を角度の関数として解析することにより、12C の原子核ダイナミクスに関する特定の情報を推測できます。反応運動を次に示します。

データは、半導体検出器を配置して Θα の値が 10o から 240o の範囲で 10o 刻みで収集しています。

ルジャンドル多項式の変数を角度の関数で表すと便利な場合があります。

y(x)=n=0anPn(x)

ここで、Pn(x) は n 次のルジャンドル多項式、x は cos(Θα)、an は近似の係数です。ルジャンドル多項式の導出の詳細については、関数 legendre を参照してください。

アルファ線放出データの場合、理論モデルを使用して係数と原子核ダイナミクスを直接関連付けることができます。さらに、理論モデルから、上に示した無限和についての制約が導かれます。特に、反応の角運動量を考慮すると、データは偶数項のみの 4 次ルジャンドル多項式で効果的に記述されます。

ルジャンドル多項式は次のロドリゲスの公式を使用して導出できます。

Pn(x)=12nn!(ddx)n(x21)n

4 次までのルジャンドル多項式

n

Pn(x)

0

1

1

x

2

(1/2)(3x2– 1)

3

(1/2)(5x3 – 3x)

4

(1/8)(35x4 – 30x2 + 3)

この例では、偶数項のみの 4 次ルジャンドル多項式を使用してデータに当てはめる方法を示します。

y1(x)=a0+a2(12)(3x21)+a4(18)(35x430x2+3)

  1. 次を入力して、12C のアルファ線放出データを読み込みます。

    load carbon12alpha
    

    このとき、ワークスペースには 2 つの新しい変数が含まれています。

    • angle は角度のベクトル (ラジアン単位) であり、10o から 240o の範囲を 10o 刻みで変化します。

    • counts は、angle の放出角度に対応する生のアルファ粒子数のベクトルです。

  2. 次を入力し、曲線近似アプリを開きます。

    cftool

  3. 曲線近似アプリで、[X データ] および [Y データ]angle および counts を選択し、これらの 2 つの変数についての既定の多項式近似を作成します。

  4. 近似タイプを [多項式] から [線形近似] に変更し、既定のカスタム線形近似を作成します。

    [カスタム式] 近似タイプの代わりに [線形近似] を使用します。これは、ルジャンドル多項式が予測子変数と定数のみに依存するためです。このモデルに指定する方程式は y1(x) (つまり、この手順の最初に示した方程式) です。angle はラジアン単位で与えられるため、ルジャンドル項の引数は cos(Θα) となります。

  5. [編集] をクリックし、[カスタム線形項の編集] ダイアログ ボックスで方程式の項を変更します。

    1. [係数] の名前を a2a4 および a0 に変更します。

    2. a2[項] を次のように変更します。

      (1/2)*(3*cos(x)^2-1)

      項を編集すると、曲線近似アプリにより近似が更新されます。

    3. a4[項] を次のように変更します。

      (1/8)*(35*cos(x)^4-30*cos(x)^2+3)

      曲線近似アプリに近似が表示されます。

  • [近似名]Leg4Even に変更します。

  • [表示][残差プロット] を選択して残差を表示します。

    この近似はデータ トレンドにうまく従っているように見えます。一方、残差は一見ランダムに分布しており、体系的な振る舞いは見られません。

  • [結果] ペインで数値的な近似結果を検証します。各係数値とかっこ内の信頼限界を確認します。95% 信頼限界は、a0(x) および a4(x) に関連する係数はかなり正確に求められたが、係数 a2(x) は比較的大きな不確定性をもつことを示しています。

  • [近似][Leg4Even を複製] を選択し、前のルジャンドル多項式を変更するためにコピーを作成します。

    複製された近似が新しいタブに表示されます。

    アルファ線放出データは偶数項のみの 4 次ルジャンドル多項式によって最も適切に記述されるという理論的議論を確認するために、次に偶数項と奇数項の両方を使用してデータに当てはめます。

    y2(x)=y1(x)+a1x+a3(12)(5x33x)

  • 新しい近似の名前を Leg4EvenOdd に変更します。

  • [編集] をクリックして方程式の項を変更します。[カスタム線形項の編集] ダイアログ ボックスが開きます。

    次のように項を編集し、y2(x) で与えられるモデルにより近似します。

    1. [+] ボタンをクリックして項を 2 つ追加し、奇数次のルジャンドル項を追加します。

    2. 新しい係数名を a1 および a3 に変更します。

    3. a1[項] を次のように変更します。

      cos(x)

    4. a3[項] を次のように変更します。

      pro(1/2)*(5*cos(x)^3-3*cos(x))

  • 曲線近似アプリにプロットされた新しい近似を観察し、[結果] ペインの数値結果を調べます。

    奇数項のルジャンドル係数 (a1 および a3) は、値が小さく信頼限界にゼロが含まれているため、近似を簡略化するために削除できる候補であると考えられます。この結果は、奇数次のルジャンドル項は近似にあまり寄与せず、偶数次のルジャンドル項は前の近似と基本的に変わらないことを示しています。これにより、近似 Leg4Even での最初のモデル選択が最適であることが確認されます。

  • 近似を左右に並べて比較するには、[左/右] タイルを選択します。曲線近似アプリの [表示] メニューを使用して、近似設定と結果のペインを非表示にするとプロットのみを表示できます。

コマンド ラインでのカスタム線形ルジャンドル多項式による近似

曲線近似アプリで作成したものと同じモデルを使用してコマンド ラインで近似します。

  1. 線形近似アルゴリズムを使用するには、モデル項の cell 配列を関数 fittype への入力として指定します。曲線近似アプリで近似 Leg4Even に入力したものと同じ [項] を使用します。係数は指定しないでください。

    linearft = fittype({'(1/2)*(3*cos(x)^2-1)', ...
    '(1/8)*(35*cos(x)^4-30*cos(x)^2+3)','1'})
    linearft = 
    
         Linear model:
         linearft(a,b,c,x) = a*((1/2)*(3*cos(x)^2-1))...
           + b*((1/8)*(35*cos(x)^4-30*cos(x)^2+3)) + c

  2. 変数 angle および counts をワークスペースに読み込みます。

    load carbon12alpha

  3. fittype を関数 fit への入力として使用し、ワークスペースの変数 angle および counts を指定します。

    f = fit(angle, counts, linearft)
    f = 
    
         Linear model:
         f(x) = a*((1/2)*(3*cos(x)^2-1))...
         + b*((1/8)*(35*cos(x)^4-30*cos(x)^2+3)) + c
         Coefficients (with 95% confidence bounds):
           a =       23.86  (4.436, 43.29)
           b =       201.9  (180.2, 223.6)
           c =       102.9  (93.21, 112.5)

  4. 近似とデータをプロットします。

    plot(f, angle, counts)

線形モデル項の詳細については、関数 fittype を参照してください。