Создайте символьные переменные, выражения, функции, матрицы
Поддержка векторов символов, которые не являются допустимыми именами переменной и которые не задают номер, была удалена. Чтобы создать символьные выражения, сначала создайте символьные переменные, и затем используйте операции на них. Например, используйте 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)
создает 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
.
sym(___,
создает символьную переменную или массив и устанавливает предположение, что переменная или все элементы массива принадлежат set
)set
. Здесь, set
может быть 'real'
, 'positive'
, 'integer'
или 'rational'
. Также можно объединить несколько предположений путем определения массива строк или массива ячеек из символьных векторов. Например, примите положительное рациональное значение путем определения set
как ["positive" "rational"]
или {'positive','rational'}
.
sym(
преобразовывает номер или числовую матрицу к символьному числу или символьную матрицу.num
)
Создайте символьные переменные 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
Преобразуйте 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
Операторы как 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
также очищает предположения от именованных переменных.