Главная страница

Практикум по матлабу. практикум по матлабу. Физических процессов с использованием


Скачать 1.13 Mb.
НазваниеФизических процессов с использованием
АнкорПрактикум по матлабу
Дата21.06.2021
Размер1.13 Mb.
Формат файлаpdf
Имя файлапрактикум по матлабу.pdf
ТипУчебное пособие
#219898
страница12 из 17
1   ...   9   10   11   12   13   14   15   16   17
x = [0.0:0.1:2.0]’;
y = sin(x);
[x y]
Отметим, что поскольку
sin является скалярной функцией (т.е. действующей по- элементно), если аргументом ее является вектор
x, то результатом будет вектор
y. Двоеточие может быть использовано для доступа к подматрицам. Например,
A(1:4,3) является вектор-столбцом, состоящим из четырех первых элементов тре- тьего столбца матрицы
A. Двоеточие само по себе означает всю строку или весь столбец. Например,
A(:,3) является третьим столбцом A, а A(1:4,:) представляет собой первые четыре строки матрицы. Произвольный целый вектор может исполь- зоваться в качестве индекса подматрицы. Например,
A(:,[2 4]) является матрицей из двух столбцов, 2-го и 4-го столбцов матрицы
A. Такое индексирование, как и нотация с двоеточием, может использоваться с обеих сторон знака присваивания.
Так, оператор
A(:,[2 4 5]) = B(:,1:3) заменяет 2,4 и 5-й столбцы матрицы A на первые три столбца матрицы
B. Заметим, что при выполнении такого оператора вся измененная матрица
A будет выведена на экран. Попробуйте выполнить сами эту и подобные команды. Столбцы 2-й и 4-й матрицы
A могут быть умножены справа на матрицу
[1 2; 3 4] размером 2х2-такой оператор имеет вид A(:,[2,4])
= A(:,[2,4])*[1 2; 3 4]. В этом случае, как и в предыдущем, вся измененная мат- рица будет выведена на экран. Попробуйте понять, а потом проверьте, что будет с вектором длины n, если будет выполнен оператор
x = x(n:-1:1). Для того чтобы лучше оценить описанные возможности MATLAB, попробуйте выполнить те же самые действия с помощью операторов Паскаля, Фортрана или С.
2.3.
Функции построения матриц
Имеются следующие стандартные функции для построения матриц eye единичная матрица zeros нулевая матрица ones матрица единиц diag см. ниже triu верхняя треугольная часть матрицы tril нижняя треугольная часть матрицы rand матрица со случайными элементами
Например, команда
(m,n) создает mxn матрицу нулей, а команда zeros(n)
генерирует матрицу nxn; если
A – матрица, то команда zeros(size(A)) создаст
114
матрицу нулей такой же размерности, как и
A. Если x – вектор, то diag(x)
это диагональная матрица, у которой на главной диагонали стоит вектор
x; если
A – квадратная матрица, то diag(A) – это вектор, элементы которого состоят из диагональных элементов
A. Проверьте, чему равна diag(diag(A))? Матрицы можно строить из блоков. Например, если
A – матрица 3х3, тогда команда
B=[A, zeros(3,2); zeros(2,3), eye(2)]
создает новую матрицу 5х5. Попробуйте выполнить эту команду сами.
3.
Операции, выражения и переменные
3.1.
Правила записи операторов
MATLAB является интерпретирующим языком непосредственных вычислений,
т.е. выражения, которые вы вводите, интерпретируются и вычисляются. Операто- ры MATLAB обычно имеют форму
переменная = выражение или просто
выражение
Выражение, как правило, формируется из операторов, функций и имен пере- менных. После выполнения выражения генерируется матрица, которая выводится на экран и присваивается соответствующей переменной для последующего исполь- зования. Если имя переменной в левой части и знак = отсутствуют, автоматически генерируется переменная
ans (answer -ответ), которой присваивается результат вычислений.
Обычно оператор завершается клавишей Enter. Однако в случае необходимо- сти оператор может быть продолжен на следующей строке, для чего его необходимо завершить тремя или более точками, после которых следует Enter. С другой сто- роны, в одной строке может быть несколько операторов, разделенных запятой или точкой с запятой.
Если последним символом в строке является точка с запятой, то вывод значе- ний результата не производится, но присвоение выполняется. Это помогает пода- вить вывод ненужных промежуточных результатов. MATLAB различает большие и маленькие буквы в именах команд, функций и переменных. Например,
solveUT
не то же самое, что
solveut. Команда who выводит список всех переменных в рабочем пространстве. Переменная может быть удалена из рабочего пространства командой
clear <имя_переменной>. Команда clear без аргументов очищает все непостоянные переменные в рабочем пространстве. Постоянная переменная
eps
115

