This topic shows how Symbolic Math Toolbox™ converts numbers into symbolic form. For an overview of symbolic and numeric arithmetic, see Choose Numeric or Symbolic Arithmetic.
To convert numeric input to symbolic form, use the sym command.
By default, sym returns a rational approximation
of a numeric expression.
t = 0.1; sym(t)
ans = 1/10
sym determines that the double-precision
value 0.1 approximates the exact symbolic value 1/10.
In general, sym tries to correct the round-off
error in floating-point inputs to return the exact symbolic form.
Specifically, sym corrects round-off error in
numeric inputs that match the forms p/q, pπ/q, (p/q)1/2, 2q,
and 10q,
where p and q are modest-sized
integers.
For these forms, demonstrate that sym converts floating-point inputs to
the exact symbolic form. First, numerically approximate 1/7, pi, and .
N1 = 1/7 N2 = pi N3 = 1/sqrt(2)
N1 =
0.1429
N2 =
3.1416
N3 =
0.7071Convert the numeric approximations to exact symbolic form. sym corrects
the round-off error.
S1 = sym(N1) S2 = sym(N2) S3 = sym(N3)
S1 = 1/7 S2 = pi S3 = 2^(1/2)/2
To return the error between the input and the estimated exact
form, use the syntax sym(num,'e'). See Conversion to Rational Symbolic Form with Error Term.
You can force sym to accept the input as
is by placing the input in quotes. Demonstrate this behavior on the
previous input 0.142857142857143. The sym function
does not convert the input to 1/7.
sym('0.142857142857143')ans = 0.142857142857143
When you convert large numbers, use quotes to exactly represent
them. Demonstrate this behavior by comparing sym(133333333333333333333) with sym('133333333333333333333').
sym(1333333333333333333)
sym('1333333333333333333')ans = 1333333333333333248 ans = 1333333333333333333
You can specify the technique used by sym to
convert floating-point numbers using the optional second argument,
which can be 'f', 'r', 'e',
or 'd'. The default flag is 'r',
for rational
form.
Convert input to exact rational form by calling sym with
the 'r' flag. This is the default behavior when
you call sym without flags.
sym(t, 'r')
ans = 1/10
If you call sym with the flag 'f', sym converts
double-precision, floating-point numbers to their numeric value by
using N*2^e, where N and e are
the exponent and mantissa respectively.
Convert t by using a floating-point expansion.
sym(t, 'f')
ans = 3602879701896397/36028797018963968
If you call sym with the flag 'e', sym returns
the rational form of t plus the error between the
estimated, exact value for t and its floating-point
representation. This error is expressed in terms of eps (the floating-point relative precision).
Convert t to symbolic form. Return the error
between its estimated symbolic form and its floating-point value.
sym(t, 'e')
ans = eps/40 + 1/10
The error term eps/40 is the difference between sym('0.1') and sym(0.1).
If you call sym with the flag 'd', sym returns
the decimal expansion of the input. The digits function
specifies the number of significant digits used. The default value
of digits is 32.
sym(t,'d')
ans = 0.10000000000000000555111512312578
Change the number of significant digits by using digits.
digitsOld = digits(7); sym(t,'d')
ans = 0.1
For further calculations, restore the old value of digits.
digits(digitsOld)