Бесконечный цикл matlab. Алгоритмические операторы Matlab




Циклы в matlab предполагает наличие условия, что команда или группа команд должны
повторяться несколько раз.

Самый простой способ создать цикл - это использовать
выражение for. Ниже показан простой пример, где вычисляется и отображается 10! = 10 * 9 * 8 ... * 2 * 1.

f = 1;
for n =2:10
f = f*n;
end

f =
3628800

Цикл в матлаб начинается с выражения for и заканчивается выражением end. Команда
между этими выражениями выполняется в целом девять раз, по одному разу для каждого
значения п от 2 до 10. Для прерывания промежуточного вывода внутри цикла мы
использовали точку с запятой. Чтобы увидеть конечный результат, необходимо
ввести f после завершения цикла. Если не использовать точку с запятой, программа
MATLAB будет отображать каждое промежуточное значение 2!, 3!, и т.д.

В модуле Editor (Редактор) команды for и end автоматически выделяются
синим цветом. Это придает лучшую читабельность, если вы вставляете между
ними команды (как мы это сделали); модуль Editor (Редактор) делает это
автоматически. Если вы введете for в окне Command Window (Командное окно),
программа MATLAB не выдаст новое приглашение командной строки >>, пока вы не
введете команду end, при которой программа MATLAB выполнит полный цикл и
отобразит новую командную строку.

  • Если вы используете цикл в М-файле-сценарии с эффектом отображения echo on, то команды будут отражаться каждый раз во всем цикле. Вы можете предотвратить это, вставив команду echo off прямо перед выражением end и команду echo on сразу после него; тогда каждая команда в цикле будет отражена один раз (кроме end).

Примечание: есть три вида циклов в матлаб, которые приведены ниже

1. Цикл for в Matlab

a=0;
for i=1:10
a=a+1;
end

2. Цикл while в Матлаб

a=0;
while a<10
a=a+1;
end

3. Цикл if в Матлаб

a=10;
if a==10
"первый случай"
else
"второй случай"
end

ans =
первый случай

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


Кафедра: Информационные технологии

ПРОГРАММИРОВАНИЕ В MATLAB


Операторы MATLAB

· Операторы цикла

Цикл for

Синтаксис

for count=start:step:final

команды MATLAB

Описание

count – переменная цикла,

start – ее начальное значение,

final – ее конечное значение,

step – шаг, на который увеличивается count при каждом следующем заходе в цикл

цикл заканчивается, как только значение count становится больше final.

Пример

Пусть требуется вывести семейство кривых для x€ , которое задано функцией, зависящей от параметра

y (x, a) = e -ax sin x,

для значений параметра а от -0.1 до 0.1. Ниже приведен листинг файл-программы для вывода семейства кривых.

Листинг программы

x = ;

for a = -0.1:0.02:0.1

y = exp (-a*x).*sin(x);

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

Цикл while

Синтаксис

while условие цикла

команды MATLAB

Описание

Цикл работает, пока выполняется (истинно) условие цикла. Для задания условия выполнения цикла допустимы следующие операции отношения:

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


Пример

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

Условный оператор if

Синтаксис

if условие

команды MATLAB

Описание

Если условие верно, то выполняются команды MATLAB, размещенные между ifи end, а если условие не верно, то происходит переход к командам, расположенных после end.

Пример

Условный оператор elseif

Синтаксис

if условие1

elseif условие2

………………………

elseif условиеn

Описание

В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else.

Пример

Оператор switch

Синтаксис

switch переменная

case значение1

case значение2

……………………

caseзначениеn


Каждая ветвь определяется оператором case, переход в нее выполняется тогда, когда переменная оператора switch принимает значение, указанное после case, или одно из значение из списка case. После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других case, уже не проверяются. Если подходящих значений для переменной не нашлось, то выполняется ветвь программы, соответствующая otherwise.

Пример

Прерывания цикла. Исключительные ситуации.

Оператор break

Синтаксис

Оператор break используется при организации циклических вычислений: for…end, while…end. При выполнении условия

if условие

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

Обработка исключительных ситуаций, оператор try catch

Синтаксис

операторы, выполнение которых

может привести к ошибке

операторы, которые следует выполнить

при возникновении ошибки в блоке

между try и catch

Описание

Конструкция try…catch позволяет обойти исключительные ситуации (ошибки, приводящие к окончанию работы программы, например, обращение к несуществующему файлу) и предпринять некоторые действия в случае их возникновения.

Пример

Сервисные функции

