Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_Мат_Ч1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.13 Mб
Скачать

Генерация обычных векторов и матриц

При поэлементном формировании векторов и матриц их элементы заключаются в квадратные скобки [ ], элементы в одной строке отделяются друг от друга запятыми «,» или пробелами « «, разделителем строк служит символ «;» или клавиша [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 =

  1. 3

  1. 7

  1. 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) – формирует квадратную матрицу nn, состоящую из нулей;

zeros(m, n) – формирует матрицу mn, состоящую из нулей;

(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) – формирует единичную диагональную матрицу nn.

» 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