matReplace_JPH {lazy.symbolic}R Documentation

記号行列の要素置換

Description

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

Arguments

..exp

記号行列

...

pat1=pat2 の形式の置換
pat1 のサイズは pat2 と同じである必要があります。

values

セミコロンで区切られた複数置換の文字列

fullsymb

= 1 の場合、exp を完全記号式として扱う
属性よりも優先されます。

ntogoback

sys.parent 関数の n パラメータ

print

= 2 置換の詳細を表示 = 1 結果を表示

debug

= 1 追加情報を表示

Details

この関数は exp に含まれる pat1 行列の要素を pat2 行列の対応する要素で置き換えます。
pat1 の要素を含む記号行列は、pat2 を数値行列に指定すると 数値行列に変換されます。

例:

  A <- demomat(3,2,root="a"); An <- demomat(3,2)
  B <- demomat(2,3,root="b"); Bn <- demomat(2,3) + 100
  AB <- matTimes(A,B)
  ABn <- matReplace( AB, A=An, B=Bn )

ここで AB の要素は記号式で、例えば AB[1,2]="a11*b12+a12*b22" です。 A の i-j 要素 aij を An の対応要素 10*i+j に、B の要素を Bn の 対応要素 100+10*i+j に置換し、結果は ABn に格納されます。

exp が完全記号式の場合、左辺の行列名を pat1 とし、 右辺の対応する行列を pat2 として置換されます。 fullsymb 属性がない場合も fullsymb=1 で完全記号式として扱えます。

半記号式の場合:
... が A=An, B=Bn の場合、内部で解析すると

  pat2: list(An, Bn)
  name: list("An", "Bn")
  names(name): c("A","B")

親環境の A, B は参照されません。

置換の指定方法は2通りあります。
1つ目: matReplace(exp, A=An, B=Bn)
2つ目: matReplace(exp, values="A=An; B=Bn")
2つ目の方法は多くの置換がある場合に便利で、優先されます。

スカラー置換の場合も同様に、values="a=1; b=2;..." のように指定可能です。

Value

指定した置換を施した、exp と同じサイズの記号式

Examples


# 行列置換
A <- demomat(3,2,root="a"); An <- demomat(3,2)
B <- demomat(2,3,root="b"); Bn <- demomat(2,3)
AB <- matTimes(A,B)
ABn <- matReplace( AB, A=An, B=Bn, print=2 )
Print( Eval(ABn)-An%*%Bn )

val <- "A=An; B=Bn"
ABn2 <- matReplace(AB, values=val)
Print( Eval(ABn2)-An%*%Bn )

# スカラー置換
val <- "a=1; b=2; c=3; d=4; e=5"
exp <- "(a+b*c-d)/e"
matReplace(exp,values=val)

sexp <- "s( a[i,j]*v[k], {k,1,ncol(A)})"
matReplace(sexp,values="ncol(A)=2")

# 予期しない結果となる場合
matReplace( "cos(theta)*sin(a)", a=1, theta=0 )
matReplace( "cos(theta)*sin(a)", values="a=1; theta=0" )
# 期待通りの置換
matReplace( "cos(theta)*sin(a)", theta=0, a=1 )
matReplace( "cos(theta)*sin(a)", values="theta=0; a=1" )

# fullsymb=1 により完全記号式として扱う
matReplace("A", A=demomat(3,3), fullsymb=1)
matReplace("matTimes(t(A),B)"
     , A=demomat(2,2, root="a"), B=demomat(2,2, root="b"), fullsymb=1)

## Not run: 
library(lazy.sumbolic2)

# 完全記号行列の例
A <- demomat( 2,2, root="A", fullsymb=1 )
tA <- tp(A)
expr=matTimes(tA,A)

A11s <- demomat(2,2,root="a11_")
A21s <- demomat(2,2,root="a21_")
A12s <- demomat(2,2,root="a12_")
A22s <- demomat(2,2,root="a22_")

valuelist <- "A11=A11s; A21=A21s; A12=A12s; A22=A22s"
matReplace( expr, values=valuelist )
matReplace( expr, A11=A11s, A21=A21s, A12=A12s, A22=A22s )

## End(Not run)



[Package lazy.symbolic version 1.0.0.20250830 ]