sym

Создайте символьные переменные, выражения, функции, матрицы

sym('pi') теперь создает символьную переменную под названием pi вместо символьного числа, представляющего математическую константу π. Для получения дополнительной информации см. Вопросы совместимости.

Поддержка векторов символов, которые не являются допустимыми именами переменной и которые не задают номер, была удалена. Чтобы создать символьные выражения, сначала создайте символьные переменные, и затем используйте операции на них. Например, используйте syms x; x + 1 вместо sym('x + 1'), exp(sym(pi)) вместо sym('exp(pi)'), и syms f(var1,...varN) вместо f(var1,...varN) = sym('f(var1,...varN)').

Описание

пример

x = sym('x') создает символьную переменную x.

пример

A = sym('a',[n1 ... nM]) создает n1- ...- nM символьный массив заполнен автоматически сгенерированными элементами. Например, A = sym('a',[1 3]) создает вектор-строку A = [a1 a2 a3]. Сгенерированные элементы a1, a2, и a3 не появляйтесь в рабочей области MATLAB®. Для многомерных массивов эти элементы имеют префиксный a сопровождаемый индексом элемента с помощью _ как разделитель, такой как a1_3_2.

пример

A = sym('a',n) создает n- n символьная матрица заполнена автоматически сгенерированными элементами.

пример

sym(___,set) создает символьную переменную или массив и устанавливает предположение, что переменная или все элементы массива принадлежат set. Здесь, set может быть 'real', 'positive'Целое число, или 'rational'. Также можно объединить несколько предположений путем определения массива строк или массива ячеек из символьных векторов. Например, примите положительное рациональное значение путем определения set как ["positive" "rational"] или {'positive','rational'}.

пример

sym(___,'clear') очищает набор предположений на символьной переменной или массиве. Можно задать 'clear' после входных параметров в любом из предыдущих синтаксисов, кроме объединения 'clear' и set. Вы не можете установить и очистить предположение в том же вызове функции к sym.

пример

sym(num) преобразует номер или числовую матрицу, заданную num к символьному числу или символьной матрице.

пример

sym(num,flag) использует метод, заданный flag для преобразования чисел с плавающей запятой к символьным числам.

пример

sym(strnum) преобразует вектор символов или строку, заданную strnum к точному символьному числу, которое избегает любого приближения.

пример

symexpr = sym(h) создает символьное выражение или матричный symexpr от анонимной функции MATLAB, сопоставленной с указателем на функцию h.

Примеры

свернуть все

Создайте символьные переменные x и y.

x = sym('x')
x = xx
y = sym('y')
y = yy

Создайте символьный векторный a 1 на 4 с автоматически сгенерированными элементами a1..., a4.

a = sym('a',[1 4])
 
a =
 
[a1, a2, a3, a4]
 

Отформатируйте имена элементов a при помощи вектора символов формата в качестве первого аргумента. sym замены %d в векторе символов формата с индексом элемента, чтобы сгенерировать имена элементов.

a = sym('x_%d',[1 4])
 
a =
 
[x_1, x_2, x_3, x_4]
 

Этот синтаксис не создает символьные переменные x_1..., x_4 в рабочем пространстве MATLAB. Доступ к элементам a использование стандартных методов индексирования.

a(1)
a(2:3)
 
ans =
 
x_1
 
 
ans =
 
[x_2, x_3]
 

Создайте символьную матрицу 3 на 4 с автоматически сгенерированными элементами. Элементы имеют форму Ai_j, который генерирует элементы A1_1..., A3_4.

A = sym('A',[3 4])
 
A =
 
[A1_1, A1_2, A1_3, A1_4]
[A2_1, A2_2, A2_3, A2_4]
[A3_1, A3_2, A3_3, A3_4]
 

Создайте матрицу 4 на 4 с именами элементов x_1_1..., x_4_4 при помощи вектора символов формата в качестве первого аргумента. sym замены %d в векторе символов формата с индексом элемента, чтобы сгенерировать имена элементов.

B = sym('x_%d_%d',4)
 
B =
 
[x_1_1, x_1_2, x_1_3, x_1_4]
[x_2_1, x_2_2, x_2_3, x_2_4]
[x_3_1, x_3_2, x_3_3, x_3_4]
[x_4_1, x_4_2, x_4_3, x_4_4]
 

Этот синтаксис не создает символьные переменные A1_1..., A3_4, x_1_1..., x_4_4 в рабочем пространстве MATLAB. Чтобы получить доступ к элементу матрицы, используйте круглые скобки.

A(2,3)
B(4,2)
 
ans =
 
A2_3
 
 
ans =
 
x_4_2
 

Создайте 2 символьным массивом 2 на 2 с автоматически сгенерированными элементами a1,1,1,,a2,2,2.

A = sym('a',[2 2 2])
A(:,:,1) = 

(a1,1,1a1,2,1a2,1,1a2,2,1)[a1_1_1, a1_2_1; a2_1_1, a2_2_1]

A(:,:,2) = 

