Сделай Сам Свою Работу на 5

Оператор переключения switch

 

Ход работы программы может определяться значением некоторой переменной (переключателя). Такой альтернативный способ ветвления программы основан на использовании оператора переключения switch. Переменная-переключатель помещается после switch через пробел. Оператор switch содержит наборы команд, начинающиеся со слова case. После каждого case через пробел записывается то значение переключателя, при котором выполняется данный набор. Последний набор начинается со слова otherwise, его команды выполняются в том случае, когда ни один из наборов case не был выполнен. Если хотя бы один из наборов case выполнен, то происходит выход из оператора switсh и переход к команде, следующей за end.

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

function [m,p,s]=mpsum(x)

m=0;

p=0;

s=0;

for i=1:length(x)

switch x(i)

case -1

m=m+1;

case 1

p=p+1;

otherwise

s=s+x(i);

end

end

Набор case может быть выполнен не только при одном определенном значении переключателя, но и в том случае, когда переключатель принимает одно из нескольких допустимых значений. В этом случае значения указываются после слова case в фигурных скобках через запятую, например, case {1,2,3}.

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

 

Досрочное завершение циклов 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?

 

ГЛАВА 5 ВЫСОКОУРОВНЕВАЯ ГРАФИКА

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

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

Высокоуровневая графика позволяет пользователю получать результаты в графическом виде, прикладывая минимум усилий. Основную работу, связанную с построением графика, масштабированием осей, подбором цветов, а в случае 3-х мерной графики и с углом обзора наблюдаемого объекта берет на себя средаMATLAB.

В настоящей главе приводятся сведения, необходимые для построения графиков следующих типов:

графики на плоскости в декартовой системе координат;

трехмерные графики функций двух переменных в декартовой системе координат и особенности их построения.

Отдельно рассмотрены вопросы оформления графиков, их сохранения и экспорта, а также элементы анимации.

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

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

D графика

 

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

При графической визуализации параметрически заданных функций вначале для одинаковых значений t вычисляются значения функций х(t)иу(t), а затем строится график зависимости у(х).

Читатель должен знать, что главным условием создания и визуализации графических зависимостей в MATLAB является четкое понимание того, как в этой среде осуществляются поэлементные операции с векторами.



©2015- 2017 stydopedia.ru Все материалы защищены законодательством РФ.