Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MATLAB00 / MaTLAB_Simvol_LAB

.doc
Скачиваний:
65
Добавлен:
09.04.2015
Размер:
179.2 Кб
Скачать

ЛАБОРАТОРНАЯ   РАБОТА №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 размера 33

% Вывод матрицы А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 размера 33 

% Вывод матрицы А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 % Задание символьной переменной х

 

» 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] с различными цветами по , , .

Соседние файлы в папке MATLAB00