Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Самоучитель Matlab

(3,4) 2

означает, что элемент матрицы, находящийся в 3-й строке и 4-м столбце, равен 2. Чтобы проверить эффект от экономии места, воспользуемся инструкцией с ключевым словом whos:

>> whos A B

Bytes

Class

Attributes

Name

Size

A

5x5

200

double

sparse

B

5x5

180

double

Тот же результат можно видеть в документе на рис. 4.21.

Рис. 4.21. Выделяемая для записи матриц память

В данном случае эффект от использования разреженной матрицы не очень существенный: на такую же обычную матрицу выделяется 200 байт, а на разреженную – 180. Эффект экономии имеет место только при работе с матрицами больших размеров.

На заметку

Чтобы увидеть разреженную матрицу во всей красе, то есть в обычном представлении, используют функцию full() с передачей ей аргументом разреженной матрицы.

Приведенный выше способ создания разреженной матрицы малополезен, поскольку подразумевает предварительное создание обычной матрицы. Обычно разумнее и удобнее сразу создавать разреженную матрицу. В этом случае также используется функция sparse(), но несколько иначе передаются аргументы. Первым и вторым аргументами указываются списки с индексами строк и столбцов для ненулевых элементов. Третий аргумент – список со значениями ненулевых элементов. Четвертый и пятый числовые аргументы задают количество строк и столбцов в разреженной матрице. Если эти аргументы не указать, то размеры матрицы определяются автоматически на основании списка ненулевых элементов. Рассмотрим такой код:

A=sparse([1,1,2,2,2,3,5],[1,2,1,3,5,1,4],[1,0,3,4,4,1,2],6,5)

176

Глава 4. Элементы матричной алгебры

Командой создается разреженная матрица размерами 6×5 (четвертый и пятый аргументы функции sparse()). Ненулевые элементы размещены на пересечении строк с номерами [1,1,2,2,2,3,5] (первый аргумент функции sparse()) и столбцов с номерами [1,2,1,3,5,1,4] (второй аргумент функции sparse()). Сами значения определяются списком [1,0,3,4,4,1,2] (третий аргумент функции sparse()). Это означает, что например, элемент A(1,1) равен 1, элемент A(1,2) равен 0, элемент A(2,1) равен 3 и так далее (рис. 4.22).

Рис. 4.22. Еще один способ создания разреженной матрицы

На заметку

При создании разреженной матрицы в приведенном выше примере один из элементов указан как нулевой (это элемент с индексами 1 и 2). При отображении списка значений разреженной матрицы в формате индексы/значение такие элементы игнорируются, несмотря на то, что они указывались при создании матрицы в явном виде.

177

Самоучитель Matlab

Некоторые примеры

Я бы не стал увязывать эти вопросы так перпендикулярно.

В. Черномырдин

В этом разделе рассмотрим некоторые примеры решения задач линейной алгебры с использованием средств Matlab. Более детально рассмотрим вопрос о вычислении матричных функций. В частности, вычислим разными способами матричный синус и матричный косинус.

Для вычисления матричного синуса, то есть синуса,

у

которого ар-

гумент

квадратная

 

 

ˆ

 

 

 

 

 

матрица A, используем следующую формулу:

ˆ

ˆ

 

ˆ3

 

 

ˆ5

 

k ˆ2k +1

k ˆ2k +1

 

A

 

A

 

(−1)

A

+... =

(−1)

A

 

 

sin(A)

= A

 

+

 

 

 

−... +

 

 

 

 

 

. Эта фор-

3!

5!

 

(2k

+1)!

(2k

+

1)!

 

 

 

 

 

 

k =0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мула является обобщением для матричного аргумента ряда Тейлора для синуса от скалярного аргумента. Процедуру вычисления такого ряда при

известной матрице ˆ реализуем с помощью специальной функции, код ко-

A

торой приведен ниже:

function M=SinM(A) M=A;

for i=1:100 M=M+(-1)^i*A^(2*i+1)/factorial(2*i+1);

end end

Функция называется SinM(), и у нее один аргумент, который обозначен как A. Как уже отмечалось, предполагается, что это квадратная матрица. Результат записывается в переменную, обозначенную в коде как M. Это тоже будет квадратная матрица. На начальном этапе командой M=A переменнойрезультату присваивается значение переменной-аргумента. Затем запускается оператор цикла, в котором командой M=M+(-1)^i*A^(2*i+1)/ factorial(2*i+1) к текущему значению переменной M добавляется очередное слагаемое ряда.

На заметку

Здесь мы использовали встроенную функцию factorial() для вычисления факториала числа. Для вычисления ряда используется 100 итераций в операторе цикла. Поэтому выражение для матричного синуса получается приближенное. Но если элементы матрицы-аргумента не очень большие, точность будет вполне приемлемой. Что касается самого алгоритма вычисления результата, то он не самый оптимальный, зато по сравнению с другими способами расчетов более наглядный.

178

Глава 4. Элементы матричной алгебры

Программный код функции SinM() в окне редактора m-файлов представлен на рис. 4.23.

Рис. 4.23. Программный код функции для вычисления матричного синуса

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

 

 

 

ˆ2

 

 

ˆ4

 

k ˆ2k

 

k ˆ2k

 

ˆ

ˆ

 

A

 

A

 

(−1) A

ˆ

+

(−1) A

 

cos(A) = E

2!

+

 

4 !

−... +

(2k)!

+... = E

(2k)!

. Здесь

 

 

 

 

 

 

k =1

 

 

 

 

 

 

 

 

 

 

 

 

 

через ˆ обозначена единичная матрица того же ранга, что и матрица ˆ. Про-

E A

граммный код функции CosM(), которой по матричному аргументу в качестве результата возвращается матричный косинус, имеет такой вид:

function M=CosM(A) n=length(A); E=eye(n);

M=E;

for i=1:100 M=M+(-1)^i*A^(2*i)/factorial(2*i);

end end

Здесь на начальном этапе командами n=length(A) и E=eye(n) определяется размер матрицы-аргумента и создается единичная матрица такого же размера. Матрица-результат в качестве начального значения получает единичную матрицу (команда M=E).

На заметку

Функцией length()возвращается количество столбцов в матрице-аргументе. Если матрица A квадратная, то количество столбцов равняется количеству строк. Обратите внимание также на то, что в операторе цикла поменялось выражение для слагаемого-добавки ряда.

179

Самоучитель Matlab

Программный код функции CosM() в окне редактора m-файлов представлен на рис. 4.24.

Рис. 4.24. Программный код функции для вычисления матричного косинуса

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

>> A=[pi/2 pi/3;pi/4 pi]

A =

1.5708 1.0472

0.7854 3.1416

>>SinM(A) ans =

0.6878 -0.5752 -0.4314 -0.1750

>>CosM(A)

ans =

0.1750 -0.5752 -0.4314 -0.6878

>> SinM(A)^2+CosM(A)^2 ans =

1.0000 0.0000

0.0000 1.0000

Сначала создаем квадратную матрицу A размерами 2×2. Затем командами SinM(A) и CosM(A) последовательно вычисляем матричный синус и косинус. Интересным может показаться результат вычисления выражения SinM(A)^2+CosM(A)^2. В результате получаем единичную матрицу. Уди-

180

Источник: https://studfile.net/preview/16433384/