analyze_expr_JPH {lazy.symbolic}R Documentation

式の構造の表示

Description

英語のヘルプファイルは: analyze_expr

Arguments

expr

文字列としての式。

sort

= 1 ならば項を並べ替える。

print

= 0 ならば結果を表示しない。

debug

= 1 ならば途中結果を表示。

Details

結果は tab という名前の行列になる。 .
以下の式
"-inv(A)+(B+C)+D%*%E+F%*%(G-(H)-(I)+J)"
の結果は:

       topers   o1  factor_1    o2     factor_2
  -----------------------------------------------------
  term_1    -       inv(A)
  term_2    +       (B+C)
  term_3    +       D           %*%    E
  term_4    +       F           %*%    (G-(H)-(I)+J)


各行は各項 term に対応しており、各項は因子 factor に分解される。

toperso1 は factor1 に掛かる符号.
(o1 は空の可能性がある。)
o2factor2 に掛かる符号, 等々.

toperso1 は加算的な演算子, + or - , また op2, op3,..., は乗算的演算子, *, %*%, .

もtの式は以下の様にして復元することが出来る:

  paste( apply(tab,1, function(x){paste(x,collapse="")} ), collapse="")
  

Value

以下の要素からなるリスト
tab 結果の表,
valid 式と見なせるか否かのフラグ,
identical 復元した式が入力と等しいか否かのフラグ.

Examples

analyze_expr( "-inv(A)+(B+C)+D%*%E+F%*%(G-(H)-(I)+J)" )
analyze_expr( "-inv(A)+(B+C)+D%*%E+F%*%(G-(H)-(I)+J)", sort=1 )

# recovery
expr <- "-inv(A)+2*(B-C)+Psi(X)"
tab <- analyze_expr( expr )$tab
expr2 <- paste(apply(tab,1, function(x){paste(x,collapse="")}), collapse="")
identical(expr,expr2)

# scalar expressions
set.seed(1702)

nexpr=20
for( i in 1:nexpr ){

 # generate expression
 natom=10
 expr=gen_random_expr( natom=natom, nparen=4, oper=c("*","+","-") )
 if( runif(1) < 0.2 ) expr=sub( "a", "F(a)", expr )
 if( runif(1) < 0.3 ) expr=sub( "d", "F1(d)", expr )
 if( runif(1) < 0.2 ) expr=sub( letters[natom], "Ff2(x)", expr )

 # analyze expression
 res=analyze_expr( expr, print=1 )

}


# matrix expressions
set.seed(1702)

nexpr=20
for( i in 1:nexpr ){

  # generate expression
  natom=10
  expr=gen_random_expr( natom=natom, nparen=4
                        , alpha=LETTERS[1:natom], oper=c("%*%","+","-") )
  if( runif(1) < 0.3 ) expr=sub( "A", "inv(A)", expr )
  if( runif(1) < 0.3 ) expr=sub( "C", "diag(C)", expr )
  if( runif(1) < 0.3 ) expr=sub( LETTERS[natom], "ginv(X)", expr )

  # analyze expression
  res=analyze_expr( expr, print=1 )

}



[Package lazy.symbolic version 1.0.0.20250830 ]