ТОП 10:

Алгоритмические операторы Matlab



 

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

Рассмотрим операторы m-файлов подробнее.

Оператор присваивания. Основным оператором системы программирования MatLab является оператор присваивания, имеющий следующую структуру:

ИмяПеременной=выражение

Оператор предназначен для идентификации переменных и обозначается символом =, слева от которого находится имя переменной, а справа арифметическое или строковое выражение (правила записи арифметических и строковых выражений были рассмотрены в п. 1.1.2). Приведем несколько примеров операторов присваивания (рис. 1.3.4-1).

 

 

Рис. 1.3.4-1. Примеры операторов присваивания

 

Все переменные, используемые в правой части оператора присваивания, должны быть предварительно определены. Если командная строка заканчивается символом точка с запятой (;), то результат выполнения оператора не выводится, иначе он выводится в следующей строке командного окна. Это замечание распространяется и на выполнение операторов присваивания, расположенных в m-файлах.

 

Операторы ввода данных. Ввод данных в Matlab может осуществляться как с использованием оператора присваивания (a=5;), так и с использованием функции ввода данных с клавиатуры:

ИмяПеременной= input ('Запроc');

Эта функция вводит выражение с клавиатуры, а результат заносится в переменную с именем a. В приведенном ниже примере в переменную a введено вначале числовое значение, а затем числовое выражение (рис. 1.3.4-2).

 

 

Рис. 1.3.4-2. Ввод данных с клавиатуры

 

Функция input()может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде:

 

input('Запроc', V);

При выполнении этой функции вычисления останавливаются в ожидании ввода строкового выражения. Введенное выражение выводится в следующей строке. Для вычисления выражения, заданного в символьном виде, использована функция eval(). Это иллюстрирует пример на рис. 1.3.4-3.

 

 

Рис. 1.3.4-3. Вычисление выражения, заданного в символьном виде

 

Условный оператор if…end. Условный оператор ifв общем виде записывается следующим образом:

 

ifЛогическоеВыражение1

Инструкции1

elselfУсловие2

ЛогическоеВыражение2

Else

ЛогическоеВыражение3

End

Правила записи логических выражений описано в Теме 1.1.

Эта конструкция допускает несколько частных вариантов. Простейшее – усеченное разветвление [x] имеет следующий вид:

 

ifЛогическоеВыражение

Инструкции

End

Напомним, что если ЛогическоеВыражение возвращает логическое значение 1 (то есть «Истина»), выполняются Инструкции, составляющие тело структуры if...end. При этом оператор end указывает на конец перечня инструкций. Инструкции в списке разделяют запятая или точка с запятой. Если ЛогическоеВыражение не выполняется (дает логическое значение 0, «Ложь»), то Инструкции также не выполняются.

Ниже приведен пример использования простейшего усеченного разветвления, реализованного с использования оператора if (рис. 1.3.4-4).

 

 

Рис. 1.3.4-4. Пример усеченного разветвления

 

Вторая частная конструкция напоминает стандартное разветвление [x]:

ifЛогическоеВыражение

Инструкции1

Else

Инструкции2

End

Здесь выполняются Инструкции1, если выполняется истинно
ЛогическоеВыражение
, или, в противном случае, выполняются
Инструкции2.

В примере, приведенном на рис. 1.3.4-5, рассматривается стандартное разветвление, реализованное с использованием оператора if.

 

 

Рис. 1.3.4-5. Пример стандартного разветвления

 

Из приведенного примера видно, что оператор ifможет быть как в одну строку, так и в несколько строк.

 

Рассмотрим пример более сложного - вложенного разветвления. Рассмотрим пример

 

причем, для того чтобы полностью отразить структуру сложного разветвления, не заботясь о переносе длинных командных строк, используем m-функцию (рис. 1.3.4-7). Подберем данные для проверки основного разветвления и обратимся к функции raz() с различными исходными данными (рис. 1.3.4-6).

 

 

Рис. 1.3.4-6. Обращение к функции raz()с различными исходными данными

 

 

