JSLには、逆関数を代数的に求めるInvert Expr()関数が用意されています。
Invert Expr(expression, name, y)
ここで、
• expressionには逆関数を求めたい式、もしくは、その式を含むグローバル変数を指定します。
• nameについて解かれた逆関数が求められます。
• yは元の式の従属変数の変数名です。
たとえば、
Invert Expr( Sqrt( log( x ) ), x, y );
この結果は、変数xについて解かれた次のような逆関数になります(なお、Invert Expr()関数は、変数xが、元の式に1箇所だけで使われている必要があります)。
Exp( y ^ 2 )
これは、次のように手計算で代数的に求めるのとまったく同じように行われます。
y = Sqrt( log( x ) );
y2 = Log( x );
Exp( y2 ) = x;
Invert Expr関数は、逆関数が存在する大部分の基本演算をサポートしています。また、必要に応じて、正の平方根の中だけで、三角関数の場合は可逆な定義域内だけで逆関数を求めます。
F、Beta、Chi Square、t、Gamma、およびWeibullのDistributionとQuantile関数がサポートされています。第1引数に関しての逆関数である分布関数と分位点関数が戻されます。変換できない式の場合は、Invert Expr()関数はEmpty()を戻します。
JSLには、整理されていない複雑な式を、さまざまな代数的規則を用いて簡略化する、Simplify Exprコマンドがあります。このコマンドの使用方法は、以下のとおりです。
result = Simplify Expr(expr(expression));
または
result = Simplify Expr(nameExpr(global));
たとえば、
Simplify Expr( Expr( 2 * 3 * a + b * (a + 3 - c) - a * b ) );
の結果は、次のようになります。
6*a + 3*b + -1*b*c
Simplify Expr()はまた、入れ子構造のIf式を展開します。たとえば、次のような手順で要約できます。
r = Simplify Expr( Expr( If( cond1, result1, If( cond2, result2, If( cond3, result3, resultElse ) ) ) ) );
の結果は、次のようになります。
If(cond1, result1, cond2, result2, cond3, result3, resultElse);