exponenta event banner

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', 'integer', или '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

Создание символьного вектора 1 на 4 a с автоматически сгенерированными элементами 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(pi))

При создании символьных чисел с 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]

Создание символьных переменных 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 = (tZxRzQ1t0<y)[in(t, 'integer'), in(x, 'real'), in(z, 'rational'), 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', 'f', 'd', или 'e'. Значение по умолчанию: 'r'. Дополнительные сведения о методах преобразования см. в разделе «Входные аргументы».

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(pi) - (198*eps)/359

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

свернуть все

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

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

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

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

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

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

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

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

Допущения для символьной переменной или матрицы, задаваемые как символьный вектор, строковый массив или массив ячеек. Доступные допущения: 'integer', 'rational', 'real', или '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