Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Создание новых векторов и матриц на основе имеющихся.

Задание матриц

При задании матриц данные строк записываются через пробел или через запятую. Элементы разных строк разделяются знаком точка с запятой (;) или записываются каждая с новой строки.

Зададим матрицу:

>>A=[1 2 3; 4 5 6;7 8 9]

A =

1 2 3

4 5 6

7 8 9

Или

>> A=[1 2 3

4 5 6

7 8 9]

A =

1 2 3

4 5 6

7 8 9

Как мы уже знаем, обращение к элементу матрицы будет иметь следующий вид: <имя> (<индексы через запятую>), например, А(2,3).

Операции

Как уже говорилось, в ML можно не только выполнять обычные арифметические операции над числами и вычислять значения функций, но и производить операции над векторами и матрицами.

Для матриц Матлаб определяет операции:

Сложение и вычитание матриц

Умножение матрицы на число

Умножение матрицы на матрицу

Транспонирование, деление

Над матрицами возможны поэлементные операции и матричные, соответствующими правилам матричного исчисления.

При поэлементном умножении и делении матрицы должны быть одинаковых размеров. При матричных операциях их размеры должны быть согласованы.При умножении матриц число столбцов первой матрицы должно быть равно числу строк второй.Результат операций – матрица.

Все арифметические операции являются “матричными” и осуществляются по правилам матричной алгебры. (В ML возможно как выполнять операции поэлементной обработки, так и использовать операции, соответствующие правилам матричного исчисления.)

Кроме уже известных +, -, *, / и ^, в ML существуют операции транспонирования (ʹ)иобратного деления (\).

Зададим исходные матрицы:

>> A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

 

>> B=[1 1 1; 1 1 1]

B =

1 1 1

1 1 1

 

Например, транспонирование

>> A'

ans =

1 4

2 5

3 6

 

>> C=B'

C =

1 1

1 1

1 1

Если матрица содержит комплексные числа, то кроме транспонирования по операции ʹ выполняется комплексное сопряжение элементов.

Сложение и вычитание (по правилам матричной алгебры – поэлементно)

>> E=A+B% Размеры матриц должны совпадать

E =

2 3 4

5 6 7

Умножение (по правилам матричной алгебры)

Умножение матриц. При умножении A*B должно выполняться условие: число столбцов матрицы A равно числу строк матрицы B:

 

A(n, m) * B(m, k) → C(n, k)

 

Элементы результирующей матрицы вычисляются по правилу: каждый элемент строки матрицы A умножается на соответствующий элемент столбца матрицы B, затем произведения складываются и получается один элемент матрицы С:

 

При использовании операций над матрицами (и векторами) необходимо соблюдать правила согласования их размеров. Например, можно перемножить матрицу A размера 2х3 на матрицу C размера 3х2, т.к. они согласованы по размеру.

>> Y=A*C%Размеры матриц должны согласовываться

Y =

6 6

15 15

Если попытаться перемножить две матрицы в наших примерах, матрицу A (размер 2х3) и матрицу B (размер 2х3), то будет выведено сообщение об ошибке:

>> X=A*B%размеры не согласованы

??? Error using ==> *

Inner matrix dimensions must agree.

Возведение в степень. Если возвести матрицу A в квадрат, то выдается сообщение об ошибке.

>> Z=A^2 % A^2=A*A

??? Error using ==> ^

Matrix must be square.

Матричное возведениев степень возможно только для квадратныхматриц.

Например,

>> Z=[1 2;3 4]

Z =

1 2

3 4

>> Z^2

ans =

7 10

15 22

При необходимости поэлементного выполнения операций над матрицами и векторами перед знаками операций ^, *, /, \ следует ставить точку: .^, .*, ./, .\

При поэлементном умножении матриц результат получается другой:

Например,

>> X=A.*B % Размеры матриц должны совпадать. У нас обе матрицы одинакового размера 2х3.

X =

1 2 3

4 5 6

Поэлементное возведение в степень:

>> Z=A.^2

Z =

1 4 9

16 25 36

Транспонированиетоже бывает с точкой, тогда для комплексных чисел оно выполняется без комплексного сопряжения.

Деление (правое и левое).В ML имеются две разновидности операции деления матриц: правое (/) и левое (\).

Операция левого деления – это «обратное деление»

Правое (обычное)деление:

>> Z=A./B

