
- •Введение
- •Основы программирования в среде пакета matlab Типы данных
- •Имена переменных и функций
- •Операция присваивания
- •Генерация обычных векторов и матриц
- •Операции над данными Стандартные функции Matlab
- •Манипуляции с матрицами
- •Операторы языка Matlab
- •Основные логические функции
- •Оператор выбора
- •Формирование собственных m-файлов пользователя
- •Глобальные переменные
- •Графические средства пакета matlab
- •Двухмерная графика
- •Трехмерная графика
Генерация обычных векторов и матриц
При поэлементном формировании векторов и матриц их элементы заключаются в квадратные скобки [ ], элементы в одной строке отделяются друг от друга запятыми «,» или пробелами « «, разделителем строк служит символ «;» или клавиша [Enter].
Например,
» x=[2 3 –8]; % Вектор-строка
» y=[5; 6.5; -2.23; 0]; % Вектор-столбец
» A=[1,2,3; 4 5 6]; % Матрица 2*3
» B=[1 2; 3 4; 5 6]; % Матрица 3*2
Равномерно распределенные векторы-строки можно создавать операцией вида
имя_перем = нач_знач : шаг : кон_зн
или
имя_перем = нач_знач : кон_знач
(по умолчанию шаг равен единице).
Например,
» z=2:5
z =
2 3 4 5
» w=-1:.5:1
w =
-1.0000 -0.5000 0 0.5000 1.0000
» c=[1:4; 2:5]
c =
1 2 3 4
2 3 4 5
Обращение к элементам массивов выполняется по имени массива и адресу, например:
» c(2,3)
ans =
4
» w(4)
ans =
0.5000
Использование вместо одного из индексов символа «:» означает, что соответствующий индекс принимает все свои значения. Это позволяет оперировать со строками и столбцами матриц как с векторами:
» c(:,3) % Третий столбец матрицы с
ans =
3
4
» c(2,:) % Вторая строка матрицы с
ans =
2 3 4 5
Использование в левой части оператора присваивания имени существующего массива с символом «:», заключенным в круглые скобки, означает присваивание массиву известной размерности заданных значений:
» c(:)=3:10
c =
3 5 7 9
4 6 8 10
Использование аналогичной конструкции в правой части оператора присваивания «вытягивает» массив постолбцово в один столбец:
» v=c(:)
v =
3
4
5
6
7
8
9
10
Пустые матрицы
Оператор присваивания
имя_перем = [ ]
определяет матрицу размерностью 0*0. Пустая матрица существует в рабочем пространстве (она присутствует в списке переменных, выводимых командами who и whos), но не занимает памяти (ее размер равен 0 байтам).
Пустые матрицы используют для удаления из матриц строк или столбцов, например:
» A=[1:4; 5:8; 9:12]
A =
1 2 3 4
5 6 7 8
9 10 11 12
» A(:,[2,4])=[ ]
A =
3
7
11
Операции над данными Стандартные функции Matlab
Все операции в Matlab ориентированы прежде всего на работу с матрицами, но могут выть использованы при работе с векторами и скалярными переменными.
Элементарные функции Matlab. К ним относятся следующие функции:
Тригонометрические:
sin(x) sinh(x) asin(x) asinh(x)
cos(x) cosh(x) acos(x) acosh(x)
tan(x) tanh(x) atan(x) atan2(x,y) atanh(x)
cot(x) coth(x) acot(x) acoth(x)
Экспоненциальные:
exp(x) log(x) log10(x) log2(x) pow2(x) sqrt(x)
Функции комплексного аргумента:
abs(z) – модуль комплексного числа; angle(z) – аргумент;
complex(x, y) – формирование комплексного числа x+y*i;
conj(z) – возвращает комплексно-сопряженное (по отношению к z) число;
real(z) – возвращает действительную часть; imag(z) – мнимую часть.
Функции округления и нецелочисленного деления:
fix(x) – округление в сторону к нулю, floor(x) – к –, ceil(x) – к +,
round(x) – до ближайшего целого;
mod(x, y) – остаток от деления x/y с учетом знака,
rem(x, y) – то же, без учета знака;
sign(x) – знак числа (+1/–1).
Элементарные функции, как и всякие другие, имеют один результат (массив). Элементарные функции могут быть использованы с одинаковым синтаксисом как для чисел, так и для массивов.
Пример 1. Разный тип параметров
» x=-8; X=[5 -1 -2]; A=[1 2 -3; -5 6 7]; z=3-4i;
» abs(x)
ans =
8
» abs(X)
ans =
5 1 2
» abs(A)
ans =
1 2 3
5 6 7
» abs(z)
ans =
5
Арифметические операции
Различают матричные и поэлементные арифметические операции.
+ – уточнение знака (унарная), сложение (бинарная);
– – изменение знака (унарная), вычитание (бинарная);
Поскольку математический смысл операций матричного и поэлементного сложения и вычитания идентичен:
C = A B означает
синтаксис матричных и поэлементных операций сложения и вычитания одинаков, в них используются одни и те же символы операций.
* – скалярное матричное умножение;
.* – поэлементное умножение;
^ – матричное возведение в степень;
.^ – поэлементное возведение в степень;
\ – матричное деление слева;
/ – матричное деление справа;
./ – поэлементное деление;
' – транспонирование (унарная);
.' – несопряженное транспонирование (унарная).
Все арифметические операции, за исключением указанных, являются бинарными.
В операциях +, –, .*, ./ и .^ либо оба операнда должны иметь одинаковую размерность, либо один из операндов должен быть скалярной величиной.
Например,
» A=[1 2 3; 4 5 6]; B=[7 8 9; 3 2 1];
» A+B
ans =
8 10 12
7 7 7
» B-A
ans =
6 6 6
-1 -3 -5
» A+2
ans =
3 4 5
6 7 8
» A.*B
ans =
7 16 27
12 10 6
» A.*2
ans =
2 4 6
8 10 12
» B./A
ans =
7.0000 4.0000 3.0000
0.7500 0.4000 0.1667
» B./10
ans =
0.7000 0.8000 0.9000
0.3000 0.2000 0.1000
» B.^A
ans =
7 64 729
81 32 1
» A.^2
ans =
1 4 9
16 25 36
Для операции * (матричное произведение) матрица-сомножитель2 должна иметь столько строк, сколько столбцов имеет матрица-сомножитель1:
Zm*n = Xm*k*Yk*n
Поэтому
» A*B
??? Error using ==> *
Inner matrix dimensions must agree.
» A*B'
ans =
50 10
122 28
» A'*B
ans =
19 16 13
29 26 23
39 36 33
Операции транспонирования ' и .' для матриц с действительными коэффициентами абсолютно равнозначны:
» D=[1 2; 3 4; 5 6];
» D'
ans =
1 3 5
2 4 6
» D.'
ans =
1 3 5
2 4 6
Для комплексных чисел и матриц с комплексными коэффициентами операция ' дает транспонированную сопряженную матрицу, а операция .' – транспонированную несопряженную:
» x=2+3i;
» xt=x'
xt =
2.0000 - 3.0000i
» xtt=x.'
xtt =
2.0000 + 3.0000i
» Ac=[1+2i 1+3i 1+4i; 2+3i 2+4i 2+5i];
» Act=Ac'
Act =
1.0000 - 2.0000i 2.0000 - 3.0000i
1.0000 - 3.0000i 2.0000 - 4.0000i
1.0000 - 4.0000i 2.0000 - 5.0000i
» Actt=Ac.'
Actt =
1.0000 + 2.0000i 2.0000 + 3.0000i
1.0000 + 3.0000i 2.0000 + 4.0000i
1.0000 + 4.0000i 2.0000 + 5.0000i
Операция ^ (матричное возведение в степень) выполняется только для квадратных матриц, и означает умножение матрицы саму на себя заданное число раз (второй операнд обязательно скаляр):
» D=[1 2; 3 4];
» D^2
ans =
7 10
15 22
» D^(-8.58)
ans =
1.0e+003 *
-0.9100 - 3.5442i 0.4163 + 1.6212i
0.6244 + 2.4318i -0.2856 - 1.1124i
Операция
» D^(-1)
ans =
-2.0000 1.0000
1.5000 -0.5000
генерирует обратную матрицу D-1.
Операция X/Y эквивалентна X*Y-1, операция X\Y – операции X-1*Y.
Последняя операция широко используется при решении систем линейных уравнений вида
Действительно, представив систему уравнений в матричной форме:
или
A * X = B,
и умножив обе части последнего уравнения на A-1 слева, получим:
A-1 * A * X = A-1 * B,
откуда решение системы уравнений:
X = A-1 * B.
Пример. Решить систему уравнений
Решение сводится к набору в интерактивном режиме следующих команд:
» A=[1 2; 4 5]; B=[3; 6];
» X=A\B
X =
-1
2
Проверку вычисления корней можно выполнить следующим образом:
» A*X
ans =
3
6
Логические операции
& – логическое "и" (0&0 – 0, 1&0 – 0, 0&1 – 0, 1&1 – 1);
| – логическое "или" (0|0 – 0, 1|0 – 1, 0|1 – 1, 1|1 – 1);
xor – логическое исключающее "или" (0xor0 – 0, 0xor1 – 1, 1xor0 – 1, 1xor1 – 0);
~ – логическое отрицание (~0 –1, ~1 – 0).
Если логические операции (а также логические функции) выполняются над действительными числами, то ложью считают число нуль, а истиной – все числа, не равные нулю.
Операции отношения (сравнения)
> – больше; >= – больше или равно; < – меньше; <= – меньше или равно;
= = – равно; ~= – не равно.
Результатом операций отношения является истина (1), если отношение верно, и ложь (0) – в противном случае.
При сравнении двух массивов одинакового размера результатом является массив того же размера, состоящий из нулей и единиц, как результатов поэлементных операций сравнения. Если же в этом случае один из операндов – скаляр, то каждый элемент массива поочередно сравнивается со скаляром.
» 2>1
ans =
1
» 1>=3
ans =
0
» A=[1 8 3; 6 2 5]; B=[4 3 1; 2 6 8];
» A>3
ans =
0 1 0
1 0 1
» A<B
ans =
1 0 0
0 1 1
Анализ размерности матриц
length(x) – возвращает длину вектора x;
size(A) – возвращает размеры матрицы A по каждому измерению.
» x=[2 5 8];
» A=[1 2 3; 4 5 6];
» nx=length(x)
nx =
3
» sx=size(x)
sx =
1 3
» [m,n]=size(A)
m =
2
n =
3
» m1=size(A,1)
m1 =
2
» n1=size(A,2)
n1 =
3
Дополнительно (не читать):
» m2=length(A)
m2 =
3
» m2=length(A')
m2 =
3
» B=[1 2; 3 4; 5 6; 7 8];
» lb=length(B)
lb =
4
Начиная с версии Matlab 5.0, для обращения к последнему элементу массива используется предопределенная переменная end:
» x(end)
ans =
8
» A(1,end)
ans =
3
» A(end,2)
ans =
5
Формирование специальных векторов и матриц
linspace(x0,xk) linspace(x0,xk,k)
– создают
вектор-строку x,
содержащий k
элементов (по умолчанию k=100),
равномерно распределенных на интервале
[x0;
xk].
Разница между двумя соседними элементами
есть величина постоянная: x(i)
– x(i-1)
= hx
= const.
При этом шаг hx=
.
logspace(d0,dk) logspace(d0,dk,k)
– создают
вектор-строку xl,
содержащий k
элементов (по умолчанию k=50),
равномерно распределенных вдоль
логарифмической оси на интервале [10d0,
10dk].
Шаг по показателю степени hd=
.
Отношение двух соседних элементов есть
величина постоянная
=10hd.
» x=linspace(10,40,4)
x =
10 20 30 40
» xl=logspace(1,4,4)
xl =
10 100 1000 10000
» log10(xl)
ans =
1.0000 2.0000 3.0000 4.0000
zeros – матрица, состоящая из нулей;
ones – матрица, состоящая из единиц;
rand – матрица, состоящая из случ. чисел с равномерным распределением;
randn – матрица, состоящая из случ. Чисел с нормальным распределением.
Формат обращения:
zeros(n) – формирует квадратную матрицу nn, состоящую из нулей;
zeros(m, n) – формирует матрицу mn, состоящую из нулей;
(zeros(1, n) – вектор-строка; zeros(m, 1) – вектор-столбец)
zeros(size(A)) – формирует матрицу, состоящую из нулей, той же размерности, что и матрица A.
Формат обращения к функциям ones, rand и randn аналогичный.
» Z=zeros(2)
Z =
0 0
0 0
» zeros(1,3)
ans =
0 0 0
» ones(size(Z))
ans =
1 1
1 1
Разницу между функциями rand и randn можно показать графически:
» xr=rand(1,100); xrs=sort(xr); bar(xrs)
» yr=randn(1,100); yrs=sort(yr); bar(yrs)
rand randn
eye(n) – формирует единичную диагональную матрицу nn.
» A=eye(3)
A= 1 0 0
0 1 0
0 0 1
diag(B) (B – двухмерная матрица) – выделяет главную диагональ матрицы B и помещает ее в вектор-столбец;
diag(x) (x – вектор) – формирует диагональную матрицу, используя вектор x в качестве главной диагонали.
» A=[1 2 3; 4 5 6; 7 8 9];
» v=diag(A)
v =
1
5
9
» Av=diag(v)
Av =
1 0 0
0 5 0
0 0 9