str2sym

Оцените строку, представляющую символьное выражение

Синтаксис

Описание

пример

str2sym(symstr) оценивает symstr где symstr строка, представляющая символьное выражение. Введите символьные выражения как строки только при чтении выражений из текстовых файлов или при определении чисел точно. В противном случае не используйте строки для символьного входа.

Примеры

свернуть все

Оцените строку 'sin(pi)'. str2sym возвращает ожидаемый результат.

str2sym('sin(pi)')
ans =
0

str2sym принимает = оператор представляет уравнение, не присвоение. Кроме того, str2sym не добавляют переменные, содержимые в строке к рабочей области.

Покажите это поведение путем оценки 'x^2 = 4'. str2sym функция возвращает уравнение x^2 == 4 но x не появляется в рабочей области.

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

Найдите переменную в eqn при помощи symvar. Переменная var теперь относится к x.

var = symvar(eqn)
var =
x

Присвойте значения от eqn путем решения eqn для var и присвоение результата.

varVal = solve(eqn,var)
varVal =
 -2
  2

str2sym не заменяет значениями из рабочей области для переменных во входе. Поэтому str2sym имеет восстанавливаемый выход. Вместо этого значения рабочей области замены при помощи subs на выходе str2sym.

Установите y к 2. Затем оцените 'y^2' с и без subs показать как subs замены y с его значением.

y = 2;
withoutSubs = str2sym('y^2')
withoutSubs =
y^2
withSubs = subs(str2sym('y^2'))
withSubs =
4

Когда символьные выражения хранятся как строки в файле, оценивают строки путем чтения файла и использования str2sym.

Примите файл mySym.txt содержит этот текст.

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

Выполните выражения в mySym.txt использование 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

Выход str2sym независимо от значений рабочей области, что означает, что выход восстанавливаем. Покажите эту воспроизводимость путем присвоения значения b и переоценка сохраненных выражений.

b = 5;
str2sym(filetext)
ans =
           a == 2.431
        y == a*exp(t)
 diff(z(t), t) == b*y*z

Чтобы использовать значения рабочей области или значение от исходных уравнений, использовать subs (решите уравнение сначала с помощью solve), как описано в Оценивают Строку как Символьное выражение и Значения Рабочей области Замены во Вход Строки.

str2sym выполняет функции во входе, когда функции находятся на пути. В противном случае, str2sym возвращает символьный объект как ожидалось. Это поведение означает, что выход восстанавливаем.

Покажите это поведение путем чтения дифференциального уравнения и начального условия из файла. Решите уравнение для условия. Поскольку str2sym не оценивает y(t) в уравнении выход восстанавливаем.

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)

Поскольку MATLAB® синтаксический анализатор автоматически преобразует все числа в двойную точность, обеспечьте исходную точность путем введения больших номеров и чисел высокой точности как строки. Вместо str2sym, введите целочисленное использование sym и использование чисел с плавающей запятой vpa потому что sym и vpa быстрее.

Покажите ошибку между вводом отношения больших целых чисел непосредственно по сравнению с точным строковым представлением.

num = sym(12230984290/38490293482)
num =
5724399718238385/18014398509481984
numExact = sym('12230984290/38490293482')
numExact =
6115492145/19245146741
error = num - numExact
error =
-7827162395/346689742765832461975814144

Покажите ошибку между введением номера высокой точности непосредственно по сравнению с точным строковым представлением.

num = vpa(8.023098429038490293482)
num =
8.0230984290384910195825796108693
numExact = vpa('8.023098429038490293482')
numExact =
8.023098429038490293482
error = num - numExact
error =
0.00000000000000072610057961086928844451883343504

Для получения дополнительной информации смотрите Числовой к Символьному Преобразованию. Для полных рабочих процессов смотрите Численные расчеты С Высокой точностью и Главными Факторизациями.

Начиная в R2019b, можно представлять шестнадцатеричные и двоичные значения с помощью векторов символов. Шестнадцатеричные значения запускаются с 0x или 0X префикс, в то время как двоичные значения запускаются с 0b или 0B префикс. Можно затем преобразовать шестнадцатеричные и двоичные значения в символьное использование десятичных чисел str2sym. Для получения дополнительной информации смотрите Шестнадцатеричные и Двоичные значения.

Создайте вектор символов, который представляет шестнадцатеричное значение. Преобразуйте значение в символьное десятичное число.

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

Создайте вектор символов, который представляет двоичное значение. Преобразуйте значение в символьное десятичное число.

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

Входные параметры

свернуть все

Строка, представляющая символьное выражение в виде вектора символов, строки или массива ячеек из символьных векторов.

Советы

  • str2sym принимает = оператор представляет уравнение, не присвоение.

  • str2sym не создает переменные, содержимые во входе.

  • str2sym('inf') возвращает бесконечность (Inf).

  • str2sym('i') возвращает мнимое число 1i.

Введенный в R2017b