(a1,1,2a1,2,2a2,1,2a2,2,2)[a1_1_2, a1_2_2; a2_1_2, a2_2_2]

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

inaccurate1 = sym(1/1234567)
inaccurate1 = 

76502392869235059444732965739290427392sym ('7650239286923505/9444732965739290427392')

accurate1 = 1/sym(1234567)
accurate1 = 

11234567sym ('1/1234567')

inaccurate2 = sym(sqrt(1234567))
inaccurate2 = 

48867165620185894398046511104sym ('4886716562018589/4398046511104')

accurate2 = sqrt(sym(1234567))
accurate2 = 1234567sqrt (sym (1234567))
inaccurate3 = sym(exp(pi))
inaccurate3 = 

6513525919879993281474976710656sym ('6513525919879993/281474976710656')

accurate3 = exp(sym(pi))
accurate3 = eπexp (sym (пи))

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

inaccurateNum = sym(11111111111111111111)
inaccurateNum = 11111111111111110656sym ('11111111111111110656')
accurateNum = sym('11111111111111111111')
accurateNum = 11111111111111111111sym ('11111111111111111111')

Когда вы будете использовать кавычки, чтобы создать символьные комплексные числа, задайте мнимую часть номера как 1i, 2i, и так далее.

sym('1234567 + 1i')
ans = 1234567+i1234567 + sym (1i)

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

h_expr = @(x)(sin(x) + cos(x));
sym_expr = sym(h_expr)
sym_expr = cos(x)+sin(x)cos(x) + sin(x)
h_matrix = @(x)(x*pascal(3));
sym_matrix = sym(h_matrix)
sym_matrix = 

(xxxx2x3xx3x6x)[x, x, x; x, 2*x, 3*x; x, 3*x, 6*x]

Создайте символьные переменные xYZ, и t одновременно принимая тот x действительно, y положительно, z рациональный, и t положительное целое число.

x = sym('x','real');
y = sym('y','positive');
z = sym('z','rational');
t = sym('t',{'positive','integer'});

Проверяйте предположения на xYZ, и t использование assumptions.

assumptions
ans = (tZxRzQ1t0<y)[в (t, 'целое число'), в (x, 'действительный'), в (z, 'рациональный'), 1 <= t, 0 <y]

Для дальнейших расчетов очистите предположения с помощью assume.

assume([x y z t],'clear')
assumptions
 
ans =
 
Empty sym: 1-by-0
 

Создайте символьную матрицу и установите предположения на каждом элементе той матрицы.

A = sym('A%d%d',[2 2],'positive')
A = 

(A11A12A21A22)[A11, A12; A21, A22]

Решите уравнение, включающее первый элемент A. MATLAB принимает, что этот элемент положителен.

solve(A(1,1)^2-1, A(1,1))
ans = 1sym (1)

Проверяйте набор предположений на элементах A при помощи assumptions.

assumptions(A)
ans = (0<A110<A120<A210<A22)[0 <A11, 0 <A12, 0 <A21, 0 <A22]

Очистите весь ранее предположения набора на элементах символьной матрицы при помощи assume.

assume(A,'clear');
assumptions(A)
 
ans =
 
Empty sym: 1-by-0
 

Решите то же уравнение снова.

solve(A(1,1)^2-1, A(1,1))
ans = 

(-11)[-sym (1); sym (1)]

Преобразуйте pi к символьному значению.

Выберите метод преобразования путем определения дополнительного второго аргумента, который может быть 'r'FD, или 'e'. Значением по умолчанию является 'r'. Смотрите раздел Input Arguments для получения дополнительной информации о методах преобразования.

r = sym(pi)
r = πsym(pi)
f = sym(pi,'f')
f = 

884279719003555281474976710656sym ('884279719003555/281474976710656')

d = sym(pi,'d')
d = 3.1415926535897931159979634685442vpa ('3.1415926535897931159979634685442')
e = sym(pi,'e')
e = 

π-198eps359sym (пи) - (198*eps)/359

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

свернуть все

Имя переменной в виде вектора символов. Аргумент x должно быть допустимое имя переменной. Таким образом, x должен начаться с буквы и может содержать только алфавитно-цифровые символы и символы нижнего подчеркивания. Чтобы проверить, что имя является допустимым именем переменной, использовать isvarname.

Пример: x, y123, z_1

Анонимная функция в виде указателя функции MATLAB. Для получения дополнительной информации см. Анонимные функции.

Пример: h = @(x)sin(x); symexpr = sym(h)

Префикс для автоматически сгенерированных элементов матрицы в виде вектора символов. Аргумент a должно быть допустимое имя переменной. Таким образом, a должен начаться с буквы и может содержать только алфавитно-цифровые символы и символы нижнего подчеркивания. Чтобы проверить, что имя является допустимым именем переменной, использовать isvarname.

Пример: aBA, B, C

Вектор, матрица или измерения массива в виде вектора из целых чисел. Как ярлык, можно создать квадратную матрицу путем определения только одного целого числа. Например, A = sym('A',3) создает квадрат 3- 3 матрица.