Рис. 1.3.4-7. Функция, реализующая вложенное разветвление

Оператор множественного выбора – switch. Для осуществления множественного выбора используется следующая конструкция switch:

switchBыражение

caseЗачение_1

Список_инструкций_1

caseЗначение_2

Список_инструкций_2

caseЗначение_N

Список_инструкций_N

Otherwise

Список_инструкций_N+1

End

 

Если выражение после заголовка switch имеет значение одного из выражений Значение..., то выполняется блок операторов case, в противном случае — список инструкций после оператора otherwise. При выполнении блока case исполняются те списки инструкций, для которых Значение совпадает с Bыpaжением. Обратите внимание на то, что Значение может быть числом, константой, переменной, вектором ячеек или даже строчной переменной. Поясним использования оператора перебора switchследующим примером:

M-функция, реализующая множественное разветвление, приведена на рис. 1.3.4-8, а обращение к ней при исходных данных, позволяющих проверить каждую ветвь разветвления, показано на рис. 1.3.4-9.

 

Рис. 1.3.4-8. Функция, реализующая множественное разветвление

 

 

Рис. 1.3.4-9. Обращения к функции multifunc()

 

У функции multifunc(x,n) два параметра, причем второй играет роль индикатора, определяющего тип функциональной зависимости. Значение функции записывается в переменную y. Если n=1, то выполняется первый case-блок, если 2, то – второй, если n=2, 3 или 4, то – третий. Если же значение переменной n не совпадает ни с одним из перечисленных значений, то выполняется команда, расположенная после ключевого слова otherwise.

Оператор регулярного цикла – for...end. Оператор цикла типа for...end обычно используется для организации вычислений с заданным числом повторений циклов. Конструкция такого цикла имеет следующий вид:

for vаг = s:d:e

Инструкция1

….

ИнструкцияN

End

где s - начальное значение переменной цикла var, d - приращение этой переменной и е - конечное значение управляющей переменной, при превышении которого цикл завершается. Возможна и запись в виде s:е (в этом случае d=l). Список выполняемых в цикле инструкций завершается оператором end.

В качестве примера использования оператора for...end вычислим сумму элементов массива х, значения которого определены в командном окне с использованием m-функции summa()(рис. 1.3.4-10), параметром которой служит вектор x. Количество элементов массива х определяется функцией length. Кроме обращения к функции в командном окне предусмотрена проверка результата вычислений с использованием встроенной функции sum(x) (рис. 1.3.4-11).

Рис. 1.3.4-10. Функция, вычисляющая сумму элементов массива

 

Рис. 1.3.4-11. Обращение к функции summa() и встроенной функции sum()

 

В цикле может быть использован оператор continue, который передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. Оператор break может использоваться для досрочного прерывания выполнения цикла (например, при отладке участка программы). Как только он встречается в программе, цикл прерывается.

Кроме простых регулярных циклов в Matlab имеется возможность организации вложенных циклов. Рассмотрим пример формирования двумерного массива а, каждый элемент которого представляет сумму его индексов (рис. 1.3.4-12). Обращение к script-файлу vzikl приведено на рис. 1.3.4-13.

 

 

Рис. 1.3.4-12. Script-файл, иллюстрирующий вложенные циклы

 

Рис. 1.3.4-13. Обращение к script-файлу с именем vzikl

Оператор итеративного цикла – while…end. Общий вид структуры while…end выглядит следующим образом:

whileЛогическоеВыражение

Инструкции

End

Отличительной особенностью этой структуры является то, что инструкции, расположенные в теле структуры повторения, выполняются только в том случае, если некоторое ЛогическоеВыражение «истинно». Как только условие становится «ложным», происходит выход из структуры повторения, и управление передается на инструкцию, расположенную после ключевого слова end.

Приведем простой пример (рис. 1.3.4-14).

 

Рис. 1.3.4-14. Диалоговая программа, использующая оператор while…end

 

