https://github.com/symengine/symengine.r
A R interface to the symbolic manipulation library SymEngine.
https://github.com/symengine/symengine.r
Last synced: 8 months ago
JSON representation
A R interface to the symbolic manipulation library SymEngine.
- Host: GitHub
- URL: https://github.com/symengine/symengine.r
- Owner: symengine
- Created: 2017-10-14T03:08:08.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-02-26T12:04:02.000Z (almost 2 years ago)
- Last Synced: 2024-04-26T01:01:36.889Z (over 1 year ago)
- Language: R
- Homepage:
- Size: 1.91 MB
- Stars: 25
- Watchers: 10
- Forks: 8
- Open Issues: 20
-
Metadata Files:
- Readme: README.Rmd
Awesome Lists containing this project
README
---
output: github_document
---
```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "README-"
)
```
# symengine
[](https://github.com/symengine/symengine.R/actions)
[](https://ci.appveyor.com/project/symengine/symengine-r)
`symengine` is an R interface to the [SymEngine C++ library](https://github.com/symengine/symengine)
for symbolic computation.
## Installation
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 OS
```
Then you can install the R package with
```{r, eval=FALSE}
devtools::install_github("symengine/symengine.R")
```
On Windows, you will need to install [Rtools42](https://cran.r-project.org/bin/windows/Rtools/rtools42/rtools.html)
for building the package from source.
Please report any problem installing the package on your system.
```{r}
library(symengine)
```
## Usage
Also check the documentation site with built vignettes and help pages at
http://symengine.marlin.pub.
### Manipulating Symbolic Expressions
```{r}
use_vars(x, y, z)
expr <- (x + y + z) ^ 2L - 42L
expand(expr)
```
Substitue `z` as `a` and `y` as `x^2`.
```{r}
a <- S("a")
expr <- subs(expr, z, a)
expr <- subs(expr, y, x^2L)
expr
```
Second derivative of `expr` with regards to `x`:
```{r}
d1_expr <- D(expr, "x")
d2_expr <- D(d1_expr, "x")
expand(d2_expr)
```
Solve the equation of `d2_expr == 0` with regards to `x`.
```{r}
solutions <- solve(d2_expr, "x")
solutions
```
### Numerically Evaluate Symbolic Expressions
For the two solutions above, we can convert them into a function that gives numeric
output with regards to given input.
```{r}
func <- as.function(solutions)
ans <- func(a = -100:-95)
colnames(ans) <- c("Solution1", "Solution2")
ans
```
### Numbers
The next prime number greater than 2^400.
```{r}
n <- nextprime(S(~ 2 ^ 400))
n
```
The greatest common divisor between the prime number and 42.
```{r}
GCD(n, 42)
```
The binomial coefficient `(2^30 ¦ 5)`.
```{r}
choose(S(~ 2^30), 5L)
```
Pi "computed" to 400-bit precision number.
```{r}
if (symengine_have_component("mpfr"))
evalf(Constant("pi"), bits = 400)
```
### Object Equality
```{r}
x + y == S("x + y")
x + y != S("x + y")
```
```{r}
sin(x)/cos(x)
tan(x) == sin(x)/cos(x) # Different internal representation
```
## Acknowledgement
This project was a Google Summer of Code project under the organization
of The R Project for Statistical Computing in 2018.
The student was Xin Chen, mentored by Jialin Ma and Isuru Fernando.