matReplace_JPH {lazy.symbolic} | R Documentation |
記号行列の要素置換
Description
英語のヘルプファイルは: matReplace
Arguments
..exp |
記号行列 |
... |
pat1=pat2 の形式の置換 |
values |
セミコロンで区切られた複数置換の文字列 |
fullsymb |
= 1 の場合、 |
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)