Эта программа, сохраненная в m-файле с именем primer11, служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r, где диалог реализован с помощью команды input.Cтроки, связанные с вводом переменной r и вычислением длины окружности, включены в управляющую структуру while...end. Это необходимо для циклического повторения вычислений при вводе различных значений r. Пока r>=0, цикл повторяется. Но стоит задать r<0, вычисление длины окружности перестает выполняться, а цикл завершается. Поскольку во второй строке программы величинаr определена равной 0, цикл повторяется хотя бы один раз.

Работа с программой в командном окне представлена на рис. 1.3.4-15.

 

Рис. 1.3.4-15. Обращения к программе вычисления длины окружности

 

В управляющих структурах, в частности в циклах forи while, часто используются операторы, влияющие на их выполнение. Так, оператор break может использоваться для досрочного прерывания выполнения цикла. Как только он встречается в программе, цикл прерывается.

Рассмотрим пример досрочного прерывания цикла при выполнении условия i=5 (рис. 1.3.4-16).

 

 

Рис. 1.3.4-16. Прерывание программы с применением оператора break

 

Оператор continue передает управление в следующую итерацию цикла, про­пуская операторы, которые записаны за ним, причем во вложенном цикле он пере­дает управление на следующую итерацию основного цикла. Ниже приведен пример вычисления суммы и произведения положительных элементов двумерного массива b(3,3) (рис. 1.3.4-17).

 

 

Рис. 1.3.4-17. Прерывание программы с применением оператора continue

Примеры решения задач с использованием

M-файлов

 

Пример 1.3.5-1. Даны n чисел . Требуется вычислить их сумму: где

Для решения поставленной задачи разработана функция fb(x), реализующая алгоритм вычисления текущего значения функции. Функция имеет один входной параметр – текущее значение элемента массива b и один выходной параметр – y(рис. 1.3.5-1). Обращение к функции происходит в цикле, организованном для вычисления суммы (рис. 1.3.5-2).

 

 

Рис. 1.3.5-1. Функция, реализующая алгоритм Примера 1.3.5-1

 

 

Рис. 1.3.5-2. Программа, реализующая вычисление суммы чисел

 

Для вычисления суммы значений функции создан script-файл с именем zadashа.m, в котором сначала заданы количество чисел (n=10) и вектор их значений (b), а затем организован регулярный цикл для обращения в функции fb() и вычисления суммы.

Вычисления производятся запуском script-файла путем набора в командной строке окна Command Window его имени zadasha. Результаты его выполнения выведены на рис. 1.3.5-3.

 

 

Рис. 1.3.5-3. Запуск script-файла zadasha на выполнение

 

Пример 1.3.5-2. Сформировать из произвольных чисел двумерный массив а(3,4). Вычислить и вывести одномерный массив b, каждый элемент которого есть среднее арифметическое элементов соответствующей строки массива а[].

На рис. 1.3.5-4 приведен script-файл с именем zadasha2, где введена матрица, а, состоящая из трех строк и четырех столбцов. Организован цикл по количеству формируемых элементов массива b путем обращения к функции sred_ar(). В функцию передается массив а, номер строки (i) и количество элементов в строке (m). Вывод элементов массива b предусмотрен в столбец.

 

 

Рис. 1.3.5-4. Программа формирования массива b

 

Функция sred_ar() (рис. 1.3.5-5) предназначена для формирования i-го элемента массива b, равного среднему арифметическому элементов строки массива а.

 

 

Рис. 1.3.5-5. Функция sred_ar(), вычисляющая среднее арифметическое
элементов строки массива a

 

В результате запуска script-файле с именем zadasha2в окно Command Windowвыводится столбец элементов массива b

 

 

Рис. 1.3.5-6. Запуск script-файла zadasha2

 

Пример. 1.3.5-3. Задать действительные числа a,b, натуральное n (a<b) и вычислить выражение , где , если

Решение задачи требует разработки двух функций: fab(a, h, i), предназначенной для вычисления i-го слагаемого (рис. 1.3.5-7) и sumf(a, h, n), предназначенной для вычисления заданного выражения (рис. 1.3.5-8).

 

 