Z =

1 2 3

4 5 6

Поэлементное обратное деление (.\) – деление 2-го операнда на первый. Для наших матриц:

>> Z=B.\A

Z =

1 2 3

4 5 6

Используется при решении системы линейных уравнений.

В матричной алгебре

X= B/A = B*A-1 (решает уравнение X*A=B)

X= B\A = B-1 *A

X= A\B = A-1 *B (решает уравнение A*X=B)

С помощью этой операции решается система линейных уравнений.

С векторами и матрицами – иначе. Пусть A – матрица, а Х – вектор. А * Х = В и Х * А = В – разные уравнения.

Для решения уравнения Х * А = В используется обычное деление:

Х = B / A = В *А-1

Для решения уравнения А * Х = В используется обратное деление:

Х = А \ В = А-1 * В

Операция обратного деления используется для решения системы линейных уравнений. Например:

2x1 + 3x2 = 11

3x1 – 4x2 = 8

A – матрица коэффициентов левой части.

B – вектор правых частей.

Решается уравнение вида A*X=B:

 

>> A=[2 3;3 -4];

>> B=[11 8 ];

>> Х=A\B'

Х =

4.0000

1.0000

 

Для проверки можно выполнить умножение A*X:

 

>> A*X

ans =

11.0000

8.0000

 

В результате получили вектор правых частей, что доказывает правильность найденного решения.

 

Также возможно умножение и деление матрицы на число, результат – матрица.

>> Z=2*A

Z =

2 4 6

8 10 12

Операции отношения используются для поэлементного сравнения двух операндов (чисел, матриц, векторов одинакового размера). Результатом операции отношения может быть соответственно число, матрица или вектор, состоящие из элементов, обозначающих «истина» или «ложь». В ML это 1 и 0 соответственно:

>>A=[1 0 3; -2 5 -6];

>> B=[8 -9 1; 7 2 2];

>> A>B

ans =

0 1 1

0 1 0

В результате получили матрицу, каждый элемент которой имеет значение «истина» или «ложь»:

То же самое можно сказать о логических операциях. Логические операции могут использоватьсядля выполнения поэлементных логических операций над векторами и матрицами одинаковых размеров. К ним относятся логическое И(&), логическое ИЛИ (|), логическое НЕ (~).

Вектора и матрицы можно использовать как аргументы математических функций. Например, sin(X). Результатом будет вектор или матрица, элементы которого будут равны значению sin соответствующего элемента исходного вектора или матрицы. Элементарные функции от матриц вычисляются поэлементно.

>> F=log(A)

F =

0 0.6931 1.0986

1.3863 1.6094 1.7918

>> E=2*sin(A.^2)

E =

1.6829 -1.5136 0.8242

-0.5758 -0.2647 -1.9836

Таким образом, над матрицами возможны поэлементные операции и матричные, соответствующими правилам матричного исчисления. При поэлементном умножении и делении, матрицы должны быть одинаковых размеров. При матричных операциях их размеры должны быть согласованы. Результат операций – матрица.

 

Операции над векторами

Поскольку вектор в Матлабе рассматривается как матрица из одной строки или одного столбца, то над векторами возможны те же операции, что и над матрицами, и для их выполнения также необходимо согласование размеров векторов.

Векторное исчисление предусматривает следующие операции над векторами: сложение и вычитание векторов одинакового размера, транспонирование векторов, умножение и деление вектора на число, вектора на вектор (одинакового размера, если один из них вектор–столбец, другой – вектор–строка или наоборот), скалярное и векторное произведение векторов. (векторное произведение выполняется для векторов длиной 3)

Операция + и - определена только для сложения/ вычитания одинаковых векторов (можно суммировать или вычитать вектор - строки или вектор – столбцы одинаковой длины).

Зададим 2 вектора:

>> X=[1 2 3]; %Исходные данные

>> Y=[4 5 6];

>> X+Y

ans =

5 7 9

Транспонирование

>>X'

ans =

Умножение вектора на число осуществляется обычной операцией *

>> b=5;

>> X*b

ans =

5 10 15

>> b*X

ans =

5 10 15

Деление вектора на число производится операцией обычного деления (/). Деление числа на вектор невозможно.

>> X/b

ans =

0.2000 0.4000 0.6000

При делении числа на вектор- ошибка

>> b/X

??? Error using ==> mldivide

