Statistics[NonlinearFit](Matrix Form) - 非線形モデル関数をデータに当てはめる
使い方
NonlinearFit(m, f, XY, options)
パラメータ
m - 正の整数 ; モデルパラメータの数
f - 手続き ; 行列形式のモデル関数
XY - 行列 ; 独立変数と従変数の値
options - ( オプション ) option を initialvalues, modelfunctiongradient, output および parameterranges の一つとした option=value 形式の等式 (s) ; NonlinearFit コマンドのための指定
|
説明
|
|
•
|
NonlinearFit コマンドはモデルパラメータに関して非線形なモデル関数を最小二乗誤差を最小とすることでデータに当てはめます。モデル関数が線形である場合は、Statistics[LinearFit] コマンドの使用を推奨します。誤差は局所的な場所で最小限に評価されます。; 下記の注意をご参照ください。
|
•
|
y を従変数、f を n 個の独立変数 x_1, x_2, ..., x_n と m個のモデルパラメータ a_1, a_2, ..., a_m のモデル関数としたモデル y = f(x_1, x_2, ..., x_n; a_1, a_2, ... a_m) を考えます。各データ点を (x_1, x_2, ..., x_n, y) に対する数値の (n+1)-組 とした k 個のデータ点を与えると、NonlinearFit コマンドは二乗残差が最小となる k の和となるモデルパラメータの値を求めます。i 番目の残差は i 番目のデータ点での y - f(x_1, x_2, ..., x_n; a_1, a_1, ..., a_m) 評価の値となります。
|
•
|
最初のパラメータ m はモデルパラメータの数となります。二番目のパラメータ f はモデル関数で表記された手続きとなります。この手続きは、p をモデルパラメータが保有する値を m とした m 次元の入力パラメータのベクトルとし、v を下記の XY パラメータと同様な形式を持つ行列とし、i を 1...k なる整数形式としたときの、形式 proc(p, v, i) を持つ手続きとなります。手続きはデータ点 i の残差と等しい単独の浮動小数点の値を返します。
|
•
|
三つ目のパラメータ XY は、最初の n 列の独立変数の値と、後に続く最後の列の従変数の値を含む行列となります。行列の i 行には n 個の独立変数と従変数の i 番目のデータ点の値が含まれています。
|
•
|
標準的な NonlinearFit の列の呼び出しとは似つかず、呼び出された行列形式の列は weights オプションを受け入れません。代わりに、荷重の列は、XY データ行列と設定した荷重を含む残差の計算で調整された手続き f を追加することができます。
|
|
|
オプション
|
|
•
|
initialvalues = Vector(realcons) -- パラメータの初期値を設定します。
|
modelfunctiongradient = list(procedure)
|
手続きのリストとしてモデル関数の勾配を指定します。j 番目の手続きは、与えられたデータ点での j 番目のパラメータを含むモデル関数の導関数を計算します。各手続きの形式は、上記の残差に必要なものと同様の形式となります。
|
•
|
output = name あるいは string -- 解の形式を指定します。output オプションは名前 solutionmodule の値、あるいは以下の名前 ( あるいはそれらの名前のリスト ) のいずれか一つをとることができます。: degreesoffreedom, parametervalues, parametervector, residuals, residualmeansquare, residualstandarddeviation, residualsumofsquares. 詳細は Statistics/Regression/Solution をご参照ください。
|
•
|
parameterranges = [Vector, Vector] -- 各パラメータが二個の m 次元のベクトルとして許される区間を指定します。一つ目はパラメータの下界を含み、二つ目は上界を含んでいます。
|
|
|
注意
|
|
•
|
NonlinearFit コマンドは、数値アルゴリズム群 (NAG) により設定された内部のライブラリによって、様々な計算法が使用される Optimization[LSSolve] コマンドの行列形式版を期待しています。更なる詳細は Optimization[LSSolveMatrixForm] のヘルプページで利用可能となります。そのページに記載された追加オプションは NonlinearFit コマンドを設定することができ、直接 LSSolve コマンドを通すことになるかもしれません。
|
•
|
Optimization[LSSolve] コマンドは非線形の最小二乗問題の局所的な解のみを計算します。NonlinearFit で返されたパラメータの値は、局所的な二乗残差の和を最小にします。使用者は initialvalues オプションに使用するパラメータの初期値を設定することを極めて推奨いたします。
|
•
|
使用者が parameterranges オプションを用いてパラメータの範囲を設定した場合、このソルバーに対し、使用者は modelfunctiongradient オプションを用いて計算する勾配 ( 注意として勾配は、入力に代数形式と演算子形式を含んだ状態で、Maple では自動的に計算されます。しかしながら手続きは、行列形式を含んで、手続きを明白に設定しなければなりません。 ) の手続きを設定することを強く推奨します。
|
•
|
最小二乗問題を解かれた場合の更なる詳細を得るには infolevel[Statistics] を 1 以上に設定してください。Optimization ソルバーの発展に関する詳細を得るには infolevel[Optimization] を 1 以上に設定してください。
|
|
|
例
|
|
下記では、モデル関数は、x が a, b, および c をモデルパラメータとした独立変数であるときに a+b*x+exp(c*x) となります。
>
|
XY := Matrix([[1.0, 2.2], [2.0, 3.0], [3.0, 4.8], [4.0, 10.2], [5.0, 24.5],
[6.0, 75.0]], datatype=float):
f := proc(p, v, i) p[1]+p[2]*v[i,1]+exp(p[3]*v[i,1])-v[i,2] end proc:
NonlinearFit(3, f, XY);
|
| (4.1) |
荷重付けされている問題を解くには、データ行列に残差の計算のための手続きを適用した荷重の列を加えてください。
>
|
XYweighted := Matrix([[1.0, 2.2, 1.0], [2.0, 3.0, 1.0], [3.0, 4.8, 1.0],
[4.0, 10.2, 2.0], [5.0, 24.5, 2.0], [6.0, 75.0, 3.0]], datatype=float):
fweighted := proc(p, v, i) v[i,3]*(p[1]+p[2]*v[i,1]+exp(p[3]*v[i,1])-v[i,2])
end proc:
NonlinearFit(3, fweighted, XYweighted);
|
| (4.2) |
|
|