Рис. 1.3.5-7. Функция fab(), вычисляющая значение i-го слагаемого

 

 

Рис. 1.3.5-8. Функция sumf(), вычисляющая заданное выражение

 

Запуск на выполнение осуществляется из командного окна к функции sumf(). Предварительно переменным a,b и n присваиваются числовые значения. Проверка правильности ввода исходных данных предусмотрена в функции sumf(). Вычисления выполняются, и результат выводится на экран только в случае, если b>a, иначе в командной строке появляется сообщение «Ошибка в исходных данных b<a» (рис. 1.3.5-9).

 

 

Рис. 1.3.5-9. Запуск функции sumf() на выполнение


Лабораторная работа по теме

«Средства алгоритмизации и программирования

В Matlab»

 

 

Вопросы, подлежащие изучению

1) Виды m-файлов.

2) Создание и сохранение новых, и открытие ранее созданных m-файлов.

3) Особенности script-файлов и m-функций.

4) Запуск на выполнение script-файла из текстового редактора.

5) Запуск на выполнение script-файла из командного окна.

6) Обращения к script-файлам и m-функциям.

7) Средства языка программирования в системе Matlab.

8) Основные операторы m-языка их назначение и форматы.

 

 

2. Общее задание

 

1) Изучите материал Темы 1.3 (п.п. 1.3.1 – 1.3.5).

2) Выберите индивидуальное задание из табл. 1.3.6-1.

3) Разработайте m-функции для реализации стандартных алгоритмов: вычисления конечных сумм, разветвлений, поиска минимума и максимума в последовательности данных и т.п.

4) Введите и сохранитеm-функции на внешнем носителе.

5) Создайте новый script-файл, в который введите код программы, описывающий логику решения поставленной задачи.

6) Сохраните script-файл в текущем каталоге.

7) Произведите отладку script-файла, запуская его на выполнение из текстового редактора командой Run.

8) Подготовьте и введите исходные данные для решения поставленной задачи;

9) Выполните script-файл из командной строки окна Command Window.

10) Сохраните текст рабочего окна на внешнем носителе.

11) Предоставьте результаты работы преподавателю, ответьте на поставленные вопросы.

12) Выполните команду clear all для очистки Рабочей среды.

13) Оформите отчет по выполненной работе.


Варианты индивидуальных заданий

 

Таблица 1.3.6-1

 