disp осуществляет вывод текста или значения переменной в командное окно

input – осуществляет запрос на ввод с клавиатуры. Используется при создании приложений с интерфейсом из командной строки.

eval выполняет содержимое строки или строковой переменной, как команды MATLAB

clear – удаляет переменные рабочей среды.

с lc – производит очистку командного окна

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

help имя_функции

Задания на выполнение лабораторной работы

Номер конкретного варианта задания определяется преподавателем.

Задание №1

Данное задание подразумевает нахождение для некоторой совокупности данных алгебраического интерполяционного многочлена степени n: P n (x ) .

Цель работы:

Необходимо составить программу вычисления коэффициентов алгебраического интерполяционного многочлена P n (x )= a 0 + a 1 x + … + a n x n .

Методические указания:

Пусть, например, имеется следующая совокупность данных:

i 0 1 2 3
х i 1,2 1,4 1,6 1,8
y i 8,3893 8,6251 8,9286 8,9703

Коэффициенты a 0 , a 1 , …, a n определяются из решения системы уравнений:

Здесь n – порядок интерполяционного многочлена,

n +1 – количество заданных пар точек (x , y ),

a 0 , a 1 ,… a n – искомые коэффициенты многочлена P n (x )= a 0 + a 1 x + … + a n x n ).

Требования к программе

· Задать границы отрезка , на котором строится интерполяционный многочлен P(x)

· Задать n – количество отрезков интерполяции (или, что то же самое, степень многочлена)

Примечание: x0 , xn , n вводятся с клавиатуры.

· Для получения исходных данных (x, y) (количество пар точек (x i, y i) , по которым строится интерполяционный многочлен P(x) n1=n+1 ) предусмотреть:

Ввод произвольно расположенных узлов x i, i=0, n с клавиатуры

Расчет узлов x i , i=0, n, соответствующих равномерному расположению аргумента x на отрезке

В пп. 1,2 значения y i , i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x) . Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

Ввод данных (x i, y i, i=0, n ) из файла

· Решить систему уравнений для определения коэффициентов многочлена P(x)

· Построить графики исходной таблично заданной функции и многочлена P(x)

· Если исходные данные заданы в виде функции f(x), построить график погрешности интерполяции /f(x) – P(x)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.

При выполнении последнего пункта на отрезке взять не менее 500 точек для проведения расчетов

Задание №2

Интерполяция сплайнами

Цель работы:

Необходимо составить программу вычисления коэффициентов и построения сплайн-функции S(x), «склеенной» из кусков многочленов 3‑го порядка S i (x ), которые имеют специальную форму записи:

,

функция S i (x ) определена на отрезке ,

Требования к программе

При выполнении данной работы необходимо:

· Задать границы отрезка , на котором строится сплайн-функция S(x)

· Задать n – количество отрезков интерполяции, на каждом из которых строится кубический многочлен Si(x).

· Примечание: x0, xn, n вводятся с клавиатуры.

· Организовать ввод исходных данных (x, y) (количество пар точек (xi, yi), по которым строится сплайн-функция S(x), n1=n+1), предусмотрев:

Ввод произвольно расположенных узлов xi, i=0, n с клавиатуры

Расчет узлов xi, i=0, n, соответствующих равномерному расположению аргумента x на отрезке

В пп. 1,2 значения yi, i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

Ввод данных (xi, yi, i=0, n) из файла

S1""(x0)=0, S3""(x3)=0

S1"(x0)=f "(x0), S3"(x3)=f "(x3)

S1""(x0)=f «(x0), S3""(x0)=f «(x3)

· Для определения коэффициентов естественного кубического сплайна (краевые условия 1) необходимо решить следующую систему уравнений:

Коэффициенты σ 0 =0,σ n =0

· Построить графики исходной функции и сплайн-функций для всех трех типов краевых условий.

· Построить графики функций погрешности сплайн-интерполяции f(x) – S(x) для всех трех типов краевых условий.

Примечание:

В пакете MATLAB индексы одномерных и двумерных массивов начинаются с 1, а не с 0. Учесть это при составлении программы.

Помимо программ с линейной структурой , инструкции которых исполняются строго по порядку, существует множество алгоритмов, структура которых нелинейная . При этом последовательность элементов алгоритмов может выполняться в зависимости от определенных условий, иногда с конечным числом повторений – регулярных циклов, иногда в виде циклов, завершаемых при выполнении заданного условия. Практически любая серьезная программа имеет нелинейную структуру. Для создания таких программ необходимы специальные управляющие структуры. Они имеются в любом языке программирования высокого уровня, и в частности в 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-3. Вычисление выражения, заданного в символьном виде

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

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