Matrix dimensions must agree.

Произведение 2-х векторов в математике можно вычислить только если они имеют одинаковую длину. Если один вектор-строка, а другой вектор-столбец, то результат – число.

Скалярное произведение

>> X*Y' % Скалярное произведение векторов - сумма произведений элементов с одинаковыми номерами (X1*Y1+X2*Y2+…)

ans =

Для вычисления скалярного произведение векторов X и Y можно воспользоваться функцией sum.

>> sum(X.*Y)

ans =

При умножении вектора-столбца на вектор-строку результат – матрица

>> X'*Y

ans =

4 5 6

8 10 12

12 15 18

Умножение вектора-строки на вектор-строку приводит к ошибке

>> X*Y

??? Error using ==> *

Inner matrix dimensions must agree.

Для векторов из 3-х элементов можно вычислить векторное произведение.

>> cross(X,Y)

ans =

-3 6 -3

Поэлементные операции

Все поэлементные операции выполняются только над векторами одинакового размера.

Выполнение операции Х^2 невозможно, т.к. Х^2=Х*Х, а умножать можно только строку на столбец или столбец на строку.

Возведение в степень возможно только поэлементноеХ.^2

>> X.^2

ans =

1 4 9

Результатом поэлементного умножения векторов является вектор из произведения соответствующих элементов исходных векторов.

>> A=[1 2 3];

>> B=[5 6 7];

>> A.*B

ans =

5 12 21

При попытке использовать обычное умножение – ошибка.

>> A*B

??? Error using ==> mtimes

Inner matrix dimensions must agree.

При умножении вектора на число:

>> A.*2

ans =

2 4 6

Деление (./)

>> A=[10 20 30];

>> B=[5 4 6];

>> A./B

ans =

2 5 5

Обратное деление (второго вектора на первый)

>> A=[10 20 30];

>> B=[5 4 6];

>> A.\B

ans =

0.5000 0.2000 0.2000

Возведение в степень

Возведем каждый элемент вектора в квадрат

>> B=[5 4 6];

>> B.^2

ans =

25 16 36

В данном случае каждый элемент исходного вектора возводится в квадрат. Выполнение команды B ^ 2 (без точки перед возведением в степень) невозможно, так как это противоречит правилам матричной алгебры. На экране будет:

??? Error using ==> mpower

Inputs must be a scalar and a square matrix.

Сложение и вычитание

Эти операции не требуют точки перед знаком операции.

>> B=[5 4 6];

>> B+2

ans =

7 6 8

>> B=[5 4 6];

>> A=[1 2 3];

>> B-A

ans =

4 2 3

Пример. Получитьтаблицу значений функции1-sin(x)^2 для x изменяющегося от -1 до 1 с шагом 0.5.

Для этого необходимо задать два вектора: вектор изменения значений аргумента (создается вектор с нижней границей -1, шагом изменения значения 0.5 и верхней границей изменения 1) и вектор значений функции.

>>A=-1:0.5:1

>>B=1-sin(A).^2

A =

-1.0000 -0.5000 0 0.5000 1.0000

B =

0.2919 0.7702 1.0000 0.7702 0.2919

Для красивого вывода в виде таблицы:

disp(' A B')

for i=1:length(A)

disp(sprintf('%5.2f %.4f',A(i),B(i)))

end

Получим

A B

-1.00 0.2919

-0.50 0.7702

0.00 1.0000

0.50 0.7702

1.00 0.2919

Особые матрицы

B ML можно не только задавать матрицы своими значениями или формировать их по формулам, но можно с помощью специальных функций получать особые матрицы:

Матрица случайных чисел:

rand(n, m) –формирует матрицу из n строк и m столбцов, заполненную случайными равномерно распределенными числами в интервале от 0 до 1.

rand(n) – формирует квадратную матрицу случайных чисел в диапазоне от 0 до 1. Существует еще функция randn (n), которая формирует случайные числа, распределенные по нормальному закону.

>>A=rand(3)

A =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

Можно задавать размер матрицы, используя вектор из двух элементов, равных числу строк и столбцов. Например,

>> B=rand([3 4]) % То же самое, что rand(3,4)

B =

0.9501 0.4860 0.4565 0.4447

0.2311 0.8913 0.0185 0.6154

0.6068 0.7621 0.8214 0.7919

>> G=randn(3)

G =

