Бесконечный цикл matlab. Программирование в MATLAB

Циклы и условия matlab: теория и примеры

Доброго времени суток. Сегодня речь пойдёт о циклах и условиях в Matlab. Материал, который взят за основу - это help в Matlab и несколько простых примеров, которые мы с вами и разберем.

Условия в MATLAB

Ни один язык программирования не обходится без таких конструкций как условия, именно об этом мы с вами и поговорим:
Начнём с синтаксиса условия if и посмотрим на формальный вариант записи в справке:

If expression, statements, end

Что значит:

If Условие, Действие, end

Теперь примеры:

X = 1; y = 61; if ((x >= 0.90) && (y >= 60)) disp("ok"); end;

&& - логически оператор умножения (логическая «И»).
И вот пример с else :

X = 1; y = 50; if ((x >= 0.90) && (y >= 60)) disp("ok"); else disp("not right") end;

В отличие от 1 примера, здесь выведется «not right».
Пару слов теперь о switch . Формально в справке:

Syntax switch switch_expr case case_expr statement, ..., statement case {case_expr1, case_expr2, case_expr3, ...} statement, ..., statement otherwise statement, ..., statement end

Более приземлённо:

Syntax switch switch_expr case Значение - 1 Действие case {Зачение - 2, Знчение - 3, Значение - 4, ...} Действие В остальных случиях Действие end

Это значит, что если заданная переменная равна значению в case Значение - 1 , то выполняется действие при case Значение - 1 и так далее. Если ни один из case не подошёл выполняется действие при otherwise .
Вот пример:

Method = "Bilinear"; switch lower(method) case {"linear","bilinear"} disp("Method is linear") case "cubic" disp("Method is cubic") case "nearest" disp("Method is nearest") otherwise disp("Unknown method.") end

Циклы в MATLAB

Теперь перейдём к циклам, начнём с for .
В справке это записано в виде

Syntax for index = values program statements: end

В приземлённом виде это значит:

Syntax for переменная = значению действие end

Не будем задерживаться на официальных формулировках, лучше к понятным и любимым примерам

For m = 1:10 m end

Вот так выглядит самый распространённый способ использования for . В этом цикле мы просто выводим значение m.
Второй способ с использованием шага (step )

For s = 1.0: -0.1: 0.0 disp(s) end

В данном случае цикл for идёт от 1 до 0 с шагом -0.1.
Ещё один вариант:

For s = disp(s) end

В данном случае переменная s будет последовательно приравниваться 1, 5 ,8 , 17 и, соответственно, выводиться.
А также с for очень удобно выводить вектора. Вот:

For e = eye(5) disp("Current value of e:") disp(e) end

В данном примере идёт последовательное обращение к элементам вектора e .

Цикл while :
Формально в справке:

Syntax while expression program statements: end

Приземлённо:

Syntax while Условие Действие end

И давайте сразу к примеру (как это в реальной жизни используется).

Eps = 10; while eps > 1 eps = eps - 1 end

Пока в условие (eps > 1 ) выполняется, цикл выполняет действие

(eps = eps-1 ).
Также в условии while можно использовать логические операторы И - && и ИЛИ - || , записывая несколько логических выражений в условие.

Если есть вопросы по статье, пишите в комментариях.

codetown.ru

Циклы for, while в Матлаб(Matlab)

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

for count = start:step:final команды MatLab end

Здесь count - переменная цикла, start - ее начальное значение, final - конечное значение, а step - шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака

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

while условие цикла команды MatLab end

62. Какой командой создается М-книга в текстовом редакторе Word , связанном сMatLab ?

Начало новой М-книги Чтобы приступить к написанию новой М-книги, нужно: 1) запустить редактор Word; 2) выбрать в диалоговом окне Word опциюNew из менюFile ; 3) в окне, которое появится на экране, выбрать шаблон M-book. В результате этих действий будет запущена системаMatLAB , и вид глав- ного меню редактора Word несколько изменится - в нем появится новое менюNotebook . Это и будет свидетельствовать, что кWord присоединена системаMatLAB . Если теперь с помощью мыши активизировать менюNotebook окнаWord , на экране появится дополнительное меню

