Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Пример сравнения быстродействия матричных и скалярных операций
За умножением векторов и матриц в смысле линейной алгебры в MATLAB закреплен знак <*>. Определение произведения прямоугольных матриц дано в разделе 1.10. Пример умножения матриц в матричной форме с помощью знака <*>: >> A=ones(3) A = 1 1 1 1 1 1 1 1 1 >> B=ones(3) B = 1 1 1 1 1 1 1 1 1 >> C=A*B C = 3 3 3 3 3 3 3 3 3 В традиционных языках программирования умножение матриц в смысле линейной алгебры осуществляется в скалярной форме с помощью вложенных циклов. Ниже приведен текст файл-функции умножения матриц D и E размера n×n в скалярной форме: function G=Matr(D,E,n) for i=1:n for j=1:n s=0; for k=1:n s=s+D(i,k)*E(k,j); end G(i,j)=s; end end Сохраним этот текст в Matr.m. Теперь с помощью файл-функции Matr.m скалярное умножение матриц А и В можно реализовать следующим образом: >> A=ones(3);B=ones(3); >> Matr(A,B,3) ans = 3 3 3 3 3 3 3 3 3 В этом примере умножение матриц осуществлено в скалярной форме. Результаты умножения матриц в матричной и скалярной формах совпадают. Сравним теперь быстродействие обеих форм умножения матриц с помощью набора команд tic и toc (см. разд. 1.7). Найдем оценку времени выполнения файл-функции Matr.m: >> A=ones(3);B=ones(3); >> tic,Matr(A,B,3);toc elapsed_time = Найдем теперь оценку времени умножения этих же матриц А и B в матричной форме: >> tic,A*B;,toc elapsed_time = Так как матрицы А и В имеют небольшой размер 3×3, то оценочное время выполнения умножения в обеих формах практически равно нулю. Проведем теперь сравнение по быстродействию операции умножения матриц А и В размером 1000×1000 с использованием этой операции в скалярной и в матричной формах: >> A=ones(1000);B=ones(1000); >> tic,Matr(A,B,1000);,toc elapsed_time = 313.9780 >> tic,A*B;toc elapsed_time = 8.5320 Следовательно, умножение в матричной форме матриц А и В размером 1000×1000 осуществляется в MATLAB примерно в ≈ 37 раз быстрее, чем в скалярной форме (независимо от быстродействия компьютера). В рассмотренных примерах использованы матрицы c единичными элементами. Это связано с простотой генерации матриц. Матрицы А и В автоматически созданы командой ones (см. разд. 2.4). Теперь создадим матрицы со случайными значениями элементов. Для этого используем встроенный генератор rand (см. разд. 2.4) равномерно распределенных случайных чисел. Оценка времени, которое затрачивается на выполнения их умножения в матричной форме составляет: >> A=rand(1000);B=rand(1000); >> tic,A*B;,toc elapsed_time = 8.7530 Результат 8,75 с. практически такой же, как и для матриц c единичными элементами того же размера (8,53 с.). Вывод: Там, где это возможно, вместо операторов цикла лучше применять матричные операции над массивами, которые исполняются в MATLAB намного быстрее. Вопросы для самопроверки 1. Какие операции отношения определены над числами в MATLAB? 2. Какие логические операции над вещественными числами определены в MATLAB? 3. Какова иерархия приоритетов в выполнении математических операций, операций отношения и логических операций? 4. Как работают циклы for, while? 5. Как используется конструкция if-elseif-else для изменения хода программы в зависимости от нескольких условий? 6. Как работают операторы switch, break?
Date: 2016-08-30; view: 259; Нарушение авторских прав |