symengine is an R interface to the SymEngine C++ library for symbolic computation.
There are some dependencies needed on Unix systems. You may install them with
zypper install cmake gmp-devel mpfr-devel mpc-devel ## openSUSE
dnf install cmake gmp-devel mpfr-devel libmpc-devel ## Fedora
apt install cmake libgmp-dev libmpfr-dev libmpc-dev ## Debian
brew install cmake gmp mpfr libmpc ## Mac OSThen you can install the R package with
devtools::install_github("symengine/symengine.R")On Windows, you will need to install Rtools42 for building the package from source.
Please report any problem installing the package on your system.
Also check the documentation site with built vignettes and help pages at http://symengine.marlin.pub.
use_vars(x, y, z)
#> Initializing 'x', 'y', 'z'
expr <- (x + y + z) ^ 2L - 42L
expand(expr)
#> (Add) -42 + 2*x*y + 2*x*z + 2*y*z + x^2 + y^2 + z^2Substitue z as a and y as x^2.
a <- S("a")
expr <- subs(expr, z, a)
expr <- subs(expr, y, x^2L)
expr
#> (Add) -42 + (a + x + x^2)^2Second derivative of expr with regards to x:
Solve the equation of d2_expr == 0 with regards to x.
solutions <- solve(d2_expr, "x")
solutions
#> VecBasic of length 2
#> V( -1/2 + (-1/2)*sqrt(1 + (-1/3)*(2 + 4*a)), -1/2 + (1/2)*sqrt(1 + (-1/3)*(2 + 4*a)) )For the two solutions above, we can convert them into a function that gives numeric output with regards to given input.
func <- as.function(solutions)
ans <- func(a = -100:-95)
colnames(ans) <- c("Solution1", "Solution2")
ans
#> Solution1 Solution2
#> [1,] -6.280715 5.280715
#> [2,] -6.251811 5.251811
#> [3,] -6.222762 5.222762
#> [4,] -6.193564 5.193564
#> [5,] -6.164215 5.164215
#> [6,] -6.134714 5.134714The next prime number greater than 2^400.
n <- nextprime(S(~ 2 ^ 400))
n
#> (Integer) 2582249878086908589655919172003011874329705792829223512830659356540647622016841194629645353280137831435903171972747493557The greatest common divisor between the prime number and 42.
GCD(n, 42)
#> (Integer) 1The binomial coefficient (2^30 ¦ 5).
Pi “computed” to 400-bit precision number.
if (symengine_have_component("mpfr"))
evalf(Constant("pi"), bits = 400)
#> (RealMPFR,prec400) 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066