63. Какая команда в текстовом редакторе Word преобразует текст в ячейку ввода MatLab?

выбрать команду Define Input Cell (Определить Входную Ячейку) в ме- нюNotebook (см. рис. 3.20), или нажать клавиши; после этого вид стро- ки команды должен измениться - символы команды приобретают темно-зеленый цвет, а команда становится отороченной квадратными скобками темно-серого цвета;@

64. Какая команда в текстовом редакторе Word обеспечивает в ячейке выполнение команды MatLab?

выбрать мышкой команду Evaluate Cell (Вычислить ячейку), или нажать комбинацию клавиш; результатом этих действий должно стать появ- ление сразу после текста команды результатов ее выполнения системой MatLAB. Результаты выполнения команды выводятся, синим цветом и взяты в квад- ратные скобки

65. Какая команда в текстовом редакторе Word обеспечивает выполнение команд MatLab во всей М-книге?

Выполнение команд всех ячеек или групп ячеек ввода раздела произ- водится при помощи пункта Evaluate Calc Zone, а сразу всей М-книги – Evaluate М-book

66. Какая команда в текстовом редакторе Word обеспечивает выполнение команд MatLab во всех ячейках автоматически при открытии М-книги?

Команды ячеек, имею- щих стиль Autolnit, запускаются сразу после открытия М-книги. Полезно включить в первую такую ячейку команду clear для очистки рабочей среды. Для установки стиля Autolnit служит пункт Define Autoinit Cell меню Notebook

67. Какие кнопки содержит панель Excel Link в электронной таблице Excel при их связи с MatLab?

68. Что обеспечивает команда putmatrix?

Функция MLPutMatrix служит для по- мещения данных из ячеек рабочего листа Excel в массив рабочей среды Matlab. Аргументами данной функции являются имя переменной, заключен- ное в кавычки, и диапазон ячеек Excel, относящихся к этой переменной

68. Что обеспечивает команда getmatrix?

Об- ратную операцию осуществляет функция MLGetMatrix, при этом аргу- ментами этой функции являются имя переменной рабочей среды MatLab с 22 данными, заключенной в кавычки, и диапазон ячеек Excel, где будут разме- щены данные этой переменной, также заключенный в кавычки.

70. Для чего предназначен пакет Simulink?

В состав системы Matlab входит пакет моделирования динамических систем – Simulink. Данный пакет является ядром интерактивного программ- ного комплекса, предназначенного для математического моделирования ли- нейных и нелинейных динамических систем, представленных своей функ- циональной блок-схемой, именуемой S –моделью или просто моделью

71. Какая библиотека Simulink содержит источники сигналов?

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

72. Какая библиотека Simulink содержит регистрирующие виртуальные приборы?

осциллограф Scope из раздела Sinks .

73. Какая библиотека Simulink содержит блоки дифференцирования и интегрирования?

Continuous содержит непрерывные блоки. К числу важнейших относятся блоки дифференцирования Derivative и интегрирова- ния Integrator. Первый блок осуществляет численное дифференцирование входного сигнала, для данного блока никакие параметры не вводятся. Вто- рой блок в окне параметров содержит несколько полей, в котором можно задать постоянную интегрирования на выходе блока в поле Initial condition

74. Какая библиотека Simulink содержит блоки вычисления элементарных функций?

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

К блокам вычисления элементарных функций относятся три блока: блок математических функций Math Function , блок тригонометрических функцийTrigonometric Function и блок функций округленияRounding Function .

75. Сколько значений параметров шага устанавливается в Simulink при переменном шаге моделирования?

Большое значение имеют две опции решателя в поле Solver options: тип решения и метод решения. Возможны два варианта первой опции:

