一般線形制約条件
NLFitダイアログのコードタブにある線形制約を使うチェックボックスにチェックが付いているとき、一般線形制約条件を使って、パラメータを強制的に制約を付けることができます。線形制約は、同じタブの制約ボックスまたはフィット関数オーガナイザダイアログ内で定義することができます。
Note:一般線形制約条件は明確なフィット関数でのみ、利用できます。 |
一般的な表記
線形制約を作成するには、パラメータ名、算術演算子、関係演算子を使います。5つの関係演算子( =, <, <=, >, >=)がサポートされています。曲線フィットは、"<" と "<=" を同じものとして扱います。同様に、">" と "=>" も違いがありません。
以下は、線形制約のいくつか簡単なサンプルです。(a, b, c, d はパラメータです。):
a > b;
a + 2 * b >= c * 2 ? d;
a < b < c;
a / 3 < 9;
複製フィットが使われている場合、曲線フィットが入力データの複数ピークに実行されます。このような場合、線形制約を定義するとき、"ParaName__n" 表記(アンダスコア2つ)を使って、n番目のピークのParaName という名前のパラメータを参照します。例えば、"w__1"と"w__2"は、それぞれ1番目と2番目の w パラメータを参照します。2番目のピークの幅が1番目のピークの幅より大きいという制約を付けるには、次のような線形制約を書きます。
w__1 > w__2;
グローバルフィットを実行するとき、"ParaName_n" 表記(アンダスコア1つ)を使って、n番目のデータセットのParaName という名前のパラメータを参照します。
線形制約の定義が複数行のとき、行をセミコロンで区切ります。次のように1つの制約条件に複数の演算子を使うことができます。例えば
4 < a < b < 6;
これは、次と同じです。
4 < a; a < b; b < 6;
線形制約で数値に割り当てる変数を使うこともできます。例えば、関数に2つのパラメータ P1 と P2 がある場合、次のように制約を定義することができます。
P1+qw*P2,
そして、前もって qw を2.5のような数値にセットすることができます。
非線形の制約はサポートしていません。そのため、次のような非線形の制約は動作しません。
a^2 > c;
a * b > 3;
1 / b > c + 3;
sin(a) < c;
境界は、フィットパラメータの値に制限を設定することができます。境界と線形制約の両方を使用するとき、線形制約の優先順位が高くなります。
拡張表記
一般線形制約条件の表記は、Origin 8.1 SR3で拡張され、特殊なケースをサポートするようになりました。これらの表記は、パラメータ「family」を表すことができるため、複製フィットで役に立ちます。
パラメータの初期値の表記
(i) を使って、パラメータの初期値を参照できます。例えば、xc__2(i) は、パラメータ xc__2の初期値ということです。そのため、xc__2のパラメータ値に初期値から0.3以上派生しないように制限を付けるには、次の制約条件を使います。
xc__2(i)-xc__2 <= 0.3;
xc__2-xc__2(i) <= 0.3;
パラメータグループの表記
(a) を使って、グループのすべてのパラメータを示すことができます。すべての振幅パラメータ(A)を1より小さくしたければ、次の制約を使います。
A(a) < 1;
特定の1つを除く、すべてのパラメータの表記
(e)を使うと、(e)が付いているパラメータを除いてグループのすべてのパラメータを示します。以下のサンプルは、振幅A__3は、少なくとも他のすべての振幅パラメータの2倍の大きさがあるということを指定します。
A__3 >= 2*A__3(e);
1つの制約の中では、1つの(e)しか使うことができません。また、1つの一般線形制約ダイアログで、 (a) と (e)の両方を使うことはできません。
組合せて利用する
(e)と(a)のシンタックスは、 (i)シンタックスで使うことができます。次の制約はピークの中心がその初期値より0.2以上離れないように指定しています。
xc(ia) - xc(a) <= 0.2;
xc(a) - xc(ia) <= 0.2;
複製の使用/インデックスのセット
(n) を使って、パラメータファミリーの順序を表します。例えば、以下の条件を付けたい場合:
w > w__2;
w__2 > w__3;
w__3 > w__4;
w__4 > w__5;
次の制約を使うことができます。
w(n) > w(n+1), n=1..5;
また、次のような例もあります。
w(2*n-1) < w(2*n), n=1..10;
これは、次と同じです。
w < w__2; w__3 < w__4; w__5 < w__6; w__7 < w__8; w__9 < w__10;
|