MATLAB00 / MaTLAB_Simvol_LAB
.docЛАБОРАТОРНАЯ РАБОТА №4
I. Базовые операции символьной математики
системы MATLAB — SIMBOLIC MATHEMATICS TOOLBOX
1. Создание символьных переменных и массивов (x, y, z, a, b, c и т.д.).
Первый способ c помощью команды sym: x = sym('x'); y = sym('y'); z = sym('z');
Второй способ с помощью команды syms: syms a b c;
1.1. Создание символьных матриц А1 (А2) или массивов:
1-й способ: A1 = sym('[a1 b1 c1;d1 e1 f1;g1 h1 k1]'); % матрица А1 размера 33
% Вывод матрицы А1 в командной строке
» A1 % После набора А1 нажать клавишу Enter
A1 =
[ a1, b1, c1]
[ d1, e1, f1]
[ g1, h1, k1]
2-й способ: syms a b c d e f g h k
A2 = [a2 b2 c2;d2 e2 f2;g2 h2 k2]; % Матрица А2 размера 33
% Вывод матрицы А2 в командной строке
» A2
A2 =
[ a2, b2, c2]
[ d2, e2, f2]
[ g2, h2, k2]
1.2. Проверить рабочую область c помощью команды whos.
1.3. Символьные числовые матрицы и элементы:
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 =
7
1.4. Детерминант символьной матрицы — det:
» 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
» det(Ac1) % Детерминант символьной числовой матрицы
ans =
36
% Детерминант матрицы 2-го порядка A3=sym('[a1 b1;c1 d1]')
» det(A3)
ans =
a1*d1-b1*c1
1.5. Выделение диагонали заданной символьной матрицы:
» diag(A1)
ans =
[ a1]
[ e1]
[ k1]
1.6. Выделение диагонали символьной числовой матрицы
» diag(Ac1)
ans =
[ 1]
[ 4]
[ 5]
1.7. Создание символьной диагональной матрицы по заданной:
» diag(diag(A1))
ans =
[ a1, 0, 0]
[ 0, e1, 0]
[ 0, 0, k1]
1.8. Создание числовой символьной диагональной матрицы по заданной
» diag(diag(Ac1))
ans =
[ 1, 0, 0]
[ 0, 4, 0]
[ 0, 0, 5]
1.9. Вычисление собственных значений и собственных векторов символьно-числовой матрицы.
Собственные векторы — это такие векторы v, которые преобразуются матрицей А в векторы, отличающиеся от исходных лишь скалярным множителем s:
.
» A=sym([-1 0 0;2 -2 0;0 4 -2.5])
A =
[ -1, 0, 0]
[ 2, -2, 0]
[ 0, 4, -5/2]
% Вычисление собственных векторов и собственных значений квадратной матрицы А — eig
» [v,s]=eig(A)
v = % Матрица правых собственных векторов матрицы А
[ 0, 1, 0]
[ 1, 2, 0]
[ 8, 16/3, 1]
s = % Диагональная матрица собственных значений матрицы А
[ -2, 0, 0]
[ 0, -1, 0]
[ 0, 0, -5/2]
% Справедливо следующее спектральное разложение: ,
% Спектральное разложение может быть осуществлено по вектору столбцу, например
» A*v(:,2) % По второму столбцу
ans =
[ -1]
[ -2]
[ -16/3]
» v(:,2)*s(2,2) % По второму столбцу
ans =
[ -1]
[ -2]
[ -16/3]
% Первый собственный вектор v1 — это первый столбец матрицы v: v1=(0, 1, 8)
% Второй собственный вектор v2 — это второй столбец матрицы v: v2=(1, 2 ,16/3)
% Третий собственный вектор v3 — это третий столбец матрицы v: v3=(0, 0 ,1)
% Собственные числа матрицы А: s1=-2, s2=-1, s3=-5/2=-2.5
% Справедливы следующие соотношения:
A*v1=s1*v1; A*v2=s2*v2; A*v3=s3*v3.
Задание: Найти собственные векторы и собственные значения матрицы [7,-2,0;-2,6,-2;0,-2,5], проверить результат.
2. Графические построения символьных функций — ezplot.
2.1. 1-й способ. Область определения по умолчанию от -2*pi до 2*pi
» syms t % Определение символьной переменной
» f1=sin(t);
» ezplot(f1),grid
2.2. 2-й способ обращения к функции ezplot. Задаваемая область определения
» ezplot(f1,[-4*pi 6*pi]),grid
» ezplot(f1,[-7 9]),grid
2.3. 3-й способ обращения к функции ezplot. Определение функции под знаком ezplot
» ezplot(exp(-0.5*t)*cos(5*t),[0 9]),grid
2.4. 4-й способ обращения к функции ezplot.
» ezplot exp(-0.5*t)*cos(5*t) [0 9],grid
» ezplot sin(t)/t [-12 12],grid
3. Свойства собственнх значений матрицы:
где — след матрицы А, т.е. сумма элементов главной диагонали, — собственные значения матрицы А, , — размерность матрицы А.
% В системе MATLAB
» trace(A) % След матрицы А
» sum(eig(A)) % Сумма собственных значений матрицы А
» det(A) % Определитель матрицы А
» prod(eig(A)) % Произведение собственных значений матрицы А
4. Создание полиномов и характеристических полиномов.
4.1. Создание полинома по вектору заданных коэффициентов — poly2sym.
» c=[2 3 5 7 8];
» poly2sym(c) % Вектор коэффициентов может быть непосредственно введен в poly2sym
ans =
2*x^4+3*x^3+5*x^2+7*x+8
% Переменная х устанавливается по умолчанию. Другие переменные следует определять
» syms z
» c=[2 3 5 7 8]; % Можно определить и как вектор столбец
» poly2sym(c,z)
ans =
2*z^4+3*z^3+5*z^2+7*z+8
4.2. Характеристический полином заданной символьно-числовой матрицы
Характеристический полином определяется из следующего характеристического уравнения для заданной матрицы А:
где — единичная матрица
Каждое собственное число матрицы А удовлетворяет ее характеристическому уравнению
» A=sym([2 -4 5;0 7 -3;4 -3 6]);
» syms s % Задали символьную переменную s
» poly(A,s)
ans =
s^3-15*s^2+39*s+26
% Для чисто числовой матрицы функция poly определяет только строку коэффициентов
%характеристического полинома
Задание. Вычислить собственные значения матрицы А с присвоением результата и подставить каждое из собственных значений в полученный характеристический полином. Результат должен быть равен нулю. Использовать функцию упрощения результата вычислений simplify.
4.3. Выделение коэффициентов из заданного полинома — sym2poly.
» syms s
» p=poly2sym([1 3 4 6],s) % Формирование полинома с заданными коэффициентами
p =
s^3+3*s^2+4*s+6
» sym2poly(p) % Выделение вектор-строки коэффициентов из заданного полинома
ans =
1 3 4 6
% Полученную вектор-строку можно переопределить с присвоением
Задание. Сформировать характеристический полином по полученному вектору-строки с использованием функции poly2sym по переменной z.
5. Решение символьных конечных уравнений — solve.
5.1. Решение квадратного уравнения
—
» syms x % Задание символьной переменной х
» solve('x^2+2*x-8=0') % Формат записи решателя solve
ans =
[ -4]
[ 2]
» q=solve('x^2+2*x-8=0')
q =
[ -4]
[ 2]
—
» q=solve('x^2+2*x+8=0')
q=
[ -1+i*7^(1/2)]
[ -1-i*7^(1/2)] % Комплексное решение, i — мнимая единица
5.2. Решение нелинейных уравнений.
» qn=solve('x-sin(x)-0.25=0')
qn =
1.1712296525016659939038330755362
5.3. Решение систем нелинейных уравнений.
—
» [X1,X2]=solve('x1+3*log(x1)-x2^2=0,2*x1-x1*x2-5*x1+1=0');
» simplify([X2,X1]) % Для упрощения результата
5.4. Решение систем трансцендентных уравнений.
Пример. Решить следующую систему трансцендентных уравнений:
где t1, t2, t3 — искомые переменные.
syms t1 t2 t3
[T1,T2,T3]=solve('(1-0.5)*exp(t3)-2*exp(t2)+2*exp(t1)-1=0,(1-0.5)*exp(0.5*t3)-2*exp(0.5*t2)+2*exp(0.5*t1)-1=0,(1-0.5)*exp(0.25*t3)-2*exp(0.25*t2)+2*exp(0.25*t1)-1=0');
TT1=vpa(T1,4)
TT2=vpa(T2,4)
TT3=vpa(T3,4)
% Функция vpa используется для задания количества значащих цифр
O4=(1-0.5)*exp(T3(4))-2*exp(T2(4))+2*exp(T1(4))-1 % Для проверки
% Каждое из 6 решений должно удовлетворять любому из 3-х уравнений
II. Вычисление символьных выражений
с различным представлением результатов.
Вычисление пределов в MATLAB. Вычисление сумм, произведений.
Дифференцирование, интегрирование
в пакете SIMBOLIC MATHEMATICS TOOLBOX.
1. Представление результата в виде рационального числа — 'r'.
1.1. Вычисление дроби 1/3:
» r1=sym(1/3,'r') % С присвоением результата
r1 =
1/3
1.2. Вычисление натурального логарифма от 3 — :
» r2=sym(log(3),'r')
r2 =
4947709893870347*2^(-52)
1.3. Вычисление десятичного логарифма от 3 — :
» r3=sym(log10(3),'r')
r3 =
8595052419864061*2^(-54)
1.4. Вычисление логарифма по основанию два от 3 — :
» r4=sym(log2(3),'r')
r4 =
7138036527644009*2^(-52)
Замечание: Представление в виде рационального числа имеет формат либо p/q либо p*2^q, где p, q — целые числа.
2. Представление результата в виде числа с плавающей точкой — 'f'.
Все величины представляются в форме '1.F'*2^(e) или '-1.F'*2^(e), где F — это ряд из 13 шестнадцатиричных цифр, а e — целое число. В случае, когда результат вычисления не может быть представлен точно в форме с плавающей точкой, то выводятся буквы, имеющие то или иное назначение в интерпретации результата.
2.1. Вычисление дроби 1/2:
» f1=sym(1/2,'f') % Формат записи
f1 =
'1.0000000000000'*2^(-1)
% Результат записан в виде точного представления в арифметике с плавающей точкой
2.2. Вычисление дроби 1/5:
» f2=sym(1/5,'f')
f2 =
'1.999999999999a'*2^(-3)
% Результат записан в виде приближенного (буква а — approximately) представления в арифметике с плавающей точкой.
3. Рациональное число с оценкой погрешности полученного представления —'e'.
Рациональное представление добавляется переменной 'eps', которая оценивает разницу между теоретическим рациональным выражением (результатом) и его действительной величиной с плавающей точкой.
3.1. Вычислить дробь 1/2:
» e1=sym(1/2,'e')
e1 =
1/2 % Результат как и в случае рационального представления
3.2. Вычислить дробь 1/3:
» e2=sym(1/3,'e')
e2 =
1/3-eps/12
3.3. Вычислить выражение :
» e3=sym(log(5),'e')
e3 =
7248263982714163*2^(-52)
3.4. Вычислить дробь 3/33
» e3=sym(3/33,'e')
e3 =
1/11+eps/88
4. Формат десятичного числа — 'd'.
4.1. Вычислить дробь 1/3:
» d1=sym(1/3,'d')
d1 =
.33333333333333331482961625624739 % По умолчанию поддерживаются 16 цифр %мантиссы полученного числа
4.2. вычислить выражение :
» d2=sym(10^50,'d')
d2 =
.10000000000000000762976984109189e51
4.3. Вычислить дробь 1/3 с 23 знаками в мантиссе с использованием функции vpa:
» vpa(1/3,23)
ans =
.33333333333333333333333
4.4. Вычислить дробь 1/3 с 23 знаками в мантиссе с использованием vpa и digits
» digits(23)
» vpa(1/3)
ans =
.33333333333333333333333
% Использование только digits приводит к выводу результата с заданным количеством цифр, но %с ограниченной точностью (в формате 'd'):
» digits(23)
» sym(1/3,'d')
ans =
.33333333333333331482962
5. Вычисление пределов — limit.
Вычисление пределов от символьных выражений производится с помощью встроенной функции limit. Соответствие между традиционным математическим описанием и символьным системы MATLAB приводится в таблице 1.
|
Таблица 1 |
Традиционное математическое действие |
Команда MATLAB |
|
|
% предел слева |
|
% предел справа |
Примечание: символ бесконечность () в MATLAB записывается как inf. Неопределенное значение в MATLAB записывается как NaN.
5.1. Вычислить предел выражения :
» syms x
» y=sin(x)/x;
» y1=sin(x)/x;
» limit(y1)
ans =
1 % Предел отношения равен единицы
5.2. Вычислить предел выражения :
» y2=(1+1/x)^x;
» limit(y2,inf)
ans =
exp(1) % Ответ: число е в первой степени
5.3. Вычислить предел выражения при стремлении х к нулю слева:
» y3=1/x;
» limit(y3,x,0,'left')
ans =
-inf % Ответ: минус бесконечность
5.4. Вычислить предел выражения при стремлении х к нулю справа:
» y4=1/x;
» limit(y4,x,0,'right')
ans =
inf % Ответ: бесконечность (т.е. плюс бесконечность)
limit((sin(x+h)-sin(x))/h,h,0) returns cos(x)
5.5. Вычислить предел выражения :
» syms x h
» y5=(sin(x+h)-sin(x))/h;
» limit(y5,h,0) % Вычисление предела по одной из переменных — по h
ans =
cos(x)
6. Дифференцирование функций одной переменной — diff.
6.1. Найти производную функции по переменной х:
» y6=sin(x+h);
» diff(y6)
ans =
cos(x+h)
6.2. Найти производную функции по переменной х:
» diff(sin(x+h)/x) % Формат записи без предварительного присвоения
ans =
cos(x+h)/x-sin(x+h)/x^2
6.3. Найти производную функции по переменной h:
» diff(sin(x+h)/x,h) % В записи указывается имя символьной переменной, по которой
% производится дифференцирование
ans =
cos(x+h)/x
6.4. Найти вторую производную от функции по переменной h:
» diff(sin(x+h)/x,h,2)
ans =
-sin(x+h)/x
6.5. Найти вторую производную от функции по переменной х:
» diff(sin(x+h)/x,2) % Цифра два указывает на порядок производной
ans =
-sin(x+h)/x-2*cos(x+h)/x^2+2*sin(x+h)/x^3
6.6. Найти третью производную от функции по переменной h:
» diff(sin(x+h)/x,h,3)
ans =
-cos(x+h)/x
7. Интегрирование функции одной переменной — int.
7.1. Вычисление неопределенного интеграла:
% Вычислить интеграл :
» int(x^2)
ans =
1/3*x^3
% Вычислить интеграл :
» int((x+h)^2) % По умолчанию интегрирование ведется по переменной х
ans =
1/3*(x+h)^3
% Вычислить неопределенный интеграл от функции по переменной h:
» int((x+h)^2/x,h)
ans =
1/3*(x+h)^3/x
% Вычислить неопределенный интеграл от функции по переменной x:
» int((x+h)^2/x)
ans =
1/2*x^2+2*h*x+h^2*log(x) % В ответе имеется в виду натуральный логарифм
7.2. Вычисление определенного интеграла.
% Вычислить определенный интеграл :
» y7=int(x^2*sin(x),1,2*pi)
y7 =
-4*pi^2+2-cos(1)-2*sin(1)
» vpa(y7,5)
ans =
-39.702
% Вычислить определенный интеграл по переменной h:
» y8=int((x+h)^2*sin(x),h,1,2*pi)
y8 =
2*sin(x)*x^2*pi+4*sin(x)*x*pi^2+8/3*sin(x)*pi^3-sin(x)*x^2-sin(x)*x-1/3*sin(x)
» vpa(y8,5)
ans =
5.2832*sin(x)*x^2+38.479*sin(x)*x+82.353*sin(x)
8. Решение обыкновенных дифференциальных уравнений в символьном виде — dsolve.
Решатель дифференциальных уравнений может быть использован, если решение существует в аналитическом виде. Практически это означает, что решателем dsolve можно пользоваться только при поиске решения линейного дифференциального уравнения (или системы линейных уравнений).
8.1. Решить дифференциальное уравнение с начальным условием Построить график решения в интервале [-0.5, 7].
% Создадим следующий сценарий под именем sdif1:
%Решение диф.уравнения в символьном виде
x1=dsolve('Dx=-0.5*x','x(0)=10')
ezplot(x1,[-0.5,7]),grid,title('Диф.уравнение')
% Область построения графика решения можно задавать без квадратных скобок
8.2. Решить систему однородных дифференциальных уравнений с начальными условиями Построить график решения в интервале [-0.5, 13].
% Создадим следующий сценарий под именем sdif2:
[x1,x2]=dsolve('Dx1=-0.5*x2','Dx2=3*x1','x1(0)=0','x2(0)=1');
ezplot(x1,0,13),grid,hold on,ezplot(x2,[0,13]),title('Однородная система 2-х уравнений')
8.3. Решить систему неоднородных дифференциальных уравнений
с нулевыми начальными условиями и построить график решения в интервале [0, 5] для первой координаты и в интервале [0, 9] для второй координаты .
% Создадим следующий сценарий под именем sdif3:
[x1,x2]=dsolve('Dx1=-3*x1+12','Dx2=2.5*x1-1.25*х2','x1(0)=0',
'x2(0)=0');
ezplot(x1,[0,5]),grid,hold on,ezplot(x2,[0,9]),title('Неоднородная система 2-х уравнений')
8.4. Решить дифференциальное уравнение 2-го порядка с нулевыми начальными условиями и построить график решения в интервале [-0.2, 9].
% Создадим следующий сценарий под именем sdif4:
x=dsolve('2.5*D2x+3*Dx+5*x=12','Dx(0)=0','x(0)=0');
ezplot(x,[-0.2 9]),grid,title('Диф.уравнение 2-го порядка')
8.5. Решить дифференциальное уравнение 3-го порядка с нулевыми начальными условиями и построить график решения в интервале [-0.2, 21].
% Создадим следующий сценарий под именем sdif5:
x=dsolve('1.5*D3x+4*D2x+3*Dx+5*x=12','D2x(0)=0','Dx(0)=0','x(0)=0');
ezplot(x,[-0.2 21]),grid,title('Диф.уравнение 3-го порядка')
8.6. Решить неоднородную систему дифференциальных уравнений 3-го порядка
с нулевыми начальными условиями и построить график решения по каждой координате в одной системе координат в интервале [-1, 19] с различными цветами по , , .