(epsilon) представляет машинную точность -порядка
10
6
на большинстве ма- шин. Эта переменная является полезной при определении сходимости итеративных процессов. Вывод на дисплей или вычисления могут быть прерваны на большин- стве компьютеров, не покидая MATLAB, с помощью комбинации клавиш Ctrl+C
(Ctrl+Break на PC).
3.2.
Матричные операции
Следующие матричные операции доступны в MATLAB:
+
сложение
- вычитание
*
умножение
ˆ
степень

транспонирование
\
левое деление
/
правое деление
Эти матричные операции применимы, конечно, и к скалярам (матрицам 1х1).
Если размерность матриц не соответствует используемой операции, то система ге- нерирует сообщение об ошибке за исключением случаев, когда одним из операндов является скаляр, потому что в этом случае операция выполняется между скаляром и каждым элементом матрицы второго операнда.
Оперция «матричное деление» требует специальных комментариев. Если A яв- ляется обращаемой квадратной матрицей, а b - вектор-столбец или вектор-строка соответственно, тогда x
= A\b является решением уравнения A ∗ x = b , а
x
= b/A является решением уравнения x ∗ A = b . Если A -квадратная матрица,
то при левом делении для факторизации используется метод исключения Гаусса и эта факторизация позволяет решить уравнение A
∗ x = b. Если матрица не квад- ратная, то для ее факторизации используется метод ортогонализации Хаусхольдера с ведущим столбцом, а приведенная матрица используется для решения недо-или переопределенной системы уравнений в смысле наименьших квадратов. Правое де- ление определяется в терминах левого деления по формуле b/A
= (A

\b

)

.
3.3.
Операции с массивами
Матричные операции сложения и вычитания действуют поэлементно, а остальные приведенные выше операции -нет, они являются матричными операциями. Следует отметить, что приведенные выше операции *,
ˆ,
\, / могут стать поэлементными,
116
если перед ними поставить точку. Например, операция
[1,2,3,4].*[1,2,3,4] или
[1,2,3,4].ˆ2 дадут один и тот же результат [1,4,9,16]. Попробуйте эти операции или им подобные выполнить самостоятельно. Эти действия в особенности полезны при использовании графики.
3.4.
Сохранение данных из рабочей области
При выходе из системы MATLAB все переменные рабочей области теряются.
Однако при вызове команды
save перед выходом все переменные рабочей области записываются на диск в нетекстовом формате в файл с именем matlab.mat. Если впоследствии загрузить MATLAB, то команда
load восстановит все переменные рабочего пространства.
4.
Операторы
for, while, if, case и операторы отношения
При использовании в своей основной форме перечисленные выше операторы управ- ления MATLAB работают так же, как и в большинстве языков программирова- ния.
4.1.
Цикл
for
Например, для данного n, оператор
x = [ ]; for i = 1:n,x=[x,iˆ2], end
или
x = [ ]; for i = 1:n x = [x,iˆ2] end
создает определенный вектор размерности n, а оператор
x = []; for i = n:-1:1, x=[x,iˆ2], end
создает вектор с теми же элементами, но размещенными в обратном порядке. По- пробуйте выполнить это сами. Заметим, что матрица может быть пустой (напри- мер, в случае оператора
x = [ ].) Последовательность опреаторов
for i = 1:m
for j = 1:n
H(i, j) = 1/(i+j-1);
end
end
H
создаст и напечатает на экране матрицу Гильберта размерности mxn. Точка с за- пятой, которая завершает внутренний оператор, предотвращает вывод на экран
117
ненужных промежуточных результатов, в то время как последний оператор
H вы- водит на экран окончательный результат.
4.2.
Цикл
while
В общем виде цикл
while записывается в виде
while
<условие>
<операторы>
end
<Операторы> будут повторяться до тех пор, пока <условие> будет оставаться истинным. Например, для заданного числа a приведенная далее последователь- ность операторов вычислит и выведет на дисплей наименьшее неотрицательное число n, такое что
2
n
< a:
n = 0;
while 2^n < a
n = n + 1;
end
n
4.3.
Условный оператор
if
В общем виде простой оператор
if используется следующим образом:
if
<условие>
<операторы>
end
<Операторы> будут выполняться только если <условие> истинно. Возможно также множественное ветвление, что демонстрируется приведенным далее приме- ром.
if n < 0
parity = 0;
elseif rem(n,2) == 0
parity = 2;
else
parity = 1;
end
118

