- •Основные понятия Matlab
- •ВЫЧИСЛЕНИЯ
- •Особенности ввода команд и данных
- •Элементы данных в ML
- •Переменные в ML
- •Выражения
- •ОПЕРАЦИИ
- •Простейшие арифметические операции (АО)
- •Операции отношения
- •Логические операции
- •Приоритет элементарных операций в ML
- •Основные математические функции MatLab
- •Ввод и вывод информации. Операторы ввода/вывода
- •<имя переменной>= input(<текст>)
- •Для этого используют несколько способов.
- •disp(strcat('x=', num2str(x)))
- •y=sprintf('x=%3.1f ', x)
- •%[флаг][ширина поля вывода][точность] тип (спецификатор) формата
- •x=<значение>; y=<значение>; z=<значение>;
- •>> sprintf('x=%4.2f; y=%5.3f; z=%d;',x,y,z)
- •Условный оператор
- •МНОЖЕСТВЕННЫЙ ВЫБОР
- •Определенные циклы
- •Неопределенные циклы
- •ЗАДАНИЕ И ОБРАБОТКА ВЕКТОРОВ И МАТРИЦ
- •Способы задания векторов
- •<имя пер.>=[<значение1> <значение2> ….<значениеN>]
- •<имя пер.>=<нач. значение>:<шаг>:<конечное значение>
- •linspace (<нач. значение>,<кон. значение>,<кол. значений>)
- •Задание матриц
- •Операции
- •Операции над векторами – то же самое
- •Поэлементные операции
- •ОСОБЫЕ МАТРИЦЫ
- •Матрица случайных чисел:
- •Автоматическое заполнение матриц. Формирование матрицы блоками
- •>> X=[eye(4), 3*ones(4); 5*ones(4),9*eye(4)]
- •Дополнительно из задач
- •Применение функций обработки данных к векторам и матрицам
- •>> help datafun
- •Функции для векторов
- •Для матриц
- •Сумма элементов в столбцах матрицы:
- •Сумма элементов в строках матрицы:
- •Сумма элементов вектора:
- •Получение из матрицы вектора
- •Произведение элементов матрицы по столбцам:
- •Произведение элементов матрицы по строкам:
- •Максимальное значение в каждом столбце:
- •Максимальное значение в каждой строке:
- •Максимум во всей матрице
- •Наименьшее значение:
- •Среднее значение
- •Среднее арифметическое в столбцах. Результат – вектор-строка из средних арифметических в каждом столбце:
- •В строках
- •Сортировка.
- •по убыванию:
- •по убыванию
- •’’Зеркальное’’ отображение матрицы относительно вертикальной оси:
- •’’Зеркальное’’ отображение матрицы относительно горизонтальной оси:
- •Примеры использования
- •среднего и суммы:
- •Для матрицы:
- •Найти наибольшее значение среди элементов <8
- •Для матрицы
- •Сумму элементов побочной диагонали
- •Сумму элементов главной диагонали
- •Нормы матрицы
- •>> max_stolb=max(sum(abs(В)))
- •Найти среднее арифметическое в каждом столбце
- •Пр. Удалить максимальный элемент в векторе
- •Пр. Вставить значение 100 в вектор после элемента с номером k=3
- •Пр. В матрице поменять местами столбцы с минимальным и максимальным элементами.
- •[m_min,jmin]=min(min(b));
- •[m_max,jmax]=max(max(b));
- •buf=b(:, jmin);
- •Пр. Поменять порядок следования элементов в векторе
- •Еще полезные функции all, any и find и их использование
- •Для вектора
- •Получить индексы элементов, равных 2
- •Графика ML
- •Построение простейших графиков функций одной переменной Графики параметрических и кусочно-заданных функций
- •Plot(x, y, ‘<тип маркера, обозначение цвета и тип линий>’)
- •Отображение нескольких кривых на одном графике (в одних осях)
- •hold off
- •Вывод нескольких графиков в одном графическом окне
- •subplot(m, n, p),
- •Изменение масштаба графика
- •Диаграммы
- •Трехмерные графики
- •Т=-2:0.01:2; % задали вектор значений аргумента
- •Построение поверхности в 3-мерном пространстве
- •% Поверхность z=f(x,y)
- •Решение типовых математических задач
- •Файлы функций
- •function [рез.1, рез.2…рез.N] = <имя функции> (пар.1, пар.2,…пар.N)
- •[y1, y2,…,yn]=<имя функции>(<список вх. факт. параметров>)
- •<имя функции>(<список входных фактических параметров>)
- •function <имя функции> (пар.1, пар.2,…пар.n)
- •Отличия файла-функции от скрипт-файла
- •Примеры
- •function y=mysin(x)
- •Пример функции с 3 выходными параметрами
- •Использование функций для задач вычислительной математики
- •Построение графика функций
- •Действия с полиномами (многочленами)
- •Решение системы линейных уравнений.
- •Численное интегрирование
- •[i, n]=quadl (fun, a, b, tol, trace),
- •Решение уравнений
- •Нахождение минимума функции на заданном отрезке
- •Функция eval
- •Файл меню
- •while k~=6
- •Символьные вычисления в ML
- •Преобразование символьных выражений
- •Построение графиков символьных функций
- •Решение уравнений и систем
- •Решение дифференциальных уравнений и систем
- •Вычисление пределов
- •Определение производной
- •Вычисление интеграла
ОСОБЫЕ МАТРИЦЫ
B ML можно не только задавать матрицы своими значениями или формировать
их по формулам, но можно с помощью специальных функций получать особые
матрицы:
Матрица случайных чисел:
rand(n, m) – формирует матрицу из n строк и m столбцов, заполненную
случайными равномерно распределенными числами в интервале от 0 до 1.
rand(n) – формирует квадратную матрицу n*n случайных чисел в диапазоне от
0 до 1
>>A=rand(3)
A = |
|
|
|
|
|
|
0.95 |
0.48 |
0.45 |
|
|
|
|
01 |
60 |
65 |
|
|
|
|
0.23 |
0.89 |
0.01 |
|
|
|
|
11 |
13 |
85 |
|
|
|
|
0.60 |
0.76 |
0.82 |
|
|
|
|
68 |
21 |
14 |
|
|
|
|
|
|
|
|
|||
Существует еще |
функция |
randn (n), |
которая формирует |
случайные |
числа, |
распределенные по нормальному закону.
B=randn(4)
B = |
|
|
|
- |
0.671 |
0.488 |
0.29 |
0.124 |
5 |
9 |
39 |
1 |
|
|
|
1.489 |
- |
1.034 |
- |
7 |
1.207 |
7 |
0.787 |
|
5 |
|
3 |
1.409 |
0.717 |
0.726 |
0.88 |
0 |
2 |
9 |
84 |
1.417 |
1.630 |
- |
- |
2 |
2 |
0.303 |
1.147 |
|
|
4 |
1 |
Можно задавать размер матрицы, используя вектор из двух элементов, равных
числу строк и столбцов. Например,
>> С=rand([3 4]) % То же самое, что rand(3,4)
34
С = 0.95 |
0.48 |
0.456 |
0.44 |
01 |
60 |
5 |
47 |
0.23 |
0.89 |
0.018 |
0.61 |
11 |
13 |
5 |
54 |
0.60 |
0.76 |
0.821 |
0.79 |
68 |
21 |
4 |
19 |
Если надо сгенерировать матрицу такого же размера, как и существующая
матрица, то необходимо выполнить команду
>> rand(size(A))
ans = |
|
|
0.41 |
0.35 |
0.13 |
03 |
29 |
89 |
0.89 |
0.81 |
0.20 |
36 |
32 |
28 |
0.05 |
0.00 |
0.19 |
79 |
99 |
87 |
size(A) – функция, возвращающая размер матрицы А в виде вектора.
Формирование треугольной матрицы
>> tril(B) % формирует нижний треугольник
ans = |
|
|
|
-0.1241 |
0 |
0 |
0 |
1.4897 |
-1.2075 |
0 |
0 |
1.4090 |
0.7172 |
0.7269 |
0 |
1.4172 |
1.6302 |
-0.3034 |
-1.1471 |
>> triu(B) % формирует верхний треугольник
ans =
-0.1241 0.6715 0.4889 0.2939
0 -1.2075 1.0347 -0.7873
0 |
0 |
0.7269 |
0.8884 |
0 0 0 -1.1471
ans =
Магический квадрат (матрица, у которой суммы элементов в строках,
столбцах и диагоналях одинаковы) – magic(n,m):
>> magic(3)
35
ans = |
|
|
8 |
1 |
6 |
3 |
5 |
7 |
4 |
9 |
2 |
Единичная матрица – eye(n,m):
>> eye(3)
ans =
36
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
Матрица из 0 – zeros(n,m):
>> zeros(3)
ans = |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Для увеличения быстродействия работы программы бывает полезно заранее
задать размер матрицы, для этого создать матрицу с нулевыми элементами – ze-
ros(n,m), а затем заполнять ее значениями.
Матрица из 1 – ones(n,m):
>> ones(3)
ans = |
|
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Создание новых векторов и матриц на основе имеющихся.
Вектор можно задать также путём объединения нескольких векторов.
Например, даны три вектора A, B, C, получить вектор D: >>A=[1 2 3]; B=[4 5 6]; C=[7 8 9];
>>D=[A B C] % Объединение по горизонтали
D = |
|
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
>>D=[A; B; C] % Объединение по вертикали |
||||||||
D = |
|
|
|
|
|
|
|
|
1 |
|
2 |
|
|
|
|
|
|
3
Элементы одного массива могут быть использованы при создании нового вектора. Например,
>>A=[1 2 3];
>>B=[5,6,9];
37
>> C=[A(2),B(3),B(1),A(1)]
C =
2 9 5 1
Такой же принцип можно использовать и для матриц.
Матлаб позволяет объединять несколько матриц в одну.
Можно выполнить объединение матриц:
по горизонтали
XY
>>X=[1 2;3 4];
>>Y=[5 6;7 8];
>>Z=[X Y]
Z = |
|
|
|
|
1 |
5 |
6 |
|
|
|
по вертикали |
|||
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
Y |
|
>>Z=[X;Y] |
|
|
|
|
|
|
|
||
Z= |
|
|
|
|
1 |
2 |
|
|
|
3 |
4 |
|
|
|
5 |
6 |
|
|
|
7 |
8 |
|
|
|
Размеры матриц должны быть согласованы.
Кроме того, для конкатенации матриц имеется специальная функция cat. Для горизонтального объединения следует записать cat(2,X,Y), а для вертикальной cat(1,X,Y),
В ML можно выделить отдельные фрагменты векторов или матриц. Для этого используются индексация с помощью двоеточия (операция :).
Например,
38
Из вектора D [1 2 3 4 5 6 7 8 9] получить вектор, содержащий элементы
исходного вектора с номера 4 до номера 8.
>> F=D(4:8)
F =
4 5 6 7 8
Пусть имеем матрицу X
>> X=[3 5 8;4 1 9;2 8 3]
X = |
|
|
3 |
5 |
8 |
4 |
1 |
9 |
2 |
8 |
3 |
Получить новую матрицу Y, вырезкой из элементов матрицы X начиная с
элемента X(1,2) до X(3,3)
>> Y=X(1:3, 2:3)
Y = |
|
5 |
8 |
1 |
9 |
8 |
3 |
Можно заменить один фрагмент матрицы другим.
X = |
|
|
3 |
5 |
8 |
4 |
1 |
9 |
2 |
8 |
3 |
>> Z=[10 20; 30 40]
Z =
10 20
3040
>>X(1:2,2:3)=Z
X = |
|
|
3 |
10 |
20 |
4 |
30 |
40 |
2 |
8 |
3 |
Аналогично можно вставить фрагмент Z в верхний правый угол:
>>
X(1:2,1:2)=
39
Z X = |
|
|
|
10 |
|
20 |
20 |
30 |
|
40 |
40 |
2 |
8 |
3 |
|
Очень просто удалить, например, какой-либо столбец или строку в матрице.
Удалим 2-й столбец матрицы X. Для этого присвоим второму столбцу пустой
массив.
>> X(:,2)=[] % Обращение X(:,2) означает все эл-ты 2 столбца
X =
320
440
23
Если бы потребовалось бы удалить, например, 2-ю и 3-ю строки, то надо запи-
сать: |
|
|
X = |
|
|
3 |
10 |
20 |
4 |
30 |
40 |
2 |
8 |
3 |
>> X(2:3,:)=[]
X =
3 10 20
Если необходимо в матрице A 5х5 , состоящей из нулей, заменить значением
-1, например, элементы последней строки с третьего до последнего. Для этого
поступим так.
Сначала нужно создать матрицу из 0
>> A=zeros(5)
A = |
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Затем записать:
>> A(end, 3:end)=-1
A =
0 0 0 0 0
40
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- |
- |
- |
|
|
1 |
1 |
1 |
Преобразовать матрицу в вектор можно так:
X =
0.95 |
0.14 |
0.25 |
93 |
93 |
43 |
0.54 |
0.25 |
0.81 |
72 |
75 |
43 |
0.13 |
0.84 |
0.24 |
86 |
07 |
35 |
>> X(:) ans =
0.9593
0.5472
0.1386
0.1493
0.2575
0.8407
0.2543
0.8143
0.2435
Получили вектор столбец в порядке следования по столбцам.
Ранее мы строили таблицу значений функции. Теперь, имея знания о
векторах, можно для этого использовать такой способ:
disp(' |
A |
B') |
% заголовок |
A=-1:0.5:1; |
%1-ый вектор |
|
|
B=1-sin(A).^2; |
%2-ой вектор |
|
|
C=[A',B']; |
% |
матрица из двух столбцов |
|
disp(C) |
|
|
|
A |
|
B |
|
41
-0.291
1.009
00
-0.770
0.502
00
01.000
0
0.500.770
002
1.00 |
0.291 |
00 |
9 |
Диагональная матрица. Это матрица, у которой диагональные элементы задаются вектором, а недиагональные элементы нулевые. Чтобы получить диагональную матрицу, необходимо задать вектор, количество элементов которого определит размер матрицы. Это может быть как вектор-столбец, так и векторстрока. Значения вектора расположатся на главной диагонали:
Функция X = diag(V) формирует квадратную матрицу X с вектором V на главной диагонали.
Функция X = diag(V, k) формирует квадратную матрицу X порядка length(v)+abs(k) с вектором V на k-й диагонали. Диагональная матрица со смещенной на k позиций диагональю (положительные k - смещение вверх,
отрицательные - вниз), результатом является квадратная матрица размера length(V)+abs(k).
Обратное действие - выделение главной диагонали из матрицы в вектор
D=diag(A).
Выделение k-ой диагонали из матрицы в вектор D =diag(A,k),
при k > 0 это номер k-й верхней диагонали, при k < 0 это номер k-й нижней диагонали.
>>Z=1:4;
>>D=diag(Z) D =
1 |
0 |
0 |
0 |
0 |
2 |
0 |
0 |
42
0 |
0 |
3 |
0 |
0 |
0 |
0 |
4 |
Этой же функцией можно выделить диагональ из матрицы:
>> diag(D) ans =
1
2
3
4
Результат – вектор-столбец, состоящий из элементов, расположенных на
главной диагонали. Иными словами, при использовании этой функции, если параметром является матрица, результатом будет вектор, а если параметр – вектор, результат – матрица.
Сформируем трехдиагональную приведенную ниже матрицу размера 5х5, с ис-
пользованием функции diag.
1 |
- |
0 |
0 |
0 |
|
1 |
|
|
|
8 |
2 |
- |
0 |
0 |
|
|
2 |
|
|
0 |
8 |
3 |
- |
0 |
|
|
|
3 |
|
0 |
0 |
8 |
4 |
- |
|
|
|
|
4 |
0 |
0 |
0 |
8 |
5 |
Сначала сформируем вектор V из чисел от1 до 5. С помощью функции diag
сформируем 3 диагональные матрицы размера 5*5. Используем вектор V для создания диагональной матрицы и матрицы со смещенной на единицу вверх диагональю. Вектор из 4-х 8 сформируем так: 8*ones(1,4) и используем его первым аргументом функции diag, а -1 — вторым и получим третью вспомогательную матрицу. Теперь сформируем результирующую матрицу,
сложив все три
43
>>V=1:5;
>>R=diag(V)+diag(-V(1:4),1)+diag(8*ones(1,4),-1)
R = |
1 |
- |
0 |
0 |
0 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
8 |
2 |
- |
0 |
0 |
|
|
|
2 |
|
|
|
0 |
8 |
3 |
- |
0 |
|
|
|
|
3 |
|
|
0 |
0 |
8 |
4 |
- |
44