- •Некоторые сведения о пакете Matlab.
- •Данные в ml
- •Матрицы
- •Операции в ml
- •Логические операции:
- •Приоритет операций в ml:
- •Тригонометрические функции.
- •Особые матрицы
- •Операции с векторами и матрицами.
- •Выполнение операций над матрицами.
- •Специальные функции для матриц.
- •Действия с элементами матрицы
- •Анализ данных (для постолбцовой обработке матриц)
- •Действия с полиномами (многочленами)
- •Графика в ml
- •Диаграммы и гистограммы.
- •Круговые диаграммы.
- •Программирование в ml
- •Операторы языка
- •Операторы ввода/вывода
- •Операторы цикла и условные операторы.
- •Операторы цикла.
- •Оператор цикла с параметром:
- •Оператор цикла с предусловием:
- •Условный оператор.
- •Оператор переключения (выбора).
- •Функция eval
- •Функция menu.
- •Файлы функции
- •Вычисление интеграла.
- •Нахождение нулей функции.
- •Решение систем дифференциальных уравнений.
Операторы цикла и условные операторы.
Язык ML имеет специальные управляющие конструкции, которые позволяют задавать последовательность выполнения команд в программах. Это операторы управления: операторы циклов FOR и WHILE, оператор условного перехода IF и оператор переключения (выбора) SWITCH…CASE. Синтаксис и выполняемые действия этих операторов аналогичны соответствующим операторам известных языков программирования. Область действия каждой конструкции ограничивается, словом end. MATLAB допускает вложенность циклов, а также возможность досрочного выхода из циклов, с помощью команды BREAK.
Операторы цикла.
-
Оператор цикла с параметром:
for <параметр цикла>=<нач. знач. пар. ц.>:<шаг>:<кон. знач.пар.ц.>
<операторы>
end
Если шаг = 1, то его можно не указывать. Параметры цикла могут быть целого и вещественного типа.
Везде, где возможно в ML следует использовать не циклы, а векторные и матричные операции (т.к. это быстрее).
Пусть требуется составить вектор из 5 нечетных чисел натурального ряда.
Для решения этой задачи можно:
-
использовать оператор цикла
>> for i=1:5
x(i)=2*i-1
end
x =
1
x =
1 3
x =
1 3 5
x =
1 3 5 7
x =
1 3 5 7 9
Очень долго работает, т.к. память выделяется последовательно под каждый элемент, т. е. при каждой итерации цикла заново создается вектор х с размерностью на единицу большей, что и приводит к увеличению времени и замедляет скорость выполнения программы.
-
сформировать вектор из нулей х=zeros(1,5), а потом заполнить его значениями.
>> x=zeros(1,5)
x =
0 0 0 0 0
>> for i=1:5
x(i)=2*i-1
end
x =
1 0 0 0 0
x =
1 3 0 0 0
x =
1 3 5 0 0
x =
1 3 5 7 0
x =
1 3 5 7 9
В данном случае мы заранее определили размер вектора, в который записываются результаты работы цикла.
Чтобы повысить эффективность работы программы, следует иметь в виду следующее правило: везде, где возможно, заменять фрагменты программы, содержащие циклы for и while на встроенные операторы. Это объясняется тем, что скорость выполнения матричных и векторных операций выше.
-
Можно сформировать два вектора:
вектор i=1:5;
вектор х=2*i-1
>> i=1:5;
>> x=2*i-1
x =
1 3 5 7 9
-
Оператор цикла с предусловием:
while <условие>
<операторы>
End
Сформируем вектор нечетных чисел:
>> i=1;
>> while i<=5
x(i)=2*i-1;
i=i+1;
end;
>> x
x =
1 3 5 7 9
Пример.
Найти наибольшее число, факториал которого< 150.
echo on
%нахождение наибольшего числа, факториал, которого<150
i=0;
f=1;
while f<150
i=i+1;
f=f*i;
end
disp(i-1)
на экране получим:
5
или лучше воспользоваться встроенной функцией:
>> i=1;
>> while prod(1:i)<150
i=i+1;
end;
>> disp(i-1)
на экране получим:
5
Если нельзя обойтись без циклов, то можно заставить их выполняться быстрее, если следовать правилу: определять заранее каждый вектор, в который требуется записывать работы цикла.