Substitute symbols in a freealg object for numbers or other freealg objects

subs(...)
subsu(S1, S2, r)

Arguments

S1, S2

Objects of class freealg

r

Integer specifying symbol to substitute (\(a=1,b=2\) etc)

...

First element is a freealg object, remainder are named arguments corresponding to variables to substitute

Value

Returns a freealg object.

Details

Function subs() substitutes variables for freealg objects (coerced if necessary) using natural R idiom. Observe that this type of substitution is sensitive to order:


> subs("ax",a="1+x",x="1+a")
free algebra element algebraically equal to
 + 2 + 3*a + 1*aa

> subs("ax",x="1+a",a="1+x")
free algebra element algebraically equal to
 + 2 + 3*x + 1*xx

Functions subsu() is a lower-level formal function, not really intended for the end-user. Function subsu() takes S1 and substitutes occurrences of symbol r with S2.

No equivalent to mvp::subvec() is currently implemented.

Author

Robin K. S. Hankin

Note

Function subs() is one place in the package where the use of letters is effectively hard-wired in. Idiom such as

subs("abccc",b="1+3x")

is very nice, but identifies “b” with 2. Note that argument r of subsu() is canonically an integer but a single character is interpreted as a letter. See also the note at freealg.Rd.

Examples

subs("abccc", b="1+3x")
#> free algebra element algebraically equal to
#> + accc + 3axccc
subs("aaaa", a="1+x")  # binomial
#> free algebra element algebraically equal to
#> + 1 + 4x + 6xx + 4xxx + xxxx

subs("abA", b=31)
#> free algebra element algebraically equal to
#> + 31

subs("1+a", a="A")   # can substitute for an inverse
#> free algebra element algebraically equal to
#> + 1 + A
subs("A", a="1+x")   # inverses are not substituted for
#> free algebra element algebraically equal to
#> + A

a <- rfalg()
subs(a, a=a)
#> free algebra element algebraically equal to
#> + 27acabcacabb + 36acabcbaccb + 63acabcbb + 63acabcbcb + 9acabcbcbbb +
#> 54acabccabcb + 7b + 12bacabcc + 36bacccacabb + 48bacccbaccb + 84bacccbb +
#> 84bacccbcb + 12bacccbcbbb + 72baccccabcb + 16bbacccc + 4bbcbbcc + 28bbcc +
#> 28bbccc + 7bc + 24bcabccc + 63bcacabb + 84bcbaccb + 148bcbb + 9bcbbcacabb +
#> 12bcbbcbaccb + 21bcbbcbb + 21bcbbcbcb + 3bcbbcbcbbb + 18bcbbccabcb + 147bcbcb +
#> 21bcbcbbb + 126bccabcb + 63bccacabb + 84bccbaccb + 147bccbb + 147bccbcb +
#> 21bccbcbbb + 126bcccabcb + 54cabccacabb + 72cabccbaccb + 126cabccbb +
#> 126cabccbcb + 18cabccbcbbb + 108cabcccabcb + 18cacabbc + 24cbaccbc + 42cbbc +
#> 6cbcbbbc + 42cbcbc + 36ccabcbc


## Sequential substitution works:

subs("abccc", b="1+3x", x="1+d+2e")
#> free algebra element algebraically equal to
#> + 4accc + 3adccc + 6aeccc
subs(rfalg(), a=rfalg())
#> free algebra element algebraically equal to
#> + 36aacaa + 216aacaac + 18aacaaca + 108aacaacac + 24aacabb + 144aacabbc +
#> 18aacacaa + 108aacacaac + 9aacacaaca + 54aacacaacac + 12aacacabb + 72aacacabbc
#> + 6aacacba + 36aacacbac + 3aacacbb + 21aacacbbbc + 126aacacbbbcc + 18aacacbbc +
#> 15aacaccaa + 90aacaccaac + 12aacba + 72aacbac + 6aacbb + 42aacbbbc +
#> 252aacbbbcc + 36aacbbc + 30aaccaa + 180aaccaac + 24abbcaa + 144abbcaac +
#> 12abbcaaca + 72abbcaacac + 16abbcabb + 96abbcabbc + 8abbcba + 48abbcbac +
#> 4abbcbb + 28abbcbbbc + 168abbcbbbcc + 24abbcbbc + 20abbccaa + 120abbccaac + 7b
#> + 12bacaa + 72bacaac + 6bacaaca + 36bacaacac + 8bacabb + 48bacabbc + 4bacba +
#> 24bacbac + 2bacbb + 14bacbbbc + 84bacbbbcc + 12bacbbc + 10baccaa + 60baccaac +
#> 18bbbaa + 9bbbaaca + 12bbbabb + 6bbbba + 3bbbbb + 21bbbbbbc + 15bbbcaa +
#> 42bbbccaa + 252bbbccaac + 21bbbccaaca + 126bbbccaacac + 28bbbccabb +
#> 168bbbccabbc + 14bbbccba + 84bbbccbac + 7bbbccbb + 49bbbccbbbc + 294bbbccbbbcc
#> + 42bbbccbbc + 35bbbcccaa + 210bbbcccaac + 30bbcaa + 36bbcaac + 15bbcaaca +
#> 18bbcaacac + 20bbcabb + 24bbcabbc + 10bbcba + 12bbcbac + 5bbcbb + 35bbcbbbc +
#> 42bbcbbbcc + 6bbcbbc + 25bbccaa + 30bbccaac + 2bc + 30caacaa + 180caacaac +
#> 15caacaaca + 90caacaacac + 20caacabb + 120caacabbc + 10caacba + 60caacbac +
#> 5caacbb + 35caacbbbc + 210caacbbbcc + 30caacbbc + 25caaccaa + 150caaccaac +
#> 5cccc