Go to the first, previous, next, last section, table of contents.


標準非線形モデル(Standard Nonlinear Models)

a F コマンドは、線形や多項式近似のほかにも何種類ものモデルが扱えます。 標準的なモデルにはワンタッチキーが用意されています。 それ以外は、手動で数式を打込む必要があります。

次は、a F が認識するワンタッチ標準モデルの完全なリストです。

1
a + b x + c y + d z 線形または多変量線形。
2-9
a + b x + c x^2 + d x^3 n次多項式。
e
a exp(b x) exp(c y) エクスポネンシャル。
E
a 10^(b x) 10^(c y) 10 を底とするエクスポネンシャル。
x
exp(a + b x + c y) エクスポネンシャル(eの別表記)。
X
10^(a + b x + c y) 10 を底とするエクスポネンシャル(Eの別表記)。
l
a + b ln(x) + c ln(y) 自然対数。
L
a + b log10(x) + c log10(y) 常用対数。
^
a b^x c^y 一般的な指数関数。
p
a x^b y^c べき乗。
q
a + b (x-c)^2 + d (x-e)^2 二次式。
g
(a / b sqrt(2π)) exp(-0.5*((x-c)/b)^2) ガウス関数。

これらモデルは、モデル入力時に適切なキーを叩き、 必要に応じて変数名を選ぶだけで、どれでも普通に使えます。 近似結果は上表の式の形式であり、パラメータは最適値に置換えられます。 (トレイルに置かれるベクトルからパラメータの値を読みとる方が楽かもしれません。)

ガウスとn次多項式(二次式含む)以外は多変量に対応しており、 独立変数の数を好きなだけ増やすことができます。 また組込みモデルでは、モデルキーの前に h をタイプすると、 上で a として示された定数または係数を 0 や 1 に置換することができます。

これらのモデルのいくつかは本質的に等価ですが、 パラメータの表現は少しずつ違うことに注意してください。 例えば、a b^x と他の 2種類の指数関数モデルは、 互いに代数的な書替え関係に有ります。 また、「2次式」モデルはパラメータ表現の異なる単なる2次多項式です。 問題に一番適するモデルを使ってください。

HP-28/48 電卓は、 LIN, LOG, EXP, PWR と呼ばれる 4種の曲線近似モデルをサポートしています。 これらは Calc の`a + b x', `a + b ln(x)', `a exp(b x)', `a x^b' にそれぞれ対応します。 いずれの場合も、a は HP-48 における"intercept(切片)"、 b は"slope(傾き)"に対応します。

-*- ちょっとひといき -*-

必要なモデルが上のリストに無い場合は、 モデル指定プロンプトのところで ' (アポストロフ・キー)を押し、 モデルとして任意の代数式を(例えば m x - b のように)手入力してください。 (どんなモデルでも可能・・・というわけではありません。 がしかし、詳細は次節を参照してください。)

モデルは y = m x + b のような方程式でもかまいません。 この場合、Calc はデータ行列の全ての行を対等に扱います。 ですからこのモデルの場合は、実質的に 2つのパラメータ(mb) および 2つの独立変数があって、`従属'変数はありません。 モデル方程式はわざわざ y = 形式で表現する必要はありません。 例えば、暗黙の線形方程式 a x + b y = 1 でも使えます。

モデルが入力されると、 Calc はモデルに現れる全変数のアルファベット順のリストを作ります。 これら変数名は、 デフォルトパラメータ群, 独立変数群, 従属変数の順で使用されます。 もし(方程式でなく)素の式を入力した場合、 Calc は従属変数が省略されて名前が必要ないと考えます。

例えば、もしモデル数式が変数 a,mu,sigma,t,x を使っていて、 かつデータ行列が(2つの独立変数を意味する)3つの行からなる場合、 Calc は a,mu,sigma をデフォルトパラメータに割り当て、 データ行をそれぞれ t および x とします。 もし素の式でなく方程式を入力したら、 Calc は a,mu をパラメータとし、 sigma,t,x を 3つの独立変数とします。

もちろん、プロンプトに対して何か異なった入力をすれば、 上記の選択を上書きすることができます。 いくつかの変数をリストに入れずに残しておけば、 それらの変数にストアされている(はずの)値は、 モデル中での定数として用いられます。 (パラメータや独立変数にストアされた値は、a F コマンドでは無視されます。) 独立変数だけをリストに入れた場合は、 残りの変数群は全てパラメータとして扱われます。

入力したモデルに $ 記号が存在する場合、 それらはパラメータとして機能し、 他のすべての変数は(アルファベット順で)独立変数となります。 ある1つのパラメータには $、 別のパラメータには $$、... というように使ってください。 従って、$ x + $$ は線形モデルを記述する別の方法と言えます。

もしモデルプロンプトに対して ' の代わりに $ をタイプした場合、 Calc はモデル式をスタックから取得します。 (そしてデータは 2番目のスタックレベルになくてはなりません。) 式中変数のどれが独立変数でどれがパラメータかのデフォルト設定には、 上記と同じルールが使われます。

スタックから取り出されるモデルは、 2, 3 の要素からなるベクトル、 [model, vars][model, vars, params] として表現しておく事も可能です。 varsparams のそれぞれはひとつの変数であっても、 複数の変数の並び(リスト)であってもかまいません。 (params が省略された場合は、 model に出現する変数群のうち、 vars にリストされてないものは全てパラメータと解釈されます。)

モデルを ' に続けて手動で入力した場合、 Calc はモデルを記述する 3つのベクトルをトレイルに残します。 ユーザーは望むなら、それを取戻すことができます。

-*- ちょっとひといき -*-

最後に、 モデルをあらかじめ Calc 変数 Model1Model2 にストアしておいて、 それから a F ua F U を(それぞれ)タイプすることによって、 このモデルを呼出して使うことができます。 この変数にストアする値には、 a F $ でスタックから取得する場合の書式が使えます。

-*- ちょっとひといき -*-

曲線近似を行う際に、 Calc は lnarcsin といった逆関数の主値を用います。 例えば、モデル `y = sin(a t + b)' を入力したとき、 Calc は実はより容易な書式 `arcsin(y) = a t + b' を使います。 arcsin 関数は常に、 -90〜90 度(またはラジアン単位で同等の区間)の範囲内の結果を返します。 ここにサインカーブのおよそ 3周期にまたがるデータがあるとしましょう。 するとサイン関数の引数は、ゼロから 3*360 度に及びます。 上記のモデルはサインカーブの周波数と位相を決定する良い方法のように見えますが、 実際には全然ダメです。 実際のモデル `arcsin(y) = a t + b' の右辺は t と共に単調増加しますが、 左辺は -90 と 90 の間で振動します。 ab にどんな値を入れても、 両辺をおよそ一致させることはできません。

今のところ、この問題の良い解決はありません。 上の問題が起こらないように(つまりサインカーブの頂点の両側にまたがらないように)、 データを小さな範囲に制限することはできます。 あるいはこの場合、フーリエ解析のような全く違う方法を使うことができましたが、 これは a F コマンドの範囲を越えています。 (残念ながら、今のところ Calc はフーリエ関連の変換機構を持っていません。)


Go to the first, previous, next, last section, table of contents.     利用度数