# str2sym

Evaluate string representing symbolic expression

## Syntax

## Description

## Examples

### Evaluate String as Symbolic Expression

Evaluate the string `'sin(pi)'`

.
`str2sym`

returns the expected result.

str2sym('sin(pi)')

ans = 0

`str2sym`

assumes the `=`

operator
represents an equation, not an assignment. Also,
`str2sym`

does not add the variables contained in the
string to the workspace.

Show this behavior by evaluating `'x^2 = 4'`

. The
`str2sym`

function returns the equation ```
x^2
== 4
```

but `x`

does not appear in the
workspace.

eqn = str2sym('x^2 = 4')

eqn = x^2 == 4

Find the variable in `eqn`

by using
`symvar`

. The variable `var`

now
refers to `x`

.

var = symvar(eqn)

var = x

Assign values from `eqn`

by solving
`eqn`

for `var`

and assigning the
result.

varVal = solve(eqn,var)

varVal = -2 2

### Substitute Workspace Values into String Input

`str2sym`

does not substitute values from
the workspace for variables in the input. Therefore,
`str2sym`

has reproducible output. Instead, substitute
workspace values by using `subs`

on the output of
`str2sym`

.

Set `y`

to `2`

. Then, evaluate
`'y^2'`

with and without `subs`

to show
how `subs`

substitutes `y`

with its
value.

y = 2; withoutSubs = str2sym('y^2')

withoutSubs = y^2

withSubs = subs(str2sym('y^2'))

withSubs = 4

### Evaluate Strings from File as Symbolic Expressions

When symbolic expressions are stored as strings in a file,
evaluate the strings by reading the file and using
`str2sym`

.

Assume the file `mySym.txt`

contains this text.

a = 2.431 y = a*exp(t) diff(z(t),t) = b*y*z

Evaluate expressions in `mySym.txt`

using
`str2sym`

.

```
filename = 'mySym.txt';
filetext = fileread(filename);
filetext = splitlines(filetext);
str2sym(filetext)
```

ans = a == 2.431 y == a*exp(t) diff(z(t), t) == b*y*z

The output of `str2sym`

is independent of workspace
values, which means the output is reproducible. Show this reproducibility by
assigning a value to `b`

and re-evaluating the stored
expressions.

b = 5; str2sym(filetext)

ans = a == 2.431 y == a*exp(t) diff(z(t), t) == b*y*z

To use workspace values or a value from input equations, use
`subs`

(solve the equation first using
`solve`

), as described in Evaluate String as Symbolic Expression and
Substitute Workspace Values into String Input.

### Execute Functions in String Input

`str2sym`

executes functions in input when
the functions are on the path. Otherwise, `str2sym`

returns
the symbolic object as expected. This behavior means that the output is
reproducible.

Show this behavior by reading a differential equation and initial
condition from a file. Solve the equation for the condition. Because
`str2sym`

does not evaluate `y(t)`

in the equation, the output is reproducible.

```
filename = 'mySym.txt';
filetext = fileread(filename);
filetext = splitlines(filetext);
eqn = str2sym(filetext(1))
```

eqn = diff(y(t), t) == -y(t)

cond = str2sym(filetext(2))

cond = y(0) == 2

ySol = dsolve(eqn,cond)

ySol = 2*exp(-t)

### Exactly Represent Large Numbers and High-Precision Numbers

Because the MATLAB^{®} parser automatically converts all numbers to double precision,
maintain original precision by entering large numbers and high-precision numbers
as strings. Instead of `str2sym`

, enter integers using
`sym`

and floating-point numbers using
`vpa`

because `sym`

and
`vpa`

are faster.

Show the error between entering a ratio of large integers directly versus the exact string representation.

num = sym(12230984290/38490293482)

num = 5724399718238385/18014398509481984

numExact = sym('12230984290/38490293482')

numExact = 6115492145/19245146741

error = num - numExact

error = -7827162395/346689742765832461975814144

Show the error between entering a high-precision number directly versus the exact string representation.

num = vpa(8.023098429038490293482)

num = 8.0230984290384910195825796108693

numExact = vpa('8.023098429038490293482')

numExact = 8.023098429038490293482

error = num - numExact

error = 0.00000000000000072610057961086928844451883343504

For details, see Numeric to Symbolic Conversion. For full workflows, see Find Almost Integers with High-Precision Arithmetic and Prime Factorizations.

### Convert Hexadecimal and Binary Values to Symbolic Decimal Numbers

Starting in R2019b, you can represent hexadecimal and binary
values using character vectors. Hexadecimal values start with a
`0x`

or `0X`

prefix, while binary values
start with a `0b`

or `0B`

prefix. You can then
convert the hexadecimal and binary values to symbolic decimal numbers using
`str2sym`

. For more information, see Hexadecimal and Binary Values.

Create a character vector that represents a hexadecimal value. Convert the value to symbolic decimal number.

H = '0x2A' D = str2sym(H)

D = 42

Create a character vector that represents a binary value. Convert the value to symbolic decimal number.

B = '0b101010' D = str2sym(B)

D = 42

## Input Arguments

`symstr`

— String representing symbolic expression

character vector | string | cell array of character vectors

String representing a symbolic expression, specified as a character vector, string, or cell array of character vectors.

## Tips

`str2sym`

assumes the`=`

operator represents an equation, not an assignment.`str2sym`

does not create variables contained in the input.`str2sym('inf')`

returns infinity (`Inf`

).`str2sym('i')`

returns the imaginary number`1i`

.

## Version History

**Introduced in R2017b**

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

# Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)