Прикладные пакеты моделирования.
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Прикладные пакеты моделирования.
Тема 2. Операции с матрицами:
Общая информация о разделе
В MATLAB любая переменная по умолчанию считается матрицей. Тип матрицы определяется типом ее элементов. В этой работе по умолчанию под матрицей будем подразумевать числовую матрицу.
Матрица задается своим именем и размером. Имя матрицы выбирается так же, как и имя простой переменной, а размер указывается произведением m ´ n, где m, n — число строк и столбцов соответственно.
Нижняя граница индексов матрицы равна единице.
Хранение матриц в оперативной памяти организовано по столбцам.
Вектор (вектор-строка) представлен матрицей размером 1 · n, вектор-столбец — матрицей размером n · 1, а скаляр — матрицей размером 1 · 1.
Ввод матриц рассматривался в теме 1.
Вектор, формирующий регулярную сетку, вводят в виде:
<начальное значение>:[<шаг>:]<конечное значение>
Шаг, равный единице, можно не указывать, условным признаком чего служат квадратные скобки.
Например:
>> y=0:pi/4:pi
y =
0 0.7854 1.5708 2.3562 3.1416
>> x=0:9
x =
0 1 2 3 4 5 6 7 8 9
Элементы матрицы могут быть представлены численными константами, простыми переменными, арифметическими выражениями и, в свою очередь, матрицами, например:
>> A=[5.3 sin(pi/4) 3+4*i]
A =
5.3000 0.7071 3.0000 + 4.0000i
>> a=[1 2;3 4], b=[4 5;6 7]
a =
1 2
3 4
b =
4 5
6 7
>> B=[a b]
B =
1 2 4 5
3 4 6 7
Обращение к элементу матрицы происходит по ее имени с указанием индексов строки и столбца в круглых скобках:
>> B(2,4)
ans =
7
По обращению B(i) матрица B воспринимается как вектор, элементы которого сформированы по столбцам:
>> B(5)
ans =
4
Размер матрицы — число строк m и столбцов n — определяется с помощью функции:
size(x)
Длина вектора определяется с помощью функции:
length(x)
Матрица нулевой размерности — пустая матрица — обозначается как A=[]:
>> A=[]; size(A)
ans =
0 0
Имя пустой матрицы сохраняется в Workspace и в дальнейшем может использоваться для формирования матрицы любого размера.
Последнее изменение: Четверг, 31 Март 2016, 14:48
2.1. Функции генерации типовых матриц
В MATLAB можно генерировать большое разнообразие типовых матриц с помощью встроенных функций, список которых может быть выведен по команде:
help elmat
Некоторые из них приведены в табл. 2.1.
Таблица 2.1. Функции генерирования типовых матриц
Функция
Типовая матрица
zeros(M,N)
Нулевая матрица M×N
ones(M,N)
Матрица единиц M×N
eye(N)
Единичная матрица порядка N
rand(M,N)
Матрица M×N случайных чисел размера в диапазоне от 0 до 1, распределенных по равномерному закону
randn(M,N)
Матрица M×N случайных чисел, распределенных по нормальному закону с математическим ожиданием, равным 0, и дисперсией, равной 1
diag(V)
Вектор из диагональных элементов квадратной матрицы V
Диагональная матрица — все элементы равны нулю, кроме диагональных, равных вектору
toeplitz(r)
Матрица Теплица —квадратная матрица с одинаковыми элементами на диагоналях, равными соответствующим элементам первого столбца r
Последнее изменение: Четверг, 31 Март 2016, 14:58
2.2. Преобразование матриц
К операциям преобразования матриц относятся:
• выделение из матрицы вектора-столбца:
A(:,N)
где N — номер столбца;
• выделение из матрицы вектора-строки:
A(M,:)
где M — номер строки;
• выделение подматрицы с указанием граничных индексов:
A(M1:M2,N1:N2)
где:
M1:M2 — номера строк с M1 по M2 включительно;
N1:N2 — номера столбцов с N1 по N2 включительно;
• выделение подматрицы с указанием начальных индексов:
A(M1:end;N1:end)
где:
M1:end — строки с M1 до последней включительно;
N1:end — столбцы с N1 до последнего включительно;
• растягивание матрицы в вектор-столбец:
A(:)
• горизонтальная конкатенация (объединение) подматриц (по столбцам):
A=[A1,A2,A3,...]
где A1,A2,A3,... — объединяемые подматрицы с одинаковым числом строк;
• вертикальная конкатенация подматриц (по строкам):
A=[A1;A2;A3;...]
где A1;A2;A3;... — объединяемые подматрицы с одинаковым числом столбцов;
• копирование матрицы, выполняемое с помощью функции:
repmat(A,m,n)
где:
A — исходная матрица как элемент новой матрицы;
m, n — число копий матрицы A по строкам и столбцам соответственно;
• копирование квадратных матриц, выполняемое с помощью функции:
repmat(A,n)
где:
A — исходная квадратная матрица как элемент новой квадратной матрицы;
n — число копий матрицы A по строкам и столбцам.
Последнее изменение: Четверг, 31 Март 2016, 16:58
2.3. Поэлементные операции с матрицами
К поэлементным операциям с матрицами относятся арифметические операции и вычисление элементарных функций, аргументы которых — матрицы.
Признаком поэлементных арифметических операций является точка перед символом операции:
>> A=[1 2 3;2 -1 5;1 -1 -1], B=[-1 -2 -3;-4 -5 -6;-7 -8 -9]
A =
1 2 3
2 -1 5
1 -1 -1
B =
-1 -2 -3
-4 -5 -6
-7 -8 -9
>> A.*B
ans =
-1 -4 -9
-8 5 -30
-7 8 9
Последнее изменение: Четверг, 31 Март 2016, 17:00
2.4. Операции с матрицами в задачах линейной алгебры
К простейшим операциям с матрицами в задачах линейной алгебры относятся:
• арифметические операции;
• транспонирование и эрмитово сопряжение;
• обращение;
• матричное деление.
Последнее изменение: Четверг, 31 Март 2016, 17:01
2.4.1. Арифметические операции с матрицами
К арифметическим операциям с матрицами относятся:
• сложение и вычитание матриц одинакового размера;
Суммой (разностью) матриц A и B размером m · n называется матрица C того же размера с элементами, равными сумме (разности) соответствующих элементов матриц A и B. Для операций сложения и вычитания матриц справедливы обычные законы арифметики:
A + B = B + A;
A – B = –B + A.
Пример сложения матриц:
>> A=[1 2 3;2 -1 5;1 -1 -1]; B=[-1 -2 -3;-4 -5 -6;-7 -8 -9];
>> C=A+B
C =
0 0 0
-2 -6 -1
-6 -9 -10
• умножение матрицы на скаляр (число), эквивалентное операции поэлементного умножения на скаляр;
• умножение матрицы на матрицу;
Операция умножения возможна только в том случае, если число столбцов матрицы A равно числу строк матрицы B.
Произведением матрицы A размером m · n на матрицу B размером n · p называется матрица C размером m · p, элемент i-й строки и k-го столбца которой равен сумме произведений соответственных элементов i-й строки матрицы A и k-го столбца матрицы B:
В общем случае умножение матриц не коммутативно:
AB ≠ BA.
Пример умножения матриц:
>> D=[1 2 5 7;3 8 0 3]
D =
1 2 5 7
3 8 0 3
>> size(D)
ans =
2 4
>> F=[1 2 0;3 8 5;0 3 4;9 7 1]
F =
1 2 0
3 8 5
0 3 4
9 7 1
>> size(F)
ans =
4 3
>> D*F
ans =
70 82 37
54 91 43
• возведение квадратной матрицы в целую степень q, эквивалентное умножению матрицы саму на себя q раз:
>> A=[1 2;4 5]
A =
1 2
4 5
>> B=A^3
B =
57 78
156 213
Последнее изменение: Четверг, 31 Март 2016, 17:10
2.4.2. Транспонирование и эрмитово сопряжение матриц
Транспонирование матрицы — это операция замены каждой строки столбцом с тем же номером.
Эрмитово сопряжение матрицы — это операция транспонирования матрицы с одновременной заменой ее элементов на комплексно сопряженные.
Операции транспонирования и эрмитова сопряжения выполняются с помощью одного и того же символа " ' " (апостроф). Результат зависит от исходной матрицы — является она вещественной или комплексной. В первом случае получим транспонированную, а во втором — эрмитово сопряженную матрицу:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A'
ans =
1 4 7
2 5 8
3 6 9
>> C=[3+2i 4-5i;7-5i 1+i;2+2i 1-8i]
C =
3.0000 + 2.0000i 4.0000 - 5.0000i
7.0000 - 5.0000i 1.0000 + 1.0000i
2.0000 + 2.0000i 1.0000 - 8.0000i
>> C'
ans =
3.0000 - 2.0000i 7.0000 + 5.0000i 2.0000 - 2.0000i
4.0000 + 5.0000i 1.0000 - 1.0000i 1.0000 + 8.0000i
Транспонирование комплексной матрицы выполняется с помощью символа поэлементного транспонирования:
>> C.'
ans =
3.0000 + 2.0000i 7.0000 - 5.0000i 2.0000 + 2.0000i
4.0000 - 5.0000i 1.0000 + 1.0000i 1.0000 - 8.0000i
Матрицу с комплексно сопряженными элементами можно получить с помощью функции conj:
>> conj(C)
ans =
3.0000 - 2.0000i 4.0000 + 5.0000i
7.0000 + 5.0000i 1.0000 - 1.0000i
2.0000 - 2.0000i 1.0000 + 8.0000i
Последнее изменение: Четверг, 31 Март 2016, 17:13
2.4.3. Обращение матриц
Матрица B называется обратной к матрице A, если произведение этих матриц дает единичную матрицу I:
AB = BA = I.
Матрица, обратная к матрице A, обозначается как A–1.
Операция обращения возможна только для квадратных матриц с определителем, не равным нулю.
Обратная матрица вычисляется с помощью функции:
inv(A)
а определитель матрицы — с помощью функции:
det(A)
Например:
>> A=[1 2;4 5]
A =
1 2
4 5
>> inv(A)
ans =
-1.6667 0.6667
1.3333 -0.3333
>> det(A)
ans =
-3
Последнее изменение: Четверг, 31 Март 2016, 17:16
2.4.4. Матричное деление
В списке символов арифметических операций содержатся два символа матричного деления с квадратными матрицами A и B порядка n:
• левое матричное деление — A\B, эквивалентное алгебраической операции A–1B, т. е. inv(A)*B;
• правое матричное деление — A/B, эквивалентное алгебраической операции AB–1, т. е. A*inv(B).
Тема 3. Типы массивов
В MATLAB тип массива (тип данных) определяется типом его элементов. По умолчанию мы имели дело с матрицами, элементы которых представлены константами в форме с плавающей точкой (ПТ) с двойной точностью. Такие массивы относятся к типу double.
Типы числовых и нечисловых массивов представлены в табл. 3.1.
Таблица 3.1. Типы массивов в MATLAB
Символическое обозначение типа массива
Тип массива
Функция преобразования типа
Числовой:
double
вещественный двойной точности
double(X)
single
вещественный одинарной точности
single(X)
int8
целый 8-битовый со знаком
int8(X)
uint8
целый 8-битовый без знака
uint8(X)
int16
целый 16-битовый со знаком
int16(X)
uint16
целый 16-битовый без знака
uint16(X)
int32
целый 32-битовый со знаком
int32(X)
uint32
целый 32-битовый без знака
uint32(X)
int64
целый 64-битовый со знаком
int64(X)
uint64
целый 64-битовый без знака
uint64(X)
logical
Логический
logical(X)
character (char)
Символьный
num2str(X)
structure (struct)
Структура (массив записей)
—
cell
Массив ячеек
—
Последнее изменение: Пятница, 1 Апрель 2016, 09:32
3.1. Матрицы числового и логического типов
Преобразование матриц числового типа double в матрицы других числовых типов выполняется с помощью специальных встроенных функций (см. табл. 3.1).
При обработке матриц числового целого типа необходимо иметь в виду, что с ними запрещено выполнение арифметических операций, в том числе вычисление большинства встроенных функций, но разрешено выполнение операций отношения и логических операций:
>> T = [159.7 125.7 -125.7];
>> A = int8(T);
A =
127 126 -126
>> B = uint8(T)
B =
160 126 0
>> C = [A> a=['Alla ' 'Woman ' 'Russian']
a =
Alla Woman Russian
• элементы столбца должны содержать одинаковое число символов, при этом пробел считается символом:
>> a=['Alla ';'Woman ';'Russian']
a =
Alla
Woman
Russian
Автоматическое добавление пробелов в элементах столбца с выравниванием по левому краю выполняется с помощью функции:
char('',''...)
где , ... — элементы столбца с произвольным количеством символов.
Одна функция char описывает один столбец матрицы:
>> a = char('Alla','Woman','Russian')
a =
Alla
Woman
Russian
Матрицу символьного типа удобно формировать по столбцам, используя для каждого из них свою функцию char и предусматривая необходимое количество пробелов для разделения столбцов:
>> x = [char('a','aa','aaa') char(' bb',' bbb',' b') ...
char(' cc',' ccc',' c')]
x =
a bb cc
aa bbb ccc
aaa b c
Преобразование в матрицу символьного типа выполняется с помощью функции num2str(x):
>> x = [5 7;-1 9]
x =
5 7
-1 9
>> y = num2str(x)
y =
5 7
-1 9
Здесь x — матрица типа double, а y — матрица символьного типа:
>> [size(x); size(y)]
ans =
2 2
2 5
Последнее изменение: Пятница, 1 Апрель 2016, 09:37
3.3. Структуры (массивы записей)
Структура (массив записей — struct array) — это разновидность нечислового массива, предназначенного для описания M объектов N параметрами.
Для описания структуры потребуется ввести ряд новых терминов.
Поле (field) — имя параметра.
Значение поля — значение параметра.
Число полей равно количеству параметров N.
Запись — список полей, одинаковый для всех M объектов.
Значение записи — список полей с их значениями для одного объекта.
Число записей равно количеству объектов M.
Структура (массив записей) — это упорядоченная совокупность значений записей, объединенная одним именем.
Имя структуры выбирается так же, как имя простой переменной, а размер равен числу записей M.
Значение каждой i-й записи формируется отдельно по каждому n-му полю:
<имя массива>().<имя n-го поля> = <значение n-го поля>
Таким образом, для формирования M значений записей со списком из N полей, потребуется M · N операторов присваивания.
Сформируем структуру personal для описания трех объектов (M = 3) — трех членов кафедры — четырьмя параметрами (N = 4).
Запись включает в себя следующие поля:
surname — фамилия — скаляр символьного типа;
data — дата рождения (число, месяц, год) — вектор численного типа;
position — должность — скаляр символьного типа;
phd — наличие ученой степени — скаляр логического типа.
Сформируем значения структуры personal по каждому полю:
>> personal(1).surname = 'Иванов';
>> personal(2).surname = 'Петров';
>> personal(3).surname = 'Сидоров';
>> personal(1).data = [1 2 1949];
>> personal(2).data = [5 7 1975];
>> personal(3).data = [5 8 1956];
>> personal(1).position = 'профессор';
>> personal(2).position = 'доцент';
>> personal(3).position = 'зав.лаб.';
>> personal(1).phd = true;
>> personal(2).phd = true;
>> personal(3).phd = false;
Список полей выводится по имени структуры:
>> personal
personal =
1x3 struct array with fields:
surname
data
position
phd
Значение i-й записи выводится по имени структуры с указанием индекса в круглых скобках. Например, значение 2-й записи:
>> personal(2)
ans =
surname: 'Петров'
data: [5 7 1975]
position: 'доцент'
phd: 1
Значение поля в i-й записи выводится по имени структуры с указанием индекса в круглых скобках и имени поля. Например, значение поля surname первой записи:
>> personal(1).surname
ans =
Иванов
Значения поля во всех записях выводятся по имени структуры с указанием имени поля. Например, поля surname:
>> personal.surname
ans =
Иванов
ans =
Петров
ans =
Сидорова
Удаление поля выполняется с помощью функции:
<имя массива> = rmfield(<имя массива>,'<имя поля>')
Например, с поле data:
>> personal = rmfield(personal,'data')
personal =
1x3 struct array with fields:
surname
position
phd
При этом следует иметь в виду, что знак присваивания обязателен. Строка
>> rmfield(personal,'data')
приведёт к тому, что переменной ans будет присвоено значение структуры без поля data, однако в исходной структуре personal поле останется.
Последнее изменение: Пятница, 1 Апрель 2016, 09:42
3.4. Массивы ячеек
Массив ячеек (cell array) — это наиболее сложный тип массива, элементами которого являются ячейки, представляющее собой массивы любой размерности, любого размера и типа.
Элементы массива ячеек указываются в фигурных скобках.
Сформируем квадратную матрицу ячеек 3×3:
>> A{1,1} = pi;
>> A{1,2} = [1 2 3;4 5 6];
>> A{1,3} = char('abs','angle');
>> A{2,1} = [ones(5,1)]';
>> A{2,2} = zeros(3,1);
>> A{2,3} = 'Alla';
>> A{3,1} = 7 ;
>> A{3,2} = rand(5,1);
>> A{3,3} = personal;
где personal — имя структуры, сформированной в разд. 3.3.
Массив ячеек может быть введён как обычная матрица, только вместо квадратных скобок используются фигурные:
>> B = {pi, personal; sin(0.5*pi) [1 2 3]};
Вывод элементов массива ячеек выполняется по его имени с указанием индексов:
>> A{1,2}
ans =
1 2 3
4 5 6
>> A{3,3}
ans =
1x3 struct array with fields:
surname
age
position
pd
С элементами массива ячеек можно выполнять операции, разрешенные для данного типа массива и с учетом согласования их размерностей и размеров, например:
>> B = sum(A{1,2})+A{1,1}
B =
8.1416 10.1416 12.1416
Графическое представление матрицы ячеек создается с помощью функции:
cellplot(A,'legend')
Последнее изменение: Пятница, 1 Апрель 2016, 09:45
3.5. Определение типа массива
Для определения типа массива служит функция:
class(<имя массива>)
Например, для массива A, сформированного в разд. 3.4:
>> class(A)
ans =
cell
Последнее изменение: Пятница, 1 Апрель 2016, 09:45
Тема 5. Режим программирования: script-файлы и function-файлы
Общая информация о разделе
Режим программирования предназначен для разработки программ пользователя в среде MATLAB.
Все программы пользователя, создаваемые в MATLAB, сохраняются на диске и имеют расширение m, поэтому их называют M-файлами.
Различают две разновидности M-файлов:
• script-файл (файл-сценарий);
• function-файл (файл-функция).
В M-файлах, независимо от их вида, должны соблюдаться следующие правила языка MATLAB:
• переменные не объявляются и не описываются;
• не используются метки;
• отсутствует оператор безусловного перехода типа "go to" (т. к. нет меток);
• не фиксируется (оператором или служебным словом) конец программы.
Последнее изменение: Пятница, 1 Апрель 2016, 12:06
5.1. Создание и хранение M-файлов
Для создания M-файла и его сохранения в папке пользователя необходимо выполнить следующую последовательность действий:
1. В окне MATLAB выбрать в главном меню пункт File | New (Файл | Новый) и определить тип создаваемого M-файла.
2. В раскрывшемся окне Editor (Редактор) набрать текст M-файла построчно.
3. Для сохранения M-файла выбрать в главном меню команду File | Save as (Сохранить как).
4. В раскрывшемся окне Save as выбрать требуемую папку, присвоить имя новому M-файлу (без расширения) и нажать кнопку Save (Сохранить).
При открытом окне редактора после внесения изменений в M-файл необходимо его сохранить перед следующим запуском. Признаком несохраненного файла является символ " * " (звездочка) при его имени в окне редактора.
Создание новой папки выполняется с помощью контекстного меню в окне Current Folder.
Сохранение пути к требуемой папке выполняется по команде контекстного меню Add Path | Selected Folders (Добавить путь | Выбранные папки) или команде главного меню File | Set Path (Файл | Установить путь). Сохранение пути к папке позволять в текущей сессии запускать М-файл, не открывая данную папку.
При запуске M-файлов из текущей папки, путь к ней можно не сохранять.
Последнее изменение: Пятница, 1 Апрель 2016, 12:10
5.2. Script-файлы
Script-файлом называют создаваемый пользователем M-файл, представляющий собой основную (управляющую) программу.
Термины "script-файл" и "программа" употребляют в тождественном смысле.
Программа состоит из операторов, записываемых построчно. По правилам хорошего стиля программирования рекомендуется:
• в начале программы ставить необязательный оператор-заголовок:
script
• после этого, во избежание конфликта переменных в Workspace и для очистки экрана, можно поставить команды clc и clear.
Имя script-файла выбирается по тем же правилам, что и имя переменной.
Пример простейшего script-файла S1:
script
clc
% Диапазон значений аргумента
x = 0:0.1:7;
% Вычисление значений синусоиды y
y = sin(x);
% Вычисление значений косинусоиды z
z = cos(x);
Обращение к script-файлу в режиме прямых вычислений (или в другом М-файле) осуществляется по его имени:
>> S1
После этого выполняются действия согласно программе.
Все переменные script-файла являются глобальными, т. е. они сохранятся в Workspace и доступны для использования в любых приложениях.
Последнее изменение: Пятница, 1 Апрель 2016, 12:15
5.3. Function-файлы
Function-файлом называют создаваемый пользователем M-файл, представляющий собой внешнюю функцию (в отличие от встроенных функций MATLAB).
Термины "function-файл" и "внешняя функция" употребляют в тождественном смысле.
Описание function-файла начинается с оператора-заголовка function. Формат описания при нескольких выходных параметрах имеет вид:
function [Y1,Y2,...] = <имя функции>(X1,X2,...)
где:
<имя функции> — имя function-файла, выбираемое подобно имени переменной;
X1, X2,… — список формальных входных параметров;
Y1, Y2,… — список формальных выходных параметров.
При одном выходном параметре имеем короткий формат описания:
function Y = <имя функции>(X1,X2,...)
После заголовка следует тело функции — записанная построчно на языке MATLAB программа определения выходных параметров Y1, Y2,… по входным — X1, X2,….
Пример function-файла F1:
function [z,p] = F1(x,y)
% Вычисление суммы кубов z
z = x.^3+y.^3;
% Вычисление квадратного корня p
p = sqrt(abs(z));
Пример function-файла F2 с одним выходным параметром:
function z = F2(x,y)
% Вычисление суммы кубов z
z = x.^3+y.^3;
Обращение к внешней функции подобно обращению к стандартной функции MATLAB. При нескольких выходных параметрах:
[Y1факт,Y2факт,...] = <имя функции>(X1факт,X2факт,...)
где:
X1факт, X2факт,… — список фактических входных параметров;
Y1факт, Y2факт,… — список фактических выходных параметров.
Фактические значения входных параметров X1факт, X2факт,…, должны быть определены перед обращением к внешней функции.
Варианты обращения к function-файлу F1:
>> [d,c] = F1(2,3);
>> a = 2; b = 3;
>> [d,c] = F1(a,b);
При одном выходном параметре допускается короткий формат обращения:
<имя функции>(X1факт,X2факт,...)
Варианты обращения к function-файлу F2:
>> a = 2; b = 3;
>> d = F2(a,b)+sin(7+F2(5,7));
Разделение параметров function-файлов на формальные и фактические обусловлено тем, что формальные параметры являются локальными, т. е. они (вместе с внутренними переменными function-файла) загружаются в Workspace на время вычисления внешней функции и удаляются из Workspace по завершении вычислений. Фактические же параметры сохраняются в Workspace.
Последнее изменение: Пятница, 1 Апрель 2016, 12:39
5.4. Оформление и вывод листинга M-файлов
При оформлении М-файлов рекомендуется соблюдать следующие правила:
• включать комментарии, поясняющие назначение переменных, выполняемые действия и т. п.;
• во избежание выводов нежелательных промежуточных результатов ставить точку с запятой.
Вывод листинга M-файла в окне Command Window выполняется по команде:
type <имя M-файла>
Последнее изменение: Пятница, 1 Апрель 2016, 12:39
5.5. Вывод данных
Вывод данных в окно Command Window во время выполнения программы организуется с помощью функции disp, например:
>> disp(['x ' 'a ' 'b'])
x a b
Для вывода значения численной переменной одновременно с текстом удобно воспользоваться функцией num2str:
>> i = 5;
>> disp([' Коэффициент ',num2str(i),'-го ВАРИАНТА'])
Коэффициент 5-го ВАРИАНТА
Последнее изменение: Пятница, 1 Апрель 2016, 12:42
5.6. Пауза и досрочное прерывание программы
Приостановить процесс выполнения программы на неопределенное (до нажатия любой клавиши) время можно по команде:
pause
Досрочное прерывание процесса выполнения программы в результате проверки тех или иных условий выполняется по команде
return
Рекомендуется предусмотреть вывод сообщения о причине досрочного прерывания.
Для принудительного снятия script-файла с выполнения следует на клавиатуре нажать комбинацию клавиш + .
Последнее изменение: Пятница, 1 Апрель 2016, 12:44
Тема 6. Режим программирования: организация разветвлений и циклов
6.1. Операторы организации разветвлений
Имеется две основные разновидности разветвлений, реализуемые двумя операторами MATLAB:
1. Разветвление по условию выполняется с помощью оператора if. Формат оператора if с несколькими условиями имеет вид:
if <условие1>
<фрагмент1>
elseif <условие2>
<фрагмент2>
...
elseif <условиеN-1>
<фрагментN-1>
...
else
<фрагментN>
end
Действие оператора: если значение <условия1> "истинно", то управление передается <фрагменту1>, если значение <условия2> "истинно", то управление передается <фрагменту2> и т. д. вплоть до <условияN-1>; если значения всех условий "ложно", то управление передается <фрагментуN>; после этого оно передается части программы, следующей за end.
Все условия и фрагменты, кроме первых, не являются обязательными.
Пример использования оператора:
if i>j
a(i,j) = 1;
elseif i==j
a(i,j) = -1;
else
a(i,j) = 0;
end
2. Разветвление в зависимости от значения выражения (арифметического, символьного или логического) выполняется с помощью оператора switch следующего формата:
switch <выражение>
case <значение1>
<фрагмент1>
case <значение2>
<фрагмент2>
...
otherwise
<фрагментN>
end
Действие оператора: в зависимости от значения <выражения> управление передается соответствующему <фрагменту>; если значение выражения не равно ни одному из указанных, то управление передается <фрагментуN> (который может отсутствовать); после этого управление передается части программы, следующей за end.
Например:
function y=switchEx(a,b)
x = [pi/6 pi/8 pi/16];
switch (a+b)
case 0
y = sin(x);
case 1
y = cos(x);
otherwise
y = tan(x)
end
Последнее изменение: Пятница, 1 Апрель 2016, 15:39
6.2. Операторы организации циклов
Имеются две основные разновидности циклов, реализуемые двумя операторами MATLAB:
1. Арифметический цикл с заранее известным (фиксированным) числом повторений организуется с помощью оператора for одного из следующих форматов:
• с простой переменной цикла:
for <переменная> = <нач.значение>:[<шаг>:]<кон.значение>
<тело цикла>
end
где:
<переменная> — имя простой переменной цикла;
<нач.значение>, <кон.значение>, <шаг> — соответственно начальное и конечное значения переменной цикла и шаг ее изменения; если шаг равен 1, то его можно не указывать;
<тело цикла> — повторяющийся фрагмент программы.
Действие оператора: при изменении значений <переменной> от <нач.значения> до <кон.значения> с заданным <шагом> повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end.
Например (полужирным шрифтом выделены элементы, вычисляемые в цикле):
x = [2 3 5];
for i = 1:3
x(i) = i^2
end
x =
1 3 5
x =
1 4 5
x =
1 4 9
• с переменной цикла — вектором:
Например:
for <переменная> = <вектор>
<тело цикла>
end
где <вектор> — вектор, как правило, числовой.
Действие оператора: при изменении значений <переменной>, которой последовательно присваиваются значения элементов <вектора>, повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end.
Например:
a = [-1 0 15];
for i = a
x = i+a
end
x =
-2 -1 14
x =
-1 0 15
x =
14 15 30
• с переменной цикла — матрицей:
for <переменная> = <матрица>
<тело цикла>
end
где <матрица> — матрица, как правило, числовая.
Действие оператора: при изменении значений <переменной>, которой последовательно присваиваются значения столбцов <матрицы>, повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end.
Например:
a = [1 2 3;4 5 6;7 8 9];
for i = a
x = i'
end
x =
1 4 7
x =
2 5 8
x =
3 6 9
2. Итерационный цикл с заранее неизвестным (не фиксированным) числом повторений организуется с помощью оператора while следующего формата:
while <условие>
<тело цикла>
end
где <условие> — логическое выражение, хотя бы одна из переменных которого встречается в <теле цикла>.
Действие оператора: <тело цикла> повторяется до тех пор, пока <условие> "истинно", после чего управление передается части программы, следующей за end.
Пример использования оператора while для вычисления суммы геометрической прогрессии (s) с точностью до ε = 10–4 (e) с выводом после выхода из цикла значения суммы и погрешности вычисления (вектор [s e]):
n = 0; s0 = 0; e = 100;
while e>1e-4
s = s0+(-0.5).^n;
e = abs(s-s0);
s0 = s;
n = n+1;
end
[s e]
ans =
0.6667 0.0001
Принудительный выход из цикла реализуется оператором:
break
после которого управление передается части программы, следующей за end.
Последнее изменение: Пятница, 1 Апрель 2016, 15:56