Пример: [2 3], [2,3], [2;3]

Предположения на символьной переменной или матрице в виде вектора символов, массива строк или массива ячеек. Доступными предположениями является 'integer', 'rational'действительный, или 'positive'.

Можно объединить несколько предположений путем определения массива строк или массива ячеек из символьных векторов. Например, примите положительное рациональное значение путем определения set как ["positive" "rational"] или {'positive','rational'}.

Пример: 'integer'

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

Пример: 10\Pi, catalan, hilb(3)

Метод преобразования в виде одного из символов перечислен в этой таблице.

'r'Когда sym использует рациональный режим, он преобразует числа с плавающей запятой, полученные путем выполнения выражений формы p/q, p*pi/q, sqrt(p), 2^q, и 10^q (для скромных размерных целых чисел p и q) к соответствующей символьной форме. Например, sym(1/10,'r') возвращает 1/10. Это эффективно компенсирует ошибку округления, вовлеченную в исходную оценку, но не может представлять значение с плавающей точкой точно. Если sym не может найти простое рациональное приближение, затем оно использует тот же метод, как оно использовало бы с флагом 'f'.
'd'Когда sym использует десятичный режим, он берет количество цифр от текущей установки digits. Преобразования меньше чем с 16 цифрами теряют некоторую точность, в то время как больше чем 16 цифр не могут быть гарантированы. Например, sym(4/3,'d') с 10-разрядной точностью возвращает 1.333333333, в то время как с 20-разрядной точностью это возвращает 1.3333333333333332593. Последний не заканчивает в 3s, но это - точное десятичное представление числа с плавающей запятой, самого близкого к 4/3.
'e'Когда sym использует оценочный ошибочный режим, он добавляет результат, полученный в рациональном режиме термином, включающим переменную eps. Этот термин оценивает различие между теоретическим рациональным выражением и его фактическим значением с плавающей точкой. Например, sym(3*pi/4,'e') возвращает (3*pi)/4 - (103*eps)/249.
'f'Когда sym использует с плавающей точкой для рационального режима, он возвращает символьную форму для всех значений в форме N*2^e или -N*2^e, где   N >= 0 и e целые числа. Возвращенное символьное число является точным рациональным числом, которое равно значению с плавающей точкой. Например, sym(1/10,'f') возвращает 3602879701896397/36028797018963968.

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

Пример: '1/10', '12/34'

Выходные аргументы

свернуть все

Переменная, возвращенная как символьная переменная.

Вектор или матрица с автоматически сгенерированными элементами, возвращенными как символьный вектор или матрица. Элементы этого вектора или матрицы не появляются в рабочем пространстве MATLAB.

Выражение или матрица, сгенерированная от анонимной функции MATLAB, возвращенной как символьное выражение или матрица.

Советы

  • Операторы как pi = sym(pi) и delta = sym('1/10') создайте символьные числа, которые избегают приближений с плавающей точкой, свойственных от значений pi и 1/10. pi созданный таким образом хранит символьное число в переменной рабочей области под названием pi, который временно заменяет встроенную числовую функцию на то же имя. Используйте clear pi восстановить представление с плавающей точкой pi.

  • sym всегда обработки i во входе вектора символов как идентификатор. Вводить мнимое число i, используйте 1i вместо этого.

  • clear x не очищает символьный объект его предположений, такой как действительный, положительный, или любых предположений, установленных assume, sym, или syms. Чтобы удалить предположения, используйте одну из этих опций:

    • assume(x,'clear') удаляет все предположения, влияющие на x.

    • clear all очищает все объекты в рабочем пространстве MATLAB и сбрасывает символьный механизм.

    • assume и assumeAlso обеспечьте больше гибкости для установки предположений на переменной.

  • Когда вы заменяете один или несколько элементов числового вектора или матрицы с символьным числом, MATLAB преобразует тот номер в номер с двойной точностью.

    A = eye(3);
    A(1,1) = sym(pi)
    A =
        3.1416         0         0
             0    1.0000         0
             0         0    1.0000

    Вы не можете заменить элементы числового вектора или матрицы с символьной переменной, выражением, или функционировать, потому что эти элементы не могут быть преобразованы в числа с двойной точностью. Например, A(1,1) = sym('a') выдает ошибку.

  • Когда вы используете синтаксис A = sym('a',[n1 ... nM]), sym функционируйте присваивает только символьный массив A к рабочему пространству MATLAB. Также присваивать автоматически сгенерированные элементы A, используйте syms функцию вместо этого. Например, syms a [1 3] создает вектор-строку a = [a1 a2 a3] и символьные переменные a1, a2, и a3 в рабочем пространстве MATLAB.

Альтернативная функциональность

Альтернативные подходы для создания символьных переменных

Чтобы создать несколько символьных переменных в одном вызове функции, использовать syms. Используя syms также очищает предположения от именованных переменных.

Вопросы совместимости

развернуть все

Поведение изменяется в R2020a

Ошибки, запускающиеся в R2018a

Представлено до R2006a