0.5377 0.8622 -0.4336

1.8339 0.3188 0.3426

-2.2588 -1.3077 3.5784

Если надо сгенерировать матрицу такого же размера, как и существующая матрица, то необходимо выполнить команду

>> rand(size(A))

ans =

0.4103 0.3529 0.1389

0.8936 0.8132 0.2028

0.0579 0.0099 0.1987

size(A) – функция, возвращающая размер матрицы А в виде вектора.

Магический квадрат (матрица, у которой суммы элементов в строках, столбцах и диагоналях одинаковы) – magic(n,m):

>> magic(3)

ans =

8 1 6

3 5 7

4 9 2

Единичная матрица– eye(n,m):

>> eye(3)

ans =

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

Для увеличения быстродействия работы программы бывает полезно заранеезадать размер матрицы, для этого создать матрицу с нулевыми элементами – zeros(n,m), а затем заполнять ее значениями.

Матрица из 1 – ones(n,m):

>> ones(3)

ans =

1 1 1

1 1 1

1 1 1

 

Задание матриц

При задании матриц данные строк записываются через пробел или через запятую. Элементы разных строк разделяются знаком точка с запятой (;) или записываются каждая с новой строки.

Зададим матрицу:

>>A=[1 2 3; 4 5 6;7 8 9]

A =

1 2 3

4 5 6

7 8 9

Или

>> A=[1 2 3

4 5 6

7 8 9]

A =

1 2 3

4 5 6

7 8 9

Как мы уже знаем, обращение к элементу матрицы будет иметь следующий вид: <имя> (<индексы через запятую>), например, А(2,3).

Операции

Как уже говорилось, в ML можно не только выполнять обычные арифметические операции над числами и вычислять значения функций, но и производить операции над векторами и матрицами.

Для матриц Матлаб определяет операции:

Сложение и вычитание матриц

Умножение матрицы на число

Умножение матрицы на матрицу

Транспонирование, деление

Над матрицами возможны поэлементные операции и матричные, соответствующими правилам матричного исчисления.

При поэлементном умножении и делении матрицы должны быть одинаковых размеров. При матричных операциях их размеры должны быть согласованы.При умножении матриц число столбцов первой матрицы должно быть равно числу строк второй.Результат операций – матрица.

Все арифметические операции являются “матричными” и осуществляются по правилам матричной алгебры. (В ML возможно как выполнять операции поэлементной обработки, так и использовать операции, соответствующие правилам матричного исчисления.)

Кроме уже известных +, -, *, / и ^, в ML существуют операции транспонирования (ʹ)иобратного деления (\).

Зададим исходные матрицы:

>> A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

 

>> B=[1 1 1; 1 1 1]

B =

1 1 1

1 1 1

 

Например, транспонирование

>> A'

ans =

1 4

2 5

3 6

 

>> C=B'

C =

1 1

1 1

1 1

Если матрица содержит комплексные числа, то кроме транспонирования по операции ʹ выполняется комплексное сопряжение элементов.

Сложение и вычитание (по правилам матричной алгебры – поэлементно)

>> E=A+B% Размеры матриц должны совпадать

E =

2 3 4

5 6 7

Умножение (по правилам матричной алгебры)

Умножение матриц. При умножении A*B должно выполняться условие: число столбцов матрицы A равно числу строк матрицы B:

 

A(n, m) * B(m, k) → C(n, k)

 

Элементы результирующей матрицы вычисляются по правилу: каждый элемент строки матрицы A умножается на соответствующий элемент столбца матрицы B, затем произведения складываются и получается один элемент матрицы С:

 

При использовании операций над матрицами (и векторами) необходимо соблюдать правила согласования их размеров. Например, можно перемножить матрицу A размера 2х3 на матрицу C размера 3х2, т.к. они согласованы по размеру.

>> Y=A*C%Размеры матриц должны согласовываться

Y =

6 6

15 15

Если попытаться перемножить две матрицы в наших примерах, матрицу A (размер 2х3) и матрицу B (размер 2х3), то будет выведено сообщение об ошибке:

>> X=A*B%размеры не согласованы

??? Error using ==> *

Inner matrix dimensions must agree.

Возведение в степень. Если возвести матрицу A в квадрат, то выдается сообщение об ошибке.

>> Z=A^2 % A^2=A*A

??? Error using ==> ^

Matrix must be square.

