EQUATRAN-G - TRIAL -
ここに提示してあるのは、EQUATRAN-G の文法のエッセンスです。 このほかにユーザー関数機能などがあります。
・英字 A B C ... X Y Z a b c ... x y z _ ・数字 0 1 2 3 4 5 6 7 8 9 ・特殊文字 + - * / ^ = , . ; : <> ( ) [ ] % & | ! # $ ' ~ ・漢字、かな ( コメント文および変数の説明項のみ使用可 )
変数、ラベル、パラメータ、テーブルなどを区別する文字列。英字で始まる
8文字以内の英数字をつける。大文字と小文字は区別する。
ただし、次の予約語はシンボルとして用いることができない。
ALLI BREAK BY CALL CHANGE END EXTERNAL FIND FUNCTION GLOBAL INCLUDE
INITIAL INPUT INTEGRAL LOCAL MACRO MAXIMAIZE MAXLOOP MINIMIZE OUTPUT
OUTPUT1 OUTPUT2 REPEAT RESET REV STEP TABLE TREND UNDER UNTIL
VAR VARIABLE WHEN
2次元までの配列変数を使用でき、VARIABLE 文で定義しておく。 ↓変数定義
定数はすべて実定数として扱われる. 指数部は E を用いて表記する。
例 123 4.567 -5.12 -1.7012E38 794.26e-5
実数の範囲は 約 ±1.0e-307 〜 1.0e308
ソーステキスト、及びデータテキストは文の集まりで構成され、1つの式も1つの文を成す。
●継続
文が2行以上にわたるときは、前の文の最後に継続記号[ .. ] をつける. ただし、1つの文は最大 2000 文字まで。
例 p = -2.0 * x ^ 2 + 0.5 * x * y .. -0.8 * y ^ 2 + 4 * x - y
●マルチステートメント
文と文の間をセミコロン[ ; ] で区切ることで1行に2つ以上の文を書いてもよい。
例 z + 3 = y ; x = y - 2.1 * z ; y - x / 6 = z
ソーステキストやデータテキストに付けられる通し番号。
コンパイル時に各文に付けられる番号。 $ を頭に冠した3桁の数字(行番号)より成る。ソースリスト-1により各文と対応を取ることができる。
テキストの随所に /* と */ ではさんだコメントをいれることができる。ただしテキストの1行目はそのままプリント等の頭に出力されるので、
その問題のタイトルやコメントを書いておく。コメントには漢字やかなも使用できる。
方程式の記述は通常の数学的な記法に準じ、移項の必要はない。
・算術演算子 優先順に べき乗 [ ^ ] 乗算 [ * ] 除算 [ / ] 加算 [ + ] 減算 [ - ] 演算の実行順序を変更する時はカッコ ( ) を用いる. ・関係演算子 ↓論理演算 [ == ] [ != ] [ <] [> ] [ <= ] [>= ] ・論理演算子 ↓論理演算 優先順に [ ! ] [ & ] [ | ] 優先順序は 算術演算子、関係演算子、論理演算子の順である。
変数の微分は微分記号[ ' ] を使って y', y'' のように書く. y', y'' は y と は別個の変数となる。
被積分変数に初期値を与える。 例 y # 10
文を区別するのに使われるシンボル。コロン[ : ] を後ろにつけて文の前に置く。おもに RESET文で式を指定するのに使われる。
使用する変数はその名前とその属性 ( スカラー変数か配列変数か ) とを VARIABLE文によって定義しておく必要がある。ただし、スカラー変数は省略できる。 例 VARIABLE t = 28 "温度 [゜C]", dog(5) VAR c(10,20) GLOBAL VAR gc t ... スカラー変数 t = 28 は t に 28 を与える "温度 [゜C]" は説明項で、40文字以内で与える dog ... 要素数 5 の1次元の配列変数 dog(1) dog(2) ... dog(5) c ... 要素数 10 × 20 の2次元の配列変数 c(1,1) c(1,2) c(1,3) ・・・ c(1,20) c(2,1) c(2,2) c(2,3) ・・・ c(2,20) ・ ・ ・ ・ ・ ・ ・ ・ c(10,1) c(10,2) c(10,3) ・・・ c(10,20) GLOBAL を付けることで、大域変数を定義している。
配列変数は VARIABLE文によってあらかじめ定義しておく必要がある。 ↑変数定義
VAR a(3,2), b(5) と定義されている時 a(1,2) スカラー変数 b(2) 〃 添字の省略 a(2) ( a(2,1), a(2,2) ) 1次元の配列変数 〃 a(,2) ( a(1,2), a(2,2), a(3,2) ) 〃 [ . ] b(1.3.5) ( b(1), b(3), b(5) ) 〃 [ : ] b(2:4) ( b(2), b(3), b(4) ) 〃
a~ は配列変数 a を転置した要素数 2 × 3 の二次元の配列を表す。
a~(2,1) と a(1,2) は同じ変数をさす。
1次元 ( 0.125, 1.52, 3.81 )
2次元 ( 0.1, 0.2 )( 0.3, 0.5 )( 0.9, 1.2 )
VAR a(3), b(3), c(2,3), d(2,3) a - b ( a(1)-b(1), a(2)-b(2), a(3)-b(3) ) c * d | c(1,1)*d(1,1), c(1,2)*d(1,2), c(1,3)*d(1,3) | | c(2,1)*d(2,1), c(2,2)*d(2,2), c(2,3)*d(2,3) |
次元の異なる変数どうしの演算は、次元の低い方の変数を高い方の次元まで拡張して行われる。
VAR a(3), c(2,3), d(2,3), x a * x ( a(1)*x, a(2)*x, a(3)*x ) a - c | a(1)-c(1,1), a(2)-c(1,2), a(3)-c(1,3) | | a(1)-c(2,1), a(2)-c(2,2), a(3)-c(2,3) | c / d(2,1) | c(1,1)/d(2,1), c(1,2)/d(2,1), c(1,3)/d(2,1) | | c(2,1)/d(2,1), c(2,2)/d(2,1), c(2,3)/d(2,1) |
変数に計算実行時に対話形式で入力するか、データテキストから読み込むことで値を与えることを指定する。
配列変数名を添字なしで与えると、定義されているすべての要素の入力となる。
例 INPUT x, y(3,2), ABC(5)
変数に積分の初期値を入力することを指定する。使い方は INPUT文に準ずる。
INITIAL ALLI はすべての被積分変数の初期値を添字なしの形で入力することを指定する。
例 INITIAL p, s(3)
initial ALLI
計算結果を出力する変数を指定するのに OUTPUT文、OUTPUT1文、OUTPUT2文を用いる。
画面、プリンタあるいは一時ファイルへの出力を指定する。
例 OUTPUT x, y, a(3)
リザルトファイル1 および リザルトファイル2 への出力を指定する。
配列変数名を添字なしで与えると定義されているすべての要素が表示される。また、変数名に ALLI を指定するとすべての被積分変数の値が出力される。積分計算時に STEP 項を加えると周期的な出力が行われる
例 OUTPUT1 t, x STEP 0.1
論理値を表わすのに実数値を用い、真は 1.0 偽は 0.0 で表す。また、正の実数は真とみなし、0 および負の実数は偽とみなされる。
・関係演算子 等しい [ == ] 等しくない [ != ] 小さい [ < ] 大きい [ > ] 小さいか等しい [ <= ] 大きいか等しい [ >= ] ・論理演算子 否定 [ ! ] 論理積 [ & ] 論理和 [ | ]
論理演算に限って、ユーザーが記述したままの順序で演算が実行される. また、論理値に対して符号やあるいは算術演算子を適用する場合は、組み込み関数 IF を用いた方がわかりやすい。
例 cond = IF( a>b+c & d<=0 ) また、関係演算子は続けて使ってはならない。
例 × 0 < x <=2.7>
○ 0 < x & x <=2.7>
関数の形が独立変数の値の範囲によって変わる場合の式の記述。
例えば
0.5 x + b ( x > 1.0 ) y = { 0.8 ( 1.0 >= x >= 0 ) -0.2 x + c ( x <0 ) は y=0.5 * x + b WHEN x> 1.0 .. = 0.8 WHEN x <= 1.0 & x>= 0 .. = -0.2 * x + c WHEN x <0 のように書く.
三角関数の引数はラジアン exp( x ) : 指数 | loge( x ) : 自然対数 exp10( x ) : 10 ^ x | log10( x ) : 常用対数 sqre( x ) : x ^ 2 | sqrt( x ) : 平方根 | sin( x ) : 正弦 | asin( x ) : 逆正弦 cos( x ) : 余弦 | acos( x ) : 逆余弦 tan( x ) : 正接 | atan( x ) : 逆正接 | sinh( x ) : 双曲線正弦 | asinh( x ) : 双曲線逆正弦 cosh( x ) : 双曲線余弦 | acosh( x ) : 双曲線逆余弦 tanh( x ) : 双曲線正接 | atanh( x ) : 双曲線逆正接 | sum( y ) : 配列変数の総和 | int( x ) : 整数値に切り捨て prod( y ) : 配列変数の総積 | mod( x, y ): x / y の剰余 max(a,b,..): 最大の変数値 | sign( x ) : 符号の取り出し min(a,b,..): 最小の変数値 | if( x ) : 論理値化 maxof( y ) : 配列の最大要素 | abs( x ) : 絶対値 minof( y ) : 配列の最小要素 |
関数関係を数表によって与える。例えば
+-----+------------------------------------+ | x | 1.0 1.5 2.0 3.0 4.0 6.0 | +-----+------------------------------------+ | y | 0.38 0.36 0.34 0.28 0.21 0.14 | +-----+------------------------------------+ は VAR x(6), y(6) TABLE y = tab1( x ) REV x = ( 1.0, 1.5, 2.0, 3.0, 4.0, 6.0 ) y = ( 0.38, 0.36, 0.34, 0.28, 0.21, 0.14 ) のように定義し、方程式の中で p - 1 = tab1( a ) + 3 * c のように一種の関数として引用する.
なお、TABLE文 の REV は数表の逆引きを可能とする指定である。この例は引数が1つの場合であるが2つまで書くことができる。
非線形連立方程式は解くためには繰り返し収束計算が必要である。ある未知変数にある値を仮定して計算し、ある式の両辺が等しくなるように繰り返し計算をする。この時の変数と式の組を指定するためにRESET文 を用いる。
例 eq1: ( x + 0.3 )^ 2 - sin( x ) = 10
RESET x # 1 [0,100] BY eq1 UNTIL 0.01%
この例は未知数 x ( 初期値 1、下限値 0、上限値 100 ) を仮定して方程式 eq1 ( ラベルによる指定 )が成り立つまで収束計算するよう指定し、収束精度を
0.01% としている。初期値、下限値、上限値、収束精度は省略でき、その時は default値 が使われる。
RESET文による指定がない場合や不足している場合は、自動的にこの組み合わせが追加される。
ある変数( 目的関数 )の値を最大、あるいは最小とする独立変数の値を決定する最適化問題を扱う場合、以下のように FIND文 で指定する。
また、解の存在範囲に制約条件をつけることができる。独立変数の数は複数でもよいが、10個まで。
例 FIND ( x # 1 [0,20], y # 1 [0,20] ) ..
MINIMIZE p UNDER cond UNTIL 0.5%
p = 3*x^2 + 3*y^2 + 2*x*y - 10*x - 50*x + 330
cond = IF( x + y <20 ) x ( 下限値 0、上限値 20、初期値 1 )
および y ( 同じく )の値を x + y < 20 の条件の下で p を最小にするように決めることを表し、その収束精度を 0.5% としている。
なお、下限値、上限値、初期値、収束精度は省略でき、その時は default 値が使われる。 また、制約条件がない時は UNDER の指定を省略する。
微分方程式を含む問題で積分計算を指定するには INTEGRAL文 を用いる。
例 INTEGRAL t[0,50] STEP 0.1 BY RKV BREAK ok
ok = t > t_next
この例は積分の独立変数に t を指定し、0 から 50 まで積分キザミ 0.1 で積分 計算することを指定している。
BY項 は積分手法を指定するもので、次のいずれか を選ぶ。省略時には RKF がとられる。
RKF ... 4次のルンゲクッタ法(固定キザミ)
RKV ... 4次のルンゲクッタ法(可変キザミ)
EUL ... オイラー法
BREAK項は積分の中断条件を与えるもので、okが真になったら中断する。中断する条件がなければ省略する。
微分方程式を含まない問題で繰り返し計算をさせるとき REPEAT文 を用いる。
例 y = a*x^3 + b*x^2 + c*x + d
REPEAT x[0,10] STEP 0.5
この例は x を 0 から 10 まで 0.5 キザミで変化させながら繰り返し計算を行うことを指定している。
積分過程のトレンド表示出力を指定するのに TREND文 を用いる。
例 TREND x, y STEP 0.1
この例は x と y の値を積分の 0.1 キザミに表示することを指定している。表示できる変数の数は最大 20 まで。配列変数が含まれる場合はその要素数の合計が最大 20 まで。
例 TREND s[0,10], s'[-5,5]
トレンド表示をキャラクタグラフで行う場合は、この例のように変数名の後にグラフの表示範囲を [ ] で囲んで与える。 ただし、全ての変数に対して表示範囲を指定した場合にのみキャラクタグラフが得られる。 STEP項を省略すると INTEGRAL文 で指定した積分のキザミ幅毎に表示が行われる。
ソーステキスト中の任意のシンボルを、別の記述 (定数、変数名などの記述) によって置き換える機能。 ソーステキスト全体に対して有効な GLOBAL パラメータ と、ひとつのマクロ内やメイン内の文に対してのみ有効な LOCAL パラメータ とがある。
例 LOCAL N = 5, parm = 0.5*x
VAR a(N), b(N), c(N+2)
a(2:N) = b(1:N-1) + parm
は次の内容を意味している。
VAR a(5), b(5), c(7)
a(2:5) = b(1:4) + 0.5*x
繰り返し使われるような式の一群をまとめたものに名前をつけておき、その名前によって随時その式群を呼び出す機能。
マクロは、次のような時に使うと便利。
マクロは CALL文によって呼び出すと、その CALL文の代わりにマクロの式群がその位置にそっくり挿入されることになる。また、この際マクロ内の任意のシンボル ( 変数名など ) を、マクロを CALLする時のパラメータ指定によって適宜変更することが可能。
例 マクロの定義 MACRO mname
a^2 - 3*a*b + 2*b = 12
END mname
マクロのコール label: CALL mname( a = 10, b = x )
Copyright © Omega Simulation Co., LTD. All Rights Reserved.