MATLAB_4_Управление_потоком_команд
.pdfУправление потоком команд
Для написания нелинейного кода со сложной структурой в языках программирования обычно используются операторы управления, такие как циклы и условные ветвления. Они имеются и в MatLab и могут быть использованы как при написании программ, так и при работе с командной строкой.
Выполнение повторяющихся блоков кода в MatLab производится с помощью двух видов опереаторов циклов for и while. for выполняет строго фиксированное число повторений операций блока, а while выполняется до тех пор, пока верно некоторое условие. while реализован сходно с другими языками программирования, как и операторы ветвления if и switch.
Цикл for осуществляется следующим образом
for count = start:step:final <операторы>
end
count — счётчик цикла
start — его стартовое значение step — шаг счётчика
final — конечное значение
Пример:
>>figure(12345)
>>x = linspace(0, 2*pi, 100);
>>for a = -0.1:.02:0.1, y = exp(-a*x).*sin(x); hold on; plot(x, y), end
Синтаксис цикла while while <условие>
<операторы>
end
Синтаксис условного оператора if if <условие>
<операторы>
end
или
if <условие> <операторы>
elseif <условие> <операторы>
else
<операторы>
end
Синтаксис оператора switch switch <выражение>
case <значение_1> <операторы_1> case <значение_2> <операторы_2>
…
otherwise <операторы>
end
Средства решения типовых задач алгебры и анализа
Решение систем линейных уравнений
1. Оператор «\» - деление слева
Ax = b — СЛАУ, А — квадратная матрица n x n, b и x — векторы длины n.
>>a = [3 2 1; -1 2 0; 4 0 -2]; b = [2 -1 6]';
>>x = a\b
x = 1 0 -1
>> norm(a*x-b) ans =
0
Решение систем линейных уравнений
2. Оператор «/» - деление справа
XA = B — матричное уравнение, А, B и Х— квадратные матрицы n x n.
>>a = [3 2 1; -1 2 0; 4 0 -2]; b = [7 2 -1; -4 0 -1; -4 0 2];
>>x = a/b
x = |
|
|
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
-1 |
Вычисление нормы матриц и векторов Функция norm()
Для матриц
norm(X) — наибольшее из сингулярных чисел X, max(svd(X)) norm(X,2) <=> norm(X)
norm(X,1) — наибольшая сумма по столбцам = max(sum(abs(X))).
norm(X,inf) — наибольшая сумма по строкам = max(sum(abs(X'))).
norm(X,'fro') норма Фробениуса = sqrt(sum(diag(X'*X))).