Матричное возведениев степень возможно только для квадратныхматриц.

Например,

>> Z=[1 2;3 4]

Z =

1 2

3 4

>> Z^2

ans =

7 10

15 22

При необходимости поэлементного выполнения операций над матрицами и векторами перед знаками операций ^, *, /, \ следует ставить точку: .^, .*, ./, .\

При поэлементном умножении матриц результат получается другой:

Например,

>> X=A.*B % Размеры матриц должны совпадать. У нас обе матрицы одинакового размера 2х3.

X =

1 2 3

4 5 6

Поэлементное возведение в степень:

>> Z=A.^2

Z =

1 4 9

16 25 36

Транспонированиетоже бывает с точкой, тогда для комплексных чисел оно выполняется без комплексного сопряжения.

Деление (правое и левое).В ML имеются две разновидности операции деления матриц: правое (/) и левое (\).

Операция левого деления – это «обратное деление»

Правое (обычное)деление:

>> Z=A./B

Z =

1 2 3

4 5 6

Поэлементное обратное деление (.\) – деление 2-го операнда на первый. Для наших матриц:

>> Z=B.\A

Z =

1 2 3

4 5 6

Используется при решении системы линейных уравнений.

В матричной алгебре

X= B/A = B*A-1 (решает уравнение X*A=B)

X= B\A = B-1 *A

X= A\B = A-1 *B (решает уравнение A*X=B)

С помощью этой операции решается система линейных уравнений.

С векторами и матрицами – иначе. Пусть A – матрица, а Х – вектор. А * Х = В и Х * А = В – разные уравнения.

Для решения уравнения Х * А = В используется обычное деление:

Х = B / A = В *А-1

Для решения уравнения А * Х = В используется обратное деление:

Х = А \ В = А-1 * В

Операция обратного деления используется для решения системы линейных уравнений. Например:

2x1 + 3x2 = 11

3x1 – 4x2 = 8

A – матрица коэффициентов левой части.

B – вектор правых частей.

Решается уравнение вида A*X=B:

 

>> A=[2 3;3 -4];

>> B=[11 8 ];

>> Х=A\B'

Х =

4.0000

1.0000

 

Для проверки можно выполнить умножение A*X:

 

>> A*X

ans =

11.0000

8.0000

 

В результате получили вектор правых частей, что доказывает правильность найденного решения.

 

Также возможно умножение и деление матрицы на число, результат – матрица.

>> Z=2*A

Z =

2 4 6

8 10 12

Операции отношения используются для поэлементного сравнения двух операндов (чисел, матриц, векторов одинакового размера). Результатом операции отношения может быть соответственно число, матрица или вектор, состоящие из элементов, обозначающих «истина» или «ложь». В ML это 1 и 0 соответственно:

>>A=[1 0 3; -2 5 -6];

>> B=[8 -9 1; 7 2 2];

>> A>B

ans =

0 1 1

0 1 0

В результате получили матрицу, каждый элемент которой имеет значение «истина» или «ложь»:

То же самое можно сказать о логических операциях. Логические операции могут использоватьсядля выполнения поэлементных логических операций над векторами и матрицами одинаковых размеров. К ним относятся логическое И(&), логическое ИЛИ (|), логическое НЕ (~).

Вектора и матрицы можно использовать как аргументы математических функций. Например, sin(X). Результатом будет вектор или матрица, элементы которого будут равны значению sin соответствующего элемента исходного вектора или матрицы. Элементарные функции от матриц вычисляются поэлементно.

>> F=log(A)

F =

0 0.6931 1.0986

1.3863 1.6094 1.7918

>> E=2*sin(A.^2)

E =

1.6829 -1.5136 0.8242

-0.5758 -0.2647 -1.9836

Таким образом, над матрицами возможны поэлементные операции и матричные, соответствующими правилам матричного исчисления. При поэлементном умножении и делении, матрицы должны быть одинаковых размеров. При матричных операциях их размеры должны быть согласованы. Результат операций – матрица.

 

Операции над векторами

Поскольку вектор в Матлабе рассматривается как матрица из одной строки или одного столбца, то над векторами возможны те же операции, что и над матрицами, и для их выполнения также необходимо согласование размеров векторов.

