Лабораторная работа № 6
Базовые операции символьной математики
Системы MATLAB – SIMBOLIC MATHEMATICS TOOLBOX
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Создание символьных переменных и массивов
Первый способc помощью команды sym:
>> x=sym('x'); y=sym('y'); z=sym('z');
Второй способ с помощью команды syms:
>> syms a b c x y z;
Создание символьных матриц или массивов можно также осуществить двумя способами.
Первый способ. Определим матрицу А1 размера 3´3.
>> A1 = sym('[a1 b1 c1; d1 e1 f1; g1 h1 k1]');
>> A1 % После набора А1 нажать клавишу Enter
A1 =
[ a1, b1, c1]
[ d1, e1, f1]
[ g1, h1, k1]
Второй способ. Определим матрицу А2 размера 3´3.
>> syms a2 b2 c2 d2 e2 f2 g2 h2 k2
>> A2 = [a2 b2 c2; d2 e2 f2; g2 h2 k2];
>> A2
A2 =
[ a2, b2, c2]
[ d2, e2, f2]
[ g2, h2, k2]
Можно также определить символьные числовые матрицы и элементы:
>> Ac1=sym([1 3 7; 2 4 6; 1 7 5]); % Без апострофа
>> Ac1
Ac1 =
[ 1, 3, 7]
[ 2, 4, 6]
[ 1, 7, 5]
>> Ас2 = sym('7');
>> Ac2
Ac2 =
Определенные ранее матрицы можно, например, перемножить или сложить.
>> A11=Ac1*A1
A11 =
[ a1+3*d1+7*g1, b1+3*e1+7*h1, c1+3*f1+7*k1]
[ 2*a1+4*d1+6*g1, 2*b1+4*e1+6*h1, 2*c1+4*f1+6*k1]
|
|
[ a1+7*d1+5*g1, b1+7*e1+5*h1, c1+7*f1+5*k1]
>> A11=Ac1+A1 % Сложение числовой и символьной матрицы
A11 =
[ 1+a1, 3+b1, 7+c1]
[ 2+d1, 4+e1, 6+f1]
[ 1+g1, 7+h1, 5+k1]
>> A11=Ac1.*A1 % Поэлементное перемножение матриц одинакового размера
A11 =
[ a1, 3*b1, 7*c1]
[ 2*d1, 4*e1, 6*f1]
[ g1, 7*h1, 5*k1]
>> size(A1)
ans =
3 3
>> size(A11)
ans =
3 3
Детерминант символьной матрицы:
>> det(A1) % Без присвоения результата
ans =
a1*e1*k1-a1*f1*h1-d1*b1*k1+d1*c1*h1+g1*b1*f1-g1*c1*e1
>> D2=det(A2) % С присвоением результата ячейке под именем D2
D2 =
a2*e2*k2-a2*f2*h2-d2*b2*k2+d2*c2*h2+g2*b2*f2-g2*c2*e2
>> A1([1 2],[1 3])
ans =
[ a1, c1]
[ d1, f1]
>> det(A1([1 2],[1 3]))
ans =
a1*f1-c1*d1
Задание. В символьно-числовой матрице А11 удалить 2 столбец и 2 строку. Вычислить определитель полученной матрицы.
Выделение диагонали заданной символьной матрицы – diag.
>> A1
A1 =
[ a1, b1, c1]
[ d1, e1, f1]
[ g1, h1, k1]
>> diag(A1)
ans =
[ a1]
[ e1]
[ k1]
Создание символьной диагональной матрицы по заданной:
>> diag(diag(A1))
ans =
[ a1, 0, 0]
[ 0, e1, 0]
[ 0, 0, k1]
Примечание. К символьным матрицам возможно применение большинства команд MATLAB, которые существуют для числовых матриц. Например: rank, eig, triu, tril, inv, rref, poly.
Раскрытие скобок в символьном выражении – expand.
Пример 1.
>> w=(s+2)*(2*s-3)*(4*s^3-s+2)
w =
(s+2)*(2*s-3)*(4*s^3-s+2)
>> W=expand(w)
W =
8*s^5-26*s^3+3*s^2+4*s^4+8*s-12
Пример 2.
>> syms x y
>> expand(sin(x+y)) % Раскрытие синуса двух углов
ans =
sin(x)*cos(y)+cos(x)*sin(y)
Преобразование символьного выражения в полином с выделением коэффициентов при степенях заданных переменных – collect.
Пример 1.
>> syms x y z
>> collect(x^2*z-z^3*2*y+x^2*y+z^3*y-y*(z^3-x^2)-2)
ans =
(z+2*y)*x^2-2*z^3*y-2
Пример 2.
>> R=collect(x^2*z-z^3*2*y+x^2*y+z^3*y-y*(z^3-x^2)-2,y)
R =
(-2*z^3+2*x^2)*y+x^2*z-2
>> findsym(R)
ans =
x, y, z
Команда collect может заменять команду expand.
Пример 3.
|
|
>> Exp=expand((x-2)*(x^2+2+x)*(x-3)*(x+4))
Exp =
x^5-13*x^3+8*x^2-4*x+48
>> Col=collect((x-2)*(x^2+2+x)*(x-3)*(x+4))
Col =
x^5-13*x^3+8*x^2-4*x+48
Задание. Сравнить действие collect и expand по раскрытию выражения: (x-2)*(x+2*y)*(y+3*z+x).
Разложение символьного выражения на множители – factor.
>> factor(x^2-2*x*y+y^2)
ans =
(x-y)^2
>> factor(x^2-y^2)
ans =
(x-y)*(x+y)
Приведение к рациональной форме символьного выражения – numden. С помощью numden удобно производить алгебраические действия с дробями.
Пример. Сложение двух символьных дробей:
>> [n,d]=numden((x-y)/x+(x+y)/y)
n =
2*x*y-y^2+x^2
d =
x*y
Здесь n – числитель полученной дроби, d – знаменатель полученной дроби.
Вычисление числовых и символьных перестановок – perms.
Пример. Вывод комбинаций перестановок целых числовых значений от –1 до 1, т.е. –1, 0, 1
>> perms(-1:1)
ans =
-1 0 1
-1 1 0
0 -1 1
0 1 -1
1 0 -1
1 -1 0
Пример. Вывод комбинаций перестановок дробных числовых значений от –0.2 до – 0.1 с шагом 0.05
>> perms(-.2:.05:-.1)
ans =
-0.2000 -0.1500 -0.1000
-0.2000 -0.1000 -0.1500
-0.1500 -0.2000 -0.1000
-0.1500 -0.1000 -0.2000
-0.1000 -0.1500 -0.2000
-0.1000 -0.2000 -0.1500