Инструкции1

elself Условие2

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

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

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

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

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

Инструкции

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

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

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

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

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

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

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

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

switch Bыражение

case Зачение_1

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

case Значение_2

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

case Значение_N

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

Otherwise

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

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

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

Рис. 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

где 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-11. Обращение к функции summa() и встроенной функции sum()

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

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

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

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

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

Инструкции

Отличительной особенностью этой структуры является то, что инструкции, расположенные в теле структуры повторения, выполняются только в том случае, если некоторое ЛогическоеВыражение «истинно». Как только условие становится «ложным», происходит выход из структуры повторения, и управление передается на инструкцию, расположенную после ключевого слова 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-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-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-5. Функция sred_ar() , вычисляющая среднее арифметическое
элементов строки массива a

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

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

Рис. 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) Произведите отладку scrip t-файла, запуская его на выполнение из текстового редактора командой Run .

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

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

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

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

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

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


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

Таблица 1.3.6-1

Задание
Ввести натуральное число nи вектор действительных чисел Найти: где
Вычислить где

Задать массив , состоящий из четного количества элементов. Каждая пара чисел , где i+1 кратно двум, задает координаты вершины ломаной. Построить ломаную, соединив при этом последнюю вершину с первой
. Вычислить произведение , где
Ввести натуральное число 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 и его структура.


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

Условный оператор if

В самом простом случае синтаксис данного оператора if имеет вид:

if <выражение>
<операторы>
end

Обращаю Ваше внимание что в отличие от современных языков программирования не используются такое понятие как составной оператор. Блок условного оператора обязательно заканчивается служебным словом end.

Ниже представлен пример реализации функции sign(), которая возвращает +1, если число больше нуля, -1 – если число меньше нуля и 0, если число равно нулю:

x = 5;
if x > 0
disp(1);
end
if x < 0
disp(-1);
end
if x == 0
disp(0);
end

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

if <выражение>
<операторы1> % выполняются, если истинно условие
else
<операторы2> % выполняются, если условие ложно
end

Тогда приведенный выше пример можно записать следующим образом:

X = 5;
if x > 0
disp(1);
else
if x < 0
disp(-1);
else
disp(0);
end
end

В данной программе сначала выполняется проверка на положительность переменной x, и если это так, то на экран выводится значение 1, а все другие условия игнорируются. Если же первое условие оказалось ложным, то выполнение программы переходит по else (иначе) на второе условие, где выполняется проверка переменной x на отрицательность, и в случае истинности условия, на экран выводится значение -1. Если оба условия оказались ложными, то выводится значение 0.

Приведенный выше пример можно записать в более простой форме, используя еще одну конструкцию оператора if языка MatLab:

if <выражение1>
<операторы1> % выполняются, если истинно выражение1
elseif <выражение2>
<операторы2> % выполняются, если истинно выражение2
...
elseif <выражениеN>
<операторыN> % выполняются, если истинно выражениеN
end

и записывается следующим образом:

x = 5;
if x > 0
disp(1); % выполняется, если x > 0
elseif x < 0
disp(-1); % выполняется, если x < 0
else
disp(0); % выполняется, если x = 0
end

С помощью условного оператора if можно выполнять проверку более сложных (составных) условий. Например, необходимо определить: попадает ли переменная x в диапазон значений от 0 до 2? Это можно реализовать одновременной проверкой сразу двух условий: x >= 0 и x <=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.

Для реализации составных условий в MatLab используются логические операторы:

& - логическое И
| - логическое ИЛИ
~ - логическое НЕ

Рассмотрим пример использования составных условий. Пусть требуется проверить попадание переменной x в диапазон от 0 до 2. Программа запишется следующим образом:

x = 1;
if x >= 0 & x <= 2
else
end

Во втором примере выполним проверку на не принадлежность переменной x диапазону от 0 до 2. Это достигается срабатыванием одного из двух условий: x < 0 или x > 2:

x = 1;
if x < 0 | x > 2
disp("x не принадлежит диапазону от 0 до 2");
else
disp("x принадлежит диапазону от 0 до 2");
end

Используя логические операторы И, ИЛИ, НЕ, можно создавать разнообразные составные условия. Например, можно сделать проверку, что переменная x попадает в диапазон от -5 до 5, но не принадлежит диапазону от 0 до 1. Очевидно, это можно реализовать следующим образом:

x = 1;
if (x >= -5 & x <= 5) & (x < 0 | x > 1)
disp("x принадлежит [-5, 5], но не входит в ");
else
disp("x или не входит в [-5, 5] или в ");
end

Обратите внимание, что при сложном составном условии были использованы круглые скобки. Дело в том, что приоритет операции И выше приоритета операции ИЛИ, и если бы не было круглых скобок, то условие выглядело бы так: (x >= -5 и x <= 5 и x < 0) или x > 1. Очевидно, что такая проверка давала бы другой результат от ожидаемого.

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

Приоритет логических операций следующий:

НЕ (~) – самый высокий приоритет;
И (&) – средний приоритет;
ИЛИ (|) – самый низкий приоритет.

Оператор цикла while

Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование рекуррентных алгоритмов, подсчета суммы ряда, перебора элементов массива и многое другое.

В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:

while <условие>
<операторы>
end

Здесь <условие> означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.

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

Приведем пример работы цикла while для подсчета суммы ряда :


i=1; % счетчик суммы
while i <= 20 % цикл (работает пока i <= 20)

end % конец цикла
disp(S); % отображение суммы 210 на экране

Теперь усложним задачу и будем подсчитывать сумму ряда , пока . Здесь в операторе цикла получается два условия: либо счетчик по i доходит до 20, либо значение суммы S превысит 20. Данную логику можно реализовать с помощью составного условного выражения в операторе цикла while:

S = 0; % начальное значение суммы
i=1; % счетчик суммы
while i <= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20
S=S+i; % подсчитывается сумма
i=i+1; % увеличивается счетчик на 1
end % конец цикла

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

Работу любого оператора цикла, в том числе и while, можно принудительно завершить с помощью оператора break. Например, предыдущую программу можно переписать следующим образом с использованием оператора break:

S = 0; % начальное значение суммы
i=1; % счетчик суммы
while i <= 20 % цикл (работает пока i<=10
S=S+i; % подсчитывается сумма
i=i+1; % увеличивается счетчик на 1
if S > 20 % если S > 20,
break; % то цикл завершается
end
end % конец цикла
disp(S); % отображение суммы 21 на экране

В данном примере второе условие завершения цикла, когда S будет больше 20, записано в самом цикле и с помощью оператора break осуществляется выход из цикла на функцию disp(), стоящую сразу после цикла while.

Второй оператор управления выполнением цикла continue позволяет пропускать выполнение фрагмента программы, стоящий после него. Например, требуется подсчитать сумму элементов массива

a = ;

исключая элемент с индексом 5. Такую программу можно записать следующим образом:

S = 0; % начальное значение суммы
a = ; % массив
i=0; % счетчик индексов массива
while i < length(a) % цикл (работает пока i меньше
% длины массива а)
i=i+1; % увеличивается счетчик индексов на 1
if i == 5 % если индекс равен 5
continue; % то его не подсчитываем
end
S=S+a(i); % подсчитывается сумма элементов
end % конец цикла
disp(S); % отображение суммы 40 на экране

Следует отметить, что в данной программе увеличение индекса массива i происходит до проверки условия. Это сделано для того, чтобы значение индекса увеличивалось на 1 на каждой итерации работы цикла. Если увеличение счетчика i записать как в предыдущих примерах, т.е. после подсчета суммы, то из-за оператора continue его значение остановилось бы на 5 и цикл while работал бы «вечно».

Оператор цикла for

Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.

Синтаксис оператора цикла for имеет следующий вид:

for <счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
end

Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:

a = ;
m = a(1); % текущее максимальное значение
for i=1:length(a) % цикл от 1 до конца вектора с
% шагом 1 (по умолчанию)
if m < a(i) % если a(i) > m,
m = a(i); % то m = a(i)
end
end % конец цикла for
disp(m);

В данном примере цикл for задает счетчик i и меняет его значение от 1 до 10 с шагом 1. Обратите внимание, что если величина шага не указывается явно, то он берется по умолчанию равным 1.

В следующем примере рассмотрим реализацию алгоритма смещения элементов вектора вправо, т.е. предпоследний элемент ставится на место последнего, следующий – на место предпоследнего, и т.д. до первого элемента:

a = ;
disp(a);
for i=length(a):-1:2 % цикл от 10 до 2 с шагом -1
a(i)=a(i-1); % смещаем элементы вектора а
end % конец цикла for
disp(a);

Результат работы программы

3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1

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

Решения уравнения

СПб.: БХВ-Петербург, 2005. - 1104 c.
ISBN 5-94157-494-0
Скачать (прямая ссылка): matlab72005.pdf Предыдущая 1 .. 117 > .. >> Следующая

while условие повторения цикла команды MATLAB

В данном примере условием повторения цикла является то, что модуль текущего слагаемого x2k~l/(2k +1)! больше IO10. Для записи условия в форме,

понятной MATLAB, следует использовать знак ">" (больше). Текст файл-функции mysin, вычисляющей сумму ряда на основе рекуррентного соотношения

k 2k(2k + \) k 1

приведен в листинге 7.7.

Примечание ^

Конечно, в общем случае малость слагаемого- понятие относительное, слагаемое может быть, скажем, порядка IO-10, но и сама сумма того же порядка. В этом случае условие окончания суммирования должно быть другим, а именно малость модуля отношения текущего слагаемого к уже накопленной части суммы. Пока не будем обращать на это внимания - нашей задачей является изучение работы с циклами.

Листинг 7.7. Файл-функция mysin, вычисляющая синус разложением в ряд

function s - mysin(х)

"% Вычисление синуса разложением в ряд

% Использование: у = mysin [х}, -pi < х < piГлава 7. Управляющие конструкции языка программирова ни я

Ї вычисление первого слагаемого суммы для к = О k = 0; и - х;

% вычисление вспомогательной переменной х2 - х*х;

while abs(u) > 1.Oe-IO k = к + 1; u = -и* х2/(2*к)/(2*к + 1)

Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начёта цикла к присвоить единицу, а внутри цикла увеличивать к на единицу.

Сравните теперь результат, построив графики функций mysin и sin на отрезке [-л, я] Fia одних осях, например, при помощи fplot (команды можно задать из командной строки): » fplot (@rnysin, [-pi, pi]) » hold on

» fplot(@sin, t-pii pi]і "k.")

Рис. 7.3. Сравнение mysin и sin360_________ Часть II. Вычисления и программирование

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

Условие цикла while может содержать логическое выражение, составленное из операций отношения и логических операций или операторов. Для задания условия повторения цикла допустимы операции отношения, приведенные в табл. 7.1.

Таблица 7.1. Операции отношения

Обозначение Операция отношения
== Равенство
< Меньше
<= Меньше или равно
>= Больше или равно
Не равно

Задание более сложных условий производится с применением логических операторов или операций. Например, условие -1<.г<2 состоит в одновременном выполнении неравенства а>-1 и х<2 и записывается при помощи логического оператора and

and(x >= -1, X < 2)

или эквивалентным образом с применением логической операции "и" - &

(х >= -1) & (х < 2)

Основные логические операции и операторы и примеры их записи приведены в табл. 7.2 (логические выражения подробно описаны в разд. "Логические операции с числами и массивами " этой главы).

Таблица 7.2. Логические выражения

Тип выражения Выражение Логический оператор Логическая операция
Логическое "и" А*<3 И к=4 and (х < 3, k==4) (х<3) s (k = 4)
Логическое "или" X = Ї или 2 or (х == 1, X= 2) (х == 1) I (х == 2)
Отрицание "не" а* 1.9 not (a == 1.9) -(а == 1.9)Глава 7. Управляющие конструкции языка программирова ни я

^ Примечание ^

Операторы not, and и or являются функциям», возвращающими значения "истина" (логическая единица) или "ложь" (логический ноль). Такие же значения принимает любое логическое выражение.

При вычислении суммы бесконечного ряда имеет смысл ограничить число слагаемых. Если ряд расходится из-за того, что его члены не стремятся к нулю, то условие на малость текущего слагаемого может никогда не выполниться и программа зациклится. Выполните суммирование, ограничив число слагаемых. Добавьте в условие цикла while файл-функции mysin (см. листинг 7.6) ограничение на количество слагаемых:

(abs(u) > 1.Oe-IO) & (к <= 100000) или в эквивалентной форме:

and l.Oe-lO, k <= 100000)

^ Примечание ^

Для задания порядка выполнения логических операций следует использовать круглые скобки (подробнее про логические операторы и логические операции и про возможность применения их к массивам написано в

разд. "Логические выражения с массивами и числами" данной главы).

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

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

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

Условный оператор if

Оператор if может применяться в простом виде, для выполнения блока команд при удовлетворении некоторого условия, или в конструкции if-eiseif-eise для написания разветвляющихся алгоритмов.362

Часть II. Вычисления и программирование

Проверка входных аргументов

Начнем с простейшего примера - создайте файл-функцию для вычисления