Векторное исчисление предусматривает следующие операции над векторами: сложение и вычитание векторов одинакового размера, транспонирование векторов, умножение и деление вектора на число, вектора на вектор (одинакового размера, если один из них вектор–столбец, другой – вектор–строка или наоборот), скалярное и векторное произведение векторов. (векторное произведение выполняется для векторов длиной 3)

Операция + и - определена только для сложения/ вычитания одинаковых векторов (можно суммировать или вычитать вектор - строки или вектор – столбцы одинаковой длины).

Зададим 2 вектора:

>> X=[1 2 3]; %Исходные данные

>> Y=[4 5 6];

>> X+Y

ans =

5 7 9

Транспонирование

>>X'

ans =

Умножение вектора на число осуществляется обычной операцией *

>> b=5;

>> X*b

ans =

5 10 15

>> b*X

ans =

5 10 15

Деление вектора на число производится операцией обычного деления (/). Деление числа на вектор невозможно.

>> X/b

ans =

0.2000 0.4000 0.6000

При делении числа на вектор- ошибка

>> b/X

??? Error using ==> mldivide

Matrix dimensions must agree.

Произведение 2-х векторов в математике можно вычислить только если они имеют одинаковую длину. Если один вектор-строка, а другой вектор-столбец, то результат – число.

Скалярное произведение

>> X*Y' % Скалярное произведение векторов - сумма произведений элементов с одинаковыми номерами (X1*Y1+X2*Y2+…)

ans =

Для вычисления скалярного произведение векторов X и Y можно воспользоваться функцией sum.

>> sum(X.*Y)

ans =

При умножении вектора-столбца на вектор-строку результат – матрица

>> X'*Y

ans =

4 5 6

8 10 12

12 15 18

Умножение вектора-строки на вектор-строку приводит к ошибке

>> X*Y

??? Error using ==> *

Inner matrix dimensions must agree.

Для векторов из 3-х элементов можно вычислить векторное произведение.

>> cross(X,Y)

ans =

-3 6 -3

Поэлементные операции

Все поэлементные операции выполняются только над векторами одинакового размера.

Выполнение операции Х^2 невозможно, т.к. Х^2=Х*Х, а умножать можно только строку на столбец или столбец на строку.

Возведение в степень возможно только поэлементноеХ.^2

>> X.^2

ans =

1 4 9

Результатом поэлементного умножения векторов является вектор из произведения соответствующих элементов исходных векторов.

>> A=[1 2 3];

>> B=[5 6 7];

>> A.*B

ans =

5 12 21

При попытке использовать обычное умножение – ошибка.

>> A*B

??? Error using ==> mtimes

Inner matrix dimensions must agree.

При умножении вектора на число:

>> A.*2

ans =

2 4 6

Деление (./)

>> A=[10 20 30];

>> B=[5 4 6];

>> A./B

ans =

2 5 5

Обратное деление (второго вектора на первый)

>> A=[10 20 30];

>> B=[5 4 6];

>> A.\B

ans =

0.5000 0.2000 0.2000

Возведение в степень

Возведем каждый элемент вектора в квадрат

>> B=[5 4 6];

>> B.^2

ans =

25 16 36

В данном случае каждый элемент исходного вектора возводится в квадрат. Выполнение команды B ^ 2 (без точки перед возведением в степень) невозможно, так как это противоречит правилам матричной алгебры. На экране будет:

??? Error using ==> mpower

Inputs must be a scalar and a square matrix.

Сложение и вычитание

Эти операции не требуют точки перед знаком операции.

>> B=[5 4 6];

>> B+2

ans =

7 6 8

>> B=[5 4 6];

>> A=[1 2 3];

>> B-A

ans =

4 2 3

Пример. Получитьтаблицу значений функции1-sin(x)^2 для x изменяющегося от -1 до 1 с шагом 0.5.

Для этого необходимо задать два вектора: вектор изменения значений аргумента (создается вектор с нижней границей -1, шагом изменения значения 0.5 и верхней границей изменения 1) и вектор значений функции.

>>A=-1:0.5:1

>>B=1-sin(A).^2

A =

-1.0000 -0.5000 0 0.5000 1.0000

B =

0.2919 0.7702 1.0000 0.7702 0.2919

Для красивого вывода в виде таблицы:

disp(' A B')

for i=1:length(A)

disp(sprintf('%5.2f %.4f',A(i),B(i)))

end

Получим

A B

-1.00 0.2919

-0.50 0.7702

