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® parser автоматически преобразует все числа в двойную точность, поддерживает исходную точность путем ввода больших чисел и высокоточных чисел как строк. Вместо 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