a F コマンドは、線形や多項式近似のほかにも何種類ものモデルが扱えます。 標準的なモデルにはワンタッチキーが用意されています。 それ以外は、手動で数式を打込む必要があります。
次は、a F が認識するワンタッチ標準モデルの完全なリストです。
これらモデルは、モデル入力時に適切なキーを叩き、 必要に応じて変数名を選ぶだけで、どれでも普通に使えます。 近似結果は上表の式の形式であり、パラメータは最適値に置換えられます。 (トレイルに置かれるベクトルからパラメータの値を読みとる方が楽かもしれません。)
ガウスと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つのパラメータ(m と b) および 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] として表現しておく事も可能です。 vars と params のそれぞれはひとつの変数であっても、 複数の変数の並び(リスト)であってもかまいません。 (params が省略された場合は、 model に出現する変数群のうち、 vars にリストされてないものは全てパラメータと解釈されます。)
モデルを ' に続けて手動で入力した場合、 Calc はモデルを記述する 3つのベクトルをトレイルに残します。 ユーザーは望むなら、それを取戻すことができます。
-*- ちょっとひといき -*-
最後に、
モデルをあらかじめ Calc 変数 Model1
や Model2
にストアしておいて、
それから a F u や a F U を(それぞれ)タイプすることによって、
このモデルを呼出して使うことができます。
この変数にストアする値には、
a F $ でスタックから取得する場合の書式が使えます。
-*- ちょっとひといき -*-
曲線近似を行う際に、
Calc は ln
や arcsin
といった逆関数の主値を用います。
例えば、モデル `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 の間で振動します。
a と b にどんな値を入れても、
両辺をおよそ一致させることはできません。
今のところ、この問題の良い解決はありません。 上の問題が起こらないように(つまりサインカーブの頂点の両側にまたがらないように)、 データを小さな範囲に制限することはできます。 あるいはこの場合、フーリエ解析のような全く違う方法を使うことができましたが、 これは a F コマンドの範囲を越えています。 (残念ながら、今のところ Calc はフーリエ関連の変換機構を持っていません。)
Go to the first, previous, next, last section, table of contents.
利用度数