0.00 1.0000

0.50 0.7702

1.00 0.2919

Особые матрицы

B ML можно не только задавать матрицы своими значениями или формировать их по формулам, но можно с помощью специальных функций получать особые матрицы:

Матрица случайных чисел:

rand(n, m) –формирует матрицу из n строк и m столбцов, заполненную случайными равномерно распределенными числами в интервале от 0 до 1.

rand(n) – формирует квадратную матрицу случайных чисел в диапазоне от 0 до 1. Существует еще функция randn (n), которая формирует случайные числа, распределенные по нормальному закону.

>>A=rand(3)

A =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

Можно задавать размер матрицы, используя вектор из двух элементов, равных числу строк и столбцов. Например,

>> B=rand([3 4]) % То же самое, что rand(3,4)

B =

0.9501 0.4860 0.4565 0.4447

0.2311 0.8913 0.0185 0.6154

0.6068 0.7621 0.8214 0.7919

>> G=randn(3)

G =

0.5377 0.8622 -0.4336

1.8339 0.3188 0.3426

-2.2588 -1.3077 3.5784

Если надо сгенерировать матрицу такого же размера, как и существующая матрица, то необходимо выполнить команду

>> rand(size(A))

ans =

0.4103 0.3529 0.1389

0.8936 0.8132 0.2028

0.0579 0.0099 0.1987

size(A) – функция, возвращающая размер матрицы А в виде вектора.

Магический квадрат (матрица, у которой суммы элементов в строках, столбцах и диагоналях одинаковы) – magic(n,m):

>> magic(3)

ans =

8 1 6

3 5 7

4 9 2

Единичная матрица– eye(n,m):

>> eye(3)

ans =

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

Для увеличения быстродействия работы программы бывает полезно заранеезадать размер матрицы, для этого создать матрицу с нулевыми элементами – zeros(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

Элементы одного массива могут быть использованы при создании нового вектора. Например,

>> A=[1 2 3];

>> B=[5,6,9];

>> C=[A(2),B(3),B(1),A(1)]

C =

2 9 5 1

Такой же принцип можно использовать и для матриц.

Матлаб позволяет объединять несколько матриц в одну.

Можно выполнить объединение матриц:

· погоризонтали

X Y

 

 

>> X=[1 2;3 4];

>> Y=[5 6;7 8];

>> Z=[X Y]

Z =

1 2 5 6

3 4 7 8

· по вертикали

X
Y

 

>>Z=[X;Y]

Z=

1 2

3 4

5 6

7 8

Размеры матриц должны быть согласованы.

Кроме того, для конкатенации матриц имеется специальная функция cat. Для горизонтального объединения следует записать cat(2,X,Y), а для вертикальной cat(1,X,Y),

В ML можно выделить отдельные фрагменты векторов или матриц. Для этого используются индексация с помощью двоеточия (операция :).

Например,

Из вектора 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

30 40

>> X(1:2,2:3)=Z

X =

3 10 20

4 30 40

2 8 3

Аналогично можно вставить фрагмент Z в верхний правый угол:

>> X(1:2,1:2)=Z

X =

10 20 20

30 40 40

2 8 3

Очень просто удалить, например, какой-либо столбец или строку в матрице.

Удалим 2-й столбец матрицы X. Для этого присвоим второму столбцу пустой массив.

>> X(:,2)=[] % Обращение X(:,2) означает все эл-ты 2 столбца

X =

3 20

4 40

2 3

Если бы потребовалось бы удалить, например, 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(1:5,1:5)=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

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 -1 -1 -1

Диагональная матрица. Это матрица, у которой недиагональные элементы не нулевые. Чтобы получить диагональную матрицу, необходимо задать вектор, количество элементов которого определит размер матрицы. Это может быть как вектор-столбец, так и вектор-строка. Значения вектора расположатся на главной диагонали:

>> Z=[1;2;3;4];

>> D=diag(Z)

D =

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

>> B=[1 2 3 4];

>> C=diag(B)

C =

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

Этой же функцией можно выделение диагонали из матрицы:

>> diag(C)

ans =

Результатвектор-столбец, состоящий из элементов, расположенных на главной диагонали. Иными словами, при использовании этой функции, если параметром является матрица, результатом будет вектор, а если параметр – вектор, результат – матрица.

Последнее изменение этой страницы: 2016-08-11

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...