str2sym

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

Синтаксис

str2sym(symstr)

Описание

пример

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

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

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

свернуть все

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

Советы

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

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

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

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

Введенный в R2017b