sym

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

Поддержка векторов символов, которые не являются допустимыми именами переменной и которые не задают номер, была удалена. Чтобы создать символьные выражения, сначала создайте символьные переменные, и затем используйте операции на них. Например, используйте 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')
A = sym('a',[n1 ... nM])
A = sym('a',n)
sym(___,set)
sym(___,'clear')
sym(num)
sym(num,flag)
symexpr = sym(h)

Описание

пример

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

пример

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

пример

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

пример

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

пример

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

пример

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

пример

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

пример

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

Примеры

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

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

x = sym('x');
y = sym('y');

Создайте символьный вектор

Создайте символьный векторный 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_1, a1_2_1]
[ a2_1_1, a2_2_1]
A(:,:,2) =
[ a1_1_2, a1_2_2]
[ a2_1_2, a2_2_2]

Создайте символьные числа

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

inaccurate1 = sym(1/1234567)
accurate1 = 1/sym(1234567)

inaccurate2 = sym(sqrt(1234567))
accurate2 = sqrt(sym(1234567))

inaccurate3 = sym(exp(pi))
accurate3 = exp(sym(pi))
inaccurate1 =
7650239286923505/9444732965739290427392
accurate1 =
1/1234567

inaccurate2 =
4886716562018589/4398046511104
accurate2 =
1234567^(1/2)

inaccurate3 =
6513525919879993/281474976710656
accurate3 =
exp(pi)

Создайте большие символьные числа

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

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

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

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

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

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

h_expr = @(x)(sin(x) + cos(x));
sym_expr = sym(h_expr)
sym_expr =
cos(x) + sin(x)
h_matrix = @(x)(x*pascal(3));
sym_matrix = sym(h_matrix)
sym_matrix =
[ x,   x,   x]
[ x, 2*x, 3*x]
[ x, 3*x, 6*x]

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

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

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

Проверяйте предположения на x, y, z и t с помощью assumptions.

assumptions
ans =
[ in(x, 'real'), in(z, 'rational'), 1 <= t, 0 < y, in(t, 'integer')]

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

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

Установите предположения на элементах матрицы

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

A = sym('A%d%d',[2 2],'positive')
A =
[ A11, A12]
[ A21, A22]

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

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

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

assumptions(A)
ans =
[ 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 =
 -1
  1

Выберите Conversion Technique for Floating-Point Values

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

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

r = sym(pi)
f = sym(pi,'f')
d = sym(pi,'d')
e = sym(pi,'e')
r =
pi
 
f =
884279719003555/281474976710656
 
d =
3.1415926535897931159979634685442
 
e =
pi - (198*eps)/359

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

свернуть все

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

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

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

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

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

Пример: a, b, a_bc

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

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

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

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

Пример: 'integer'

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

Пример: 10, pi, hilb(3)

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

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

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

свернуть все

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

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

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

Советы

  • Операторы как pi = sym('pi') и delta = sym('1/10') создают символьные числа, которые избегают приближений с плавающей точкой, свойственных от значений pi и 1/10. 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 также очищает предположения от именованных переменных.

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