При использовании двухвариантного условного оператора часть, связанная с
elseif,
конечно, не используется.
4.4.
Оператор переключения
case
При необходимости построить конструкцию ветвления с более чем двумя логи- ческими условиями удобнее использовать не вложенные операторы
if, а оператор переключения
switch ... case. Этот оператор имеет следующую структуру:
switch <выражение>
% <выражение> - это обязательно скаляр или строка
case <значение1>
операторы
% выполняется, если <выражение>=<значение1>
case <значение2>
операторы
% выполняется, если <выражение>=<значение2>
otherwise
операторы
% выполняется, если <выражение> не совпало
% ни с одним значением
end
4.5.
Условия (операторы отношения)
В MATLAB используются следующие операторы отношения:
<
меньше чем
>
больше чем
<= меньше или равно
>= больше или равно
==
равно
˜=
не равно
Отметим, что знак
= используется в операторах присваивания, в то время как знак
== используется в операторах отношения. Операторы отношения (или, дру- гими словами, логические переменные, которые они создают) могут объединяться с помощью следующих логических операторов:
119

& И
|
ИЛИ
˜
НЕ
Когда эти операторы применяются к скалярам, то результатом является тоже скаляр 1 или 0 в зависимости от того, является ли результат истиной или ложью.
Попробуйте вычислить
3 < 5, 3 > 5, 3 == 5, и 3 == 3. Когда операторы отноше- ния применяются к матрицам одного размера, результатом является матрица того же размера, у которой в качестве элементов стоят 0 или 1, в зависимости от со- отношения между соответствующими элементами исходных матриц. Попробуйте вычислить
a=rand(5), b=triu(a), a == b. Операторы while и if интерпретиру- ют отношение между матрицами как истинное в том случае, если результирующая матрица не имеет нулевых элементов.
Так, если вы хотите выполнить оператор в том случае, когда матрицы A и B
полностью совпадают, вы можете написать
if A == B <операторы> end
но если вы хотите выполнить оператор в том случае, когда матрицы A и B не рав- ны, вы должны ввести
if any(any(A ˜= B)) <оператор> end или, что проще,
if A == B else <оператор> end. Заметим, что конструкция if A ˜= B, <опе-
ратор>, end почти наверняка не даст того, что нужно, поскольку оператор будет выполняться только если каждый элемент матрицы A будет отличаться от соот- ветствующего элемента матрицы B. Для сведения матричных отношений к вектору или скаляру можно воспользоваться функциями
any и all. В предыдущем при- мере необходимо использование функции
any два раза, поскольку эта функция - векторная (см.
5.2
). Оператор
for допускает использовать любую матрицу вме- сто
1:n. Для более полного знакомства с возможностями, расширяющими мощь оператора
for, см.[
6
].
4.6.
Функция
find
Хотя функция
find не относится формально к условным операторам или операто- рам отношения, тем не менее мы решили поместить ее в этот раздел, поскольку ее использование весьма полезно для работы с циклами и условными операторами.
Оператор
k=find(x) возвращает вектор k номеров ненулевых элементов век- тора/матрицы
x. Если x-матрица, то при определении индексов она рассматри- вается как вектор, образованный последовательно соединенными столбцами мат- рицы. Вектор
find(x) можно использовать совместно с операторами отношения,
поскольку результатом применения оператора отношения к матрицам является мат-
120
рица из 0 и 1 (ложь или истина). Таким образом можно с помощью одного опе- ратора
find определить и записать сразу все индексы матрицы, удовлетворяющие некоторому условию. Если при этом вспомнить, что оператор цикла
for допускает форму
for k=KK, где KK -целый вектор, то удобно использовать их вместе. На- пример если вам необходимо выполнить
<оператор> только для тех элементов матрицы, которые больше 3, то удобно это сделать следующим образом:
for i=find(A>3)
<оператор>
end;
5.
Функции MATLAB
В системе MATLAB существует большое количество функций, подготовленных разработчиками системы (см. п.
E
). Большинство из них предоставлено в виде исходных текстов. Можно эти функции классифицировать по областям их исполь- зования (тригонометрические, спецфункции, функции линейной алгебры и т.д.), но здесь мы вкратце опишем действия функций по отношению к матричному характе- ру переменных MATLAB.
5.1.
Скалярные функции
Определенные функции MATLAB действуют только на скаляры, но когда аргу- ментом их является матрица, то они действуют поэлементно. К таким функциям относятся sin asin exp abs round cos acos log (натуральнй) sqrt floor tan atan rem (остаток)
sign ceil
5.2.
Векторные функции
Существуют другие функции, аргументами которых являются вектора (строки или столбцы), но если эти функции действуют на матрицу размера mxn (m >= 2),
то они действуют постолбцово, т.е. результатом действия является вектор-строка,
каждый элемент которой является результатом действия этой функции на соответ- ствующий столбец. Построчное действие такой функции (если необходимо) может быть достигнуто использованием операции транспонирования. Например,
mean(A’).
Некоторые из этих функций приведены далее:
121
max sum median any min prod mean all sort std
Например, максимальный элемент прямоугольной матрицы находится с помо- щью команды
max(max(A)), а не с помощью max(A). Попробуйте сами выпол- нить эти операции.
5.3.
Матричные функции
Наибольшую мощь системе MATLAB дают матричные функции. Наиболее упо- требительные приведены в следующей таблице:
eig собственные значения и собственные вектора chol факторизация Холецкого svd сингулярная декомпозиция inv обратная матрица lu
LU-факторизация qr
QR-факторизация hess форма Хессенберга schur декомпозиция Шура rref приведение к треугольной форме методом Гаусса expm матричная экспонента sqrtm матричный корень квадратный poly характеристический полином det определитель size размерность norm норма вектора или матрицы cond число обусловленности rank ранг матрицы
Функции MATLAB могут иметь один или несколько результатов. Например,
функция
y = eig(A), или просто eig(A) генерирует вектор-столбец, содержащий собственные значения матрицы A, в то время как оператор
[U,D] = eig(A) ге- нерирует матрицу U, чьи столбцы являются собственными векторами A, а диа- гональная матрица D содержит на главной диагонали собственные значения этой матрицы. Попробуйте вычислить это сами.
122

6.
M-файлы
MATLAB может выполнять последовательность операторов, записанных в файл на диске. Такие файлы называются m-файлами, потому что имена этих файлов имеют вид <имя>.m. Большая часть вашей работы в MATLAB будет состоять в создании, редактировании и выполнении таких m-файлов. Имеется два типа m- файлов: файлы-программы, или сценарии, и файлы-функции.
6.1.
Файлы-программы, или сценарии
Файлы-программы состоят из последовательности обычных операторов MATLAB.
Если файл с таким сценарием имеет имя, например, rotate.m, то команда
rotate,
введенная в командной строке, вызовет выполнение соответствующей последова- тельности операторов. Переменные в программе являются глобальными и изменят значения таких же переменных (если таковые есть) в рабочей области текущей сессии. Программы или сценарии часто используются для ввода данных в большие матрицы; в таких файлах легко исправить ошибки ввода. Если, например, файл на диске с именем data.m содержит строки
A = [
1 2 3 4
5 6 7 8
];
тогда команда
data приведет к тому, что написанное выше присвоение будет вы- полнено. Внутри m-файлов можно ссылаться на другие m-файлы, в том числе и на самого себя рекурсивно.
1   ...   9   10   11   12   13   14   15   16   17


написать администратору сайта