И другие программы этой серии
Элементы матрицы Хессенберга, расположенные ниже первой поддиагонали,
равны нулю. Если матрица симметричная или эрмитова, то матрица Хессенберга
вырождается в трехдиагональную. Эта матрица имеет те же собственные значения,
что и оригинал, но для их вычисления необходимо меньшее количество операций.
Пример:
>> f=magic(4)
f=
В этих примерах используются матрицы A и B со случайными значениями эле
ментов, имеющие размер 1000?1000, то есть в примерах выполняется миллион
операций возведения в степень. Для вычисления затрат процессорного времени
можно использовать конструкцию tic,…,toc, на место многоточия которой по
мещается команда или группа команд, время вычисления которых нужно изме
рить. Для наших примеров:
232
>> clear all
>> tic, test1, toc
Elapsed time is 1.062000 seconds.
>> clear all
>> tic, test2, toc
Elapsed time is 0.891000 seconds.
Операции с векторами и матрицами
Урок 5
Типы данных – массивы
специального вида
5.1. Разреженные матрицы ......
5.2. Применение
разреженных матриц ...............
5.3. Функции разреженных
матриц .....................................
5.4. Многомерные массивы .....
5.5. Работа с размерностями
массивов .................................
5.6. Тип данных – структуры .....
5.7. Функции полей структур ....
5.8. Массивы ячеек ..................
5.9. Многомерные массивы
ячеек........................................
234
245
250
255
262
264
267
269
274
Результат в особых комментариях не нуждается – время вычисления для обо
их примеров различается всего 16%.
Возьмем еще пару примеров – на этот раз на операцию деления каждого эле
мента квадратной матрицы A на величину i*j во вложенном цикле:
Файл test3
Файл test4
A=rand(1000,1000);
for i=1:1000
for j=1:1000
A(i,j)=A(i,j)/(i*j);
end
end
>> clear all
>> tic, test3, toc
Elapsed time is 0.157000 seconds.
>> clear all
>> tic, test4, toc
Elapsed time is 0.157000 seconds.
A=rand(1000,1000);
row=[1:1000]
A=A./(row’*row)
Результаты исполнения этих тестов оказались вообще одинаковыми:
Можно также отметить, что практически теряет значения и предварительное
задание под большие матрицы памяти в ОЗУ.