Задание
Ввести натуральное число nи вектор действительных чисел Найти: где
Вычислить где
Задать массив , состоящий из четного количества элементов. Каждая пара чисел , где i+1 кратно двум, задает координаты вершины ломаной. Построить ломаную, соединив при этом последнюю вершину с первой  
Ввести натуральное число n и вектор действительных чисел . Вычислить произведение , где
Ввести натуральное число n и действительное число х. Вычислить  
Ввести натуральное число n. Найти наибольшее среди значений , где k=1, 2,…,n, а также сумму всех полученных значений  
Ввести натуральное число n. Среди значений , где (i=1,2,…n), найти все положительные и вычислить их сумму  
Ввести натуральное число n и вектор действительных чисел . Определить, положительных или отрицательных чисел в векторе больше, и определить наибольшее из отрицательных и наименьшее из положительных чисел  
Ввести матрицу B(5,7) и сформировать из первых наибольших элементов строк вектор С(5). Вывести его элементы в строку и столбец  
Сформировать вектор по правилу: , где k=2,3,…, 7, если Найти сумму квадратов тех чисел, которые не превосходят 2
Ввести натуральное число n и вектор действительных чисел . Найти количество двух соседних положительных чисел и двух соседних чисел разного знака
Ввести квадратную матрицу А(4,4). Сформировать из максимальных элементов ее столбцов вектор X, вывести его элементы на экран в прямой и обратной последовательности
Ввести вектор целых чисел . Преобразовать его таким образом, чтобы сначала располагались нули, затем все остальные элементы. Определить сумму и количество элементов, значения которых кратно 5
Ввести вектор вещественных чисел . Создать из него массив x, каждый элемент которого максимальный из трех элементов, идущих подряд в массиве z
Сформировать матрицу А(4,4) по правилу: Найти и вывести значения и индексы двух одинаковых элементов. Если таковых не окажется, вывести сообщение
Сформировать матрицу D(3,2) по правилу: . Создать вектор из отрицательных элементов полученной матрицы  
Задать натуральное число n. Посчитать, какая из матриц размером nна n содержит больше положительных элементов, если их элементы формируются по правилу: Вывести на экран сформированные матрицы
Ввести квадратную матрицу вещественных чисел А(4,4). Найти сумму наибольших значений элементов ее строк. Сформировать новую матрицу В(4,4) путем умножения каждого элемента матрицы А на найденную сумму и делением его на определитель исходной матрицы
Ввести матрицу вещественных чисел А(4,7) и получить из нее вектор С(4), элементы которого это: · наибольший из элементов в первой строке; · наименьший из элементов во второй строке; · среднее арифметическое элементов третьей строки; · сумма элементов четвертой строки
Ввести натуральное число n и матрицу вещественных чисел С(n,n). Найти среднее арифметическое наибольшего и наименьшего значений ее элементов и, заменив этим значением диагональные элементы, вывести матрицу С на экран
Ввести натуральные числа k1, k2 и действительную матрицу размера 8х4. Поменять в матрице местами элементы k1 и k2 строк
Ввести натуральное число n и матрицу вещественных чисел С(n,9). Найти среднее арифметического каждого из столбцов, имеющих четные номера
Ввести векторы действительных чисел x(5), y(6),z(7). Вычислить величину t по следующему алгоритму:
Ввести векторы действительных чисел x(5). Получить для х=1, 3, 4 значения где
Ввести векторы действительных чисел x(10). Получить из него другой массив p(10), элементы которого упорядочены по возрастанию
Ввести матрицу вещественных чисел А(3,4). Заменить элементы строки матрицы с максимальной суммой значений элементов – единицами, с минимальной - двойками, а остальные элементы матрицы положить равными нулю
Сформировать матрицу А(4,4) по правилу Удалить из него столбцы, содержащие элементы, меньшие 10
Сформировать матрицу В(9,3) по правилу Определить наименьший элемент в каждой строке матрицы и записать его в соответствующий элемент вектора С. Вывести полученный вектор С
Ввести матрицу вещественных чисел А(3,4), все элементы которой различны. В каждой строке следует выбрать наибольшее и наименьшее значения, а сумму индексов столбцов, в которых они расположены, записать в соответствующий элемент вектора С(3)
Ввести матрицу вещественных чисел А(4,4). Получить последовательности элементов главной и побочной диагонали, создать из этих элементов векторы B(4) и C(4) и вывести их на экран

 

Содержание отчета

 

1) В форме комментариев:

· Название лабораторной работы

· ФИО студента, номер группы

· № варианта

· Индивидуальное задание

2) Протокол вычислений (сессии) в окне Command Window, снабженный необходимыми комментариями.

1.3.7. Контрольные вопросы по теме

 

1) Что такое script-файл и каковы его особенности?

2) Каким образом script-файл запускается на выполнение?

3) Что такое m-функция?

4) В чем отличие script-файла от m-функции?

5) Может ли m-функция иметь несколько выходных параметров?

6) Обращение к m-функции.

7) Формат оператора input().

8) Как с использованием оператора if…end реализовать стандартное, усеченное и вложенное разветвление?

9) Формат оператора множественного разветвления switch.

10) Формат оператора регулярного цикла for…end, особенности задания значений переменной цикла.

11) Назначение операторов continue и brek.

12) Оператор итеративного цикла while…end и его структура.


1.

Раздел 2. Технология решения
вычислительных задач средствами MatLab







Последнее изменение этой страницы: 2016-08-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.228.220.31 (0.026 с.)