русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Оператор прерывания цикла break


Дата добавления: 2015-06-12; просмотров: 532; Нарушение авторских прав


 

Досрочное завершение циклов while или for осуществляется при помощи оператораbreak.

Пусть, например, требуется по заданному массиву x образовать новый массив y по правилу y(k) = x(k+1)/x(k) до первого нулевого элемента x(k), т. е. до тех пор, пока имеет смысл операция деления. Номер первого нулевого элемента в массиве x заранее неизвестен, более того, в массиве xможет и не быть нулей. Решение задачи состоит в последовательном вычислении элементов массива y и прекращении вычислений при обнаружении нулевого элемента в x. Следующая файл-функция демонстрирует работу оператора break:

function y=div(x)

for k=1:length(x)-1

if x(k)==0

break

end

y(k)=x(k+1)/x(k);

end

Справку по разделам 4.2 – 4.5 можно получить с помощью команды doc lang.

Пример сравнения быстродействия матричных и скалярных операций

 

За умножением векторов и матриц в смысле линейной алгебры в 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?

 



<== предыдущая лекция | следующая лекция ==>
Оператор переключения switch | ГЛАВА 5 ВЫСОКОУРОВНЕВАЯ ГРАФИКА


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.321 сек.