Variable-step solvers – решение с переменным шагом;

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

studfiles.net

Циклы типа for...end MatLab

Урок 20. Основы программирования Основные понятия программирования
Основные средства программирования
Основные типы данных
Виды программирования
Двойственность операторов, команд и функций
Некоторые ограничения
М-файлы сценариев и функций
Структура и свойства файлов сценариев
Статус переменных в функциях
Структура М-файла-функции
Статус переменных и команда global
Использование подфункций
Частные каталоги
Обработка ошибок

Вывод сообщений об ошибках
Функция lasterr и обработка ошибок
Функции с переменным числом аргументов
Функции подсчета числа аргументов
Переменные varargin и varargout
Комментарии
Особенности выполнения m-файлов функций
Создание Р-кодов
Управляющие структуры
Диалоговый ввод
Условный оператор
Циклы типа for...end
Циклы типа while...end
Конструкция переключателя
Конструкция try...catch...end
Создание паузы в вычислениях
Понятие об объектно-ориентированном программировании
Создание класса или объекта
Проверка принадлежности объекта к заданному классу
Другие функции объектно-ориентированного программирования
Что нового мы узнали?

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

for vаг=Выражение. Инструкция. .... Инструкция end

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

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

» for 1=1:5 i^2. end;

» for x=0:.25:1 Х ^ 2, end:

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

В результате выполнения этого цикла (файл for2.m) формируется матрица А:

Следует отметить, что формирование матриц с помощью оператора: (двоеточие) обычно занимает намного меньше времени, чем с помощью цикла. Однако применение цикла нередко оказывается более наглядным и понятным. MATLAB допускает использование в качестве переменной цикла массива А размера тхп. При этом цикл выполняется столько раз, сколько столбцов в массиве А, и на каждом шаге переменная var представляет собой вектор, соответствующий текущему столбцу массива А:

» А=

» for var=A; var, end

radiomaster.ru

Иллюстрированный самоучитель по MatLab › Основы программирования › Циклы типа for…end. Циклы типа while…end. [страница - 364] | Самоучители по математическим пакетам

Циклы типа for…end. Циклы типа while…end.

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

for var = Выражение. Инструкция..... Инструкция end

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

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

> > for 1 = 1: 5 i ^ 2 , end ;

> > for x = 0:. 25: 1 X ^ 2 , end:

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

A(1 .j) = i + j;

В результате выполнения этого цикла (файл for2.m ) формируется матрица А:

Следует отметить, что формирование матриц с помощью оператора: (двоеточие) обычно занимает намного меньше времени, чем с помощью цикла. Однако применение цикла нередко оказывается более наглядным и понятным. MATLAB допускает использование в качестве переменной цикла массива А размера тхп . При этом цикл выполняется столько раз, сколько столбцов в массиве А, и на каждом шаге переменная var представляет собой вектор, соответствующий текущему столбцу массива А:

> > A = [ 1 2 3: 4 5 6 ]

> > for var = A; var , end

Циклы типа while…end

Цикл типа while выполняется до тех пор, пока выполняется Условие:

while Условие Инструкции end

Пример применения цикла while уже приводился. Досрочное завершение циклов реализуется с помощью операторов break или continue .

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

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

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

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

function search_max
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.

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

function queue
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. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.

В заключении рассмотрим работу оператора цикла for на примере моделирования случайной последовательности с законом изменения

где - коэффициент от -1 до 1; - нормальная случайная величина с нулевым математическим ожиданием и дисперсией

,

где - дисперсия моделируемого случайного процесса. При этом первый отсчет моделируется как нормальная случайная величина с нулевым математическим ожиданием и дисперсией . Программа моделирования имеет следующий вид:

function modeling_x
r = 0.95; % коэффициент модели
N = 100; % число моделируемых точек
ex = 100; % дисперсия процесса
et = ex*(1-r^2); % дисперсия случайной добавки
x = zeros(N,1); % инициализация вектора х
x(1) = sqrt(ex)*randn; % моделирование 1-го отсчета
for i=2:N % цикл от 2 до N
x(i)=r*x(i-1)+sqrt(et)*randn; % моделирование СП
end % конец цикла
plot(x); % отображение СП в виде графика

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

Рис. 2.1. Результат моделирования случайной последовательности.

Работа программы начинается с определения переменных , (в программе переменная ex) и для реализации указанной модели. Затем вычисляется дисперсия и моделируется первый отсчет случайного процесса с помощью функции randn. Функция randn выполняет генерацию нормальных случайных величин с нулевым средним и единичной дисперсией. Чтобы сгенерировать случайную величину с дисперсией достаточно случайную величину с единичной дисперсией умножить на , т.к. дисперсия – это средний квадрат случайной величины относительно математического ожидания. В результате имеем программную строчку

x(1) = sqrt(ex)*randn;

Затем, реализуется цикл for со счетчиком i от 2 до N с шагом 1. Внутри цикла выполняется моделирование оставшихся N-1 отсчетов случайного процесса в соответствии с приведенной выше формулой. В последней строчке программы записана функция plot(), которая выводит смоделированную последовательность на экран в виде графика. Более подробно работа с выводом графиков на экран будет рассмотрена в следующей главе.

Операторы цикла В MATLAB повторяющиеся действия осуществляются с помощью операторов циклов for и while. Самое простое использование for осуществляется следующим образом: 2

For count = start: step: final Команды MATLAB End Здесь count – переменная цикла; n start, final – начальное и конечное действительное значение; n step – шаг из множества действительных чисел (по умолчанию равен 1, его можно опустить). Цикл заканчивается, как становиться больше final. только count 3

Пример 1 Вычислить сумму при x= -1, 0, 1. Решение В редакторе M-file создадим файл-программу. Сохраняем её в файле Summa. m S = 0; for k = 1: 10 S = S + x. ^ k / factorial(k); End S В командной строке x = -1: 1: 1; Summa S = -0. 6 0 1. 7 Заметим, что переменные k, s глобальные. 4

Удобнее для этого примера использовать файлфункцию. В редакторе М-файлов В командной строке создаем файл-функцию function S = funsum(x, N) > f = funsum (-1: 1, 10) S = 0; > f = for m = 1: N -0. 6 0 1. 7 S = S + x. ^ m / factorial(m); end Здесь переменные s, m локальные. 5

Пример 2 Создать матрицу Гильберта порядка n. Решение n = 4; a = zeros (n, n); for i = 1: n for j = 1: n a (i, j) = 1 / (i+j-1); end a 6

Замечание Перед заполнением матриц и векторов следует сначала создать их и заполнить нулями командой zeros, для увеличения скорости алгоритма (то есть a = zeros (n, n) быстрее, чем a(i, j) = 0, i, j = 1, …, n). 7

Цикл for оказывается полезным, при выполнении повторяющихся действий, когда их число заранее известно. В случае, если их число заранее неизвестно можно воспользоваться циклом while: While условие цикла Команды MATLAB Еnd 8

Пример 3 Найти сумму ряда для заданного x До бесконечности суммировать не удастся, но можно накапливать сумму, пока слагаемые не будут слишком маленькими, например, пока 9

Замечание Малость слагаемого – понятие относительное, слагаемое, может быть, скажем, порядка 10 -10, но и сама сумма того же порядка. В этом случае нельзя останавливать суммирование. Не будем пока обращать на это внимание и вернемся к решению. 10

Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-11.jpg" alt="M-file функция В командной строке function S = mysin(x) > f = mysin (1)"> M-file функция В командной строке function S = mysin(x) > f = mysin (1) S = 0; 0. 8415 k = 0; while abs(x. ^ (2*k + 1)/factorial(2*k + 1)) > 1. 0 e -10 S = S + (-1)^k * x. ^ (2*k + 1)/factorial(2*k + 1); k = k + 1; end 11

Для задания условия выполнения цикла используются следующие операции отношения Отнош Значени ение я = = равно > больше > = больше или равно ~ = не равно

и логические операторы: Оператор Условие Запись в MATLAB Эквивалентная запись Логическое «и» x

Вернемся к нашему примеру, и заметим, что если ряд расходится, то условие на малость текущего слагаемого может никогда не выполнится и программа зациклиться. Поэтому ограничим число слагаемых 100. 000 Условие будет выглядеть так or (abs (x. ^ (2*k + 1)/factorial(2*k + 1)) > 1. 0 e -10, k

Обработка исключительных ситуаций 1) break – прерывание цикла и выполнение оператора следующего за end (например, выход из внутреннего цикла); 2) Часть некорректных математических операций в MATLAB, не приводит к завершению работы программы (например, = inf, = Na. N). Выходом является конструкция try Операторы, выполнение которых может привести к ошибке catch Операторы в случае ошибки end 15

Операторы ветвления Условный оператор В MATLAB используются следующие операторы ветвления: n if – условный оператор; n switch – оператор переключения 16

Структура условного оператора: if (условие) команды MATLAB elseif (условие) команды MATLAB …………. Эта часть может отсутствовать elseif (условие) Команды MATLAB else Команды MATLAB end 17

При составлении М-файла, использующего операторы ветвления, полезно применять 1) команду warning (‘текст’) – для вывода предупреждения в командное окно; 2) функцию error (‘текст’) – для прекращения выполнения программы. 18

Пример 4 Дано квадратное уравнение ax 2 + bx +c = 0, a ≠ 0. Напишем М-функцию вычисляющую корни квадратного уравнения. Сделаем проверку на количество входных и выходных параметров, а так же на то, что входные параметры являются числами, а не векторами и матрицами. Более того, учтем случай комплексного корня. Программа выглядит так: 19

function = root 2 (a, b, c) if (nargin

Замечание Для написания собственных вычислительных программ большую пользу может принести самостоятельное изучение стандартных файл-функций в подкаталогах Toolbox. Большинство из них имеют открытый код, что позволяет понять принципы программирования в MATLAB. Другие функции (например, cos. m) являются встроенными. Они содержат комментарии об использовании функций. Приведем еще один пример. 21

function y = kusfun (x) If nargin ~= 1 error (‘Должен быть один входной аргумент’) end = size(x); y = zeros (size(x)); % инициализирует входной аргумент for i = 1: Nx for j = 1: Mx if x (i, j) = -pi не нужна! y (i, j) = x (i, j) / pi; else y (i, j) = - cos(x (i, j)) end end 23

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

Структура оператора видна из следующего примера: switch a case -1 disp (‘a = -1’) case 0 disp (‘a = 0’) otherwise disp (‘a не равно -1, 0’) end 25

Оператор switch хорошо подходит для решения поставленной задачи о выводе различных графиков исследуемой функции (каркасная поверхность (а=1), линии уровня (а=2) и т. д.). 26

Логические выражения с массивами и числами Универсальным способом обработки матричных данных служат логические операции. Поскольку MATLAB представляет числа массивами 1 1, то естественно ожидать, что массивы могут входить в логические выражения. Сейчас мы рассмотрим расширение логических операций и операций отношения на случай массивов. 27

Операции отношения Результат операции отношения в MATLAB может быть или логическая единица (‘истина’) или логический нуль (‘ложь’). Причем в отличие от многих языков программирования арифметические переменные могут использоваться в одном выражении с логическими. 28

Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-29.jpg" alt="Пример 6 > a = 1; b = 3; c = 1; >"> Пример 6 > a = 1; b = 3; c = 1; > a + (b > c) ans = 2 > a + (b

Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-30.jpg" alt=" > A = ; B = ; B = ; > C = A = = B C = 30

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

Логические операции Применение логических операций к массивам приводит к поэлементному их выполнению над элементами массивов. n А and B – дает единицу, если соответствующие элементы не равны нулю; n A or B - дает единицу, если хотя бы один элемент не равен нулю; 32

not A – применяется к одному массиву, если элемент не равен нулю, то ставится нуль, иначе – единица; n all (v) – проверка наличия нулевых элементов в векторе, возвращает единицу, если нет нулевых элементов. Если v – матрица, то результат по столбцам; n any (v) – возвращает единицу, если во входном векторе есть хотя бы один ненулевой элемент. n 33

Приоритет операций 1. Отрицание; 2. Транспонирование, возведение в степень (в том числе поэлементное), знак плюс и минус перед числом; 3. Умножение и деление (в том числе поэлементное); 4. Сложение и вычитание; 5. Операции отношения; 6. Логическое ‘и’, логическое ’или’. 34

Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-36.jpg" alt=" Пример 7 > a = ; > u"> Пример 7 > a = ; > u = find ((a = -1)) 3 4 5 > anew = a(u) 0 -1 0 36

Пример 8 Заменить самостоятельно элементы квадратной матрицы 5 x 5 случайных чисел из интервала (0, 1), больших среднего значения всех элементов на 10%, на среднее значение. Решение > A = rand (5); > S = sum (sum A) / 25; > A(find (A > S* 1. 1)) = S В данном случае функция find выдает 2 вектора номера строк и номера столбцов. 37

Полиномы в MATLAB Полином p (х) =anxn+an-1 xn-1+. . . +a 0, an≠ 0 в MATLAB задается вектор-строй р= , где ai – любые комплексные числа, an≠ 0. Заметим, что степень полинома вычисляется так: n=length(р)-1 (при n=0 получается const). 38

Основные команд для действий с полиномами таковы: n n n r=roots(р) – вектор-столбец, содержащий все корни полинома; p=poly(r) – построение полинома по корням, заданным в векторе-столбце r, причем, если r квадратная матрица, то р - характеристический многочлен; y=polyval(p, x) – поэлементное вычисление у значений полиному р на множестве х, где х может быть вектором или матрицей; 39

n n n polyder(p) – вектор-строка, производная от p (дифференцирование полинома p); polyder(p, q) –производная от произведения полиномов p и q; = polyder(p, q) – производная от частного полиномом p и q, где a и b являются числителем и знаменателем получившейся дроби; 40

n n n p=polyfit(x, y, n) – приближение функции y(x) полиномом p n-й степени по методу, минимизирующему расстояние между графиком полинома и истиной кривой, усредненное по всей их длине; conv(p, q) – вектор-строка, произведение полиномов p и q; =deconv(p, q) – деление p на q, причем w-частное, r-остаток и p=conv (q, w) +r; 41

n =residue(a, b) – разложение рациональной функции на простые дроби над полем комплексных чисел с выделением целой части k(х) или где ri – вычеты (элементы r), pi – полюса (элементы p). Эта команда работает и в обратную строну =residue(r, p, k) 42

Замечание 1. Если в residue (a, b) полином b(х), а в roots(p) полином р(х) имеют кратные или близкие друг к другу корни, то результаты могут быть неверными, поскольку такая задача плохо обусловлена. Плохая обусловленность – это крайне сильная зависимость результата от коэффициентов (аналог устойчивости решения в дифференциальных уравнениях). 43

2. При работе с полиномами возникают полиномы вида , а MATLAB автоматически не проверяет an≠ 0, и возникают ошибки (нужно самим следить). 44

Язык технических вычислений

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

MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.

Начало работы

Изучите основы MATLAB

Основы языка

Синтаксис, индексация и обработка массива, типы данных, операторы

Импорт и анализ данных

Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования

Математика

Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика

Графика

2D и 3D графики, изображения, анимация

Программирование

Скрипты, функции и классы

Создание приложений

Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE

Инструменты разработки программного обеспечения

Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов

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