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 number1i
.
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)