Создайте символьные переменные, выражения, функции, матрицы
Поддержка векторов символов, которые не являются допустимыми именами переменной и которые не задают номер, была удалена. Чтобы создать символьные выражения, сначала создайте символьные переменные, и затем используйте операции на них. Например, используйте 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 также очищает предположения от именованных переменных.