Лабораторная работа № 1. ПРОГРАММИРОВАНИЕ В СРЕДЕ MATLAB
Цель работы – изучение основных стандартных функций MatLab, а также создания функций и построение графиков в данной системе.
Краткие теоретические сведения
Арифметические выражения в MatLab состоят, как и в большинстве языков программирования, из чисел, знаков арифметических операций, знака ^ (возведение в степень), круглых скобок, переменных, и встроенных функций. Десятичная часть числа отделяется точкой. Для вычисления простейшего выражения следует набрать его в командной строке и нажать <Enter>. Ответ записывается в специальную переменную ans и результат выводится в командное окно:
>> 1.5+2.9
ans =
4.400
Вид результата зависит от установленного формата, подробнее о форматах вывода написано ниже. После вычисления следующего выражения значение ans изменится. Для сохранения результатов промежуточных вычислений их следует записывать в переменные. При использовании переменных необходимо придерживаться правил:
· имя переменной может состоять из символов латинского алфавита, знака подчёркивания и цифр, но начинается обязательно с символа алфавита;
· прописные и строчные буквы различаются;
· пробел не входит в имя переменной.
Для подавления вывода следует завершить строку с оператором присваивания точкой с запятой. Символ «e» предназначен для записи чисел в экспоненциальной форме: числа 0.00125 и 1.25e-3 эквивалентны. Комплексные числа вводятся при помощи буквы i:
>>b=5*(2.2+3.9i)+0.8
b =
11.8000 +19.5000i
|
Тригонометрические функции (аргумент задаётся в радианах) | ||
sin, cos, tan, cot | Синус, косинус, тангенс и котангенс | |
sec, csc | Секанс, косеканс | |
Обратные тригонометрические функции (результат вычисляется в радианах) | ||
asin, acos, atan, acot | Арксинус, арккосинус, арктангенс и арккотангенс | |
asec, acsc | Арксеканс, арккосеканс | |
Гиперболические функции | ||
sinh, cosh, tanh, coth | Гиперболические синус, косинус, тангенс и котангенс | |
sech, csch | Гиперболические секанс и косеканс | |
asinh, acosh, atanh, acoth | Гиперболические арксинус, арккосинус, арктангенс и арккотангенс; | |
Экспоненциальная функция, логарифмы, степенные функции | ||
exp | Экспоненциальная функция | |
log, log2, log10 | Натуральный логарифм, логарифмы по основанию 2 и 10 | |
sqrt | Квадратный корень | |
Модуль, знак и функции для работы с комплексными числами | ||
abs, sign | Модуль и знак числа | |
conj, imag, real | Комплексно-сопряжённое, мнимая и вещественная часть | |
Массивы являются одним из самых распространенных способов хранения данных и используются во всех языках программирования и вычислительных пакетах. К особенностям работы с массивами в MatLab относится то, что одномерный массив может быть вектор-строкой или вектор-столбцом. Если способ представления массива важен, то мы будем подчеркивать, о строке или о столбце идет речь. Если же это несущественно, то будем говорить о вектор-строках и вектор-столбцах просто как о векторах или одномерных массивах (одномерный массив в MatLab есть двумерный, у которого один из размеров равен единице).
Для ввода вектора используются квадратные скобки, элементы вектора отделяются друг от друга:
• точкой с запятой, если требуется получить вектор-столбец;
• пробелом или запятой, если необходимо разместить элементы в вектор-строке.
Занесите вектор-столбцы и вектор-строки:
в соответствующие массивы, набрав в командной строке:
>> a=[0.2; -3.9; 4.6];
>> b=[7.6; 0.1; 2.5];
>> u=[0.1 0.5 -3.7 8.1];
>> v=[5.2 9.7 3.4 -0.2];
Точка с запятой в конце каждой строки поставлена для подавления вывода на экран, она никак не связана с точкой с запятой, которая является разделителем элементов в вектор-столбцах. Выведите в командное окно значения переменных a, b, u, v и посмотрите, как MatLab отображает содержимое вектор-строк и вектор-столбцов. Получите информацию о переменных при помощи команды whos.
Для получения длины вектора предназначена функция length, вектор указывается в качестве ее входного аргумента:
>> L=length(a)
L =
3
Вектор-столбцы с одинаковым числом элементов можно складывать и вычитать друг из друга при помощи знаков "+" и "-". Аналогичное верно и для вектор-строк:
>> c = a + b;
>> w = u - v;
Сложение и вычитание вектор-строки и вектор-столбца или векторов разных размеров приводит к ошибке. Операция * предназначена для умножения векторов по правилу матричного умножения. Поскольку MatLab различает вектор-строки и вектор столбцы, то допустимо либо умножение вектор-строки на такой же по длине вектор-столбец (скалярное произведение), либо умножение вектор-столбца на вектор-строку (внешнее произведение, в результате которого получается прямоугольная матрица).
Для операции транспонирования зарезервирован апостроф «'». Если вектор содержит комплексные числа, то операция «'» приводит к комплексно-сопряженному вектору.
MatLab поддерживает поэлементные операции с векторами. Наряду с умножением по правилу матричного умножения, существует операция поэлементного умножения «.*» (точка со звездочкой). Данная операция применяется к векторам одинаковой длины и приводит к вектору той же длины, что исходные, элементы которого равны произведениям соответствующих элементов исходных векторов. Например, для векторов a и b, введенных выше, поэлементное умножение дает следующий результат:
>> c=a.*b
c =
1.5200
-0.3900
11.5000
MatLab обладает широким набором средств для построения графиков функций одной и двух переменных и отображения различных типов данных. Все графики выводятся в графические окна со своими меню и панелями инструментов. Вид графиков определяется аргументами графических команд и затем может быть изменен при помощи инструментов графического окна. Важно понимать, что для построения графиков функций на некоторой области изменения аргументов следует вычислить значения функции в точках области, часто для получения хороших графиков следует использовать достаточно много точек.
Разберем сначала, как получить график функции одной переменной, к примеру:
на отрезке [-2,2]. Первый шаг состоит в задании координат точек по оси абсцисс.
Заполнение вектора x элементами с постоянным шагом при помощи двоеточия позволяет просто решить эту задачу. Далее необходимо поэлементно вычислить значения f (x) для каждого элемента вектора x и записать результат в вектор f. Для построения графика функции осталось использовать какую-либо из графических функций MatLab. Достаточно универсальной графической функцией является plot. В самом простом случае она вызывается с двумя входными аргументами — парой x и f (т. е. plot выводит зависимость элементов одного вектора от элементов другого). Последовательность команд, записанная ниже, приводит к появлению графического окна Figure No.1 с графиком функции (рис. 1.1).
>> x=[-2:0.05:2];
>> f=exp(x).*sin(pi*x)+x.^2;
>> plot(x, f)
Рис. 1.1 – График функции
Все М-файлы, с которыми работает система MATLAB, делятся на две категории: скрипты и функции. Скрипт – это просто последовательность команд, в которой используются переменные из основного рабочего пространства MATLAB. Функция – это подпрограмма, которая принимает аргументы (параметры) и возвращает результаты. В отличие от функций в большинстве языков программирования, функция MATLAB может возвращать несколько результатов (а не один). Функция отличается от скрипта тем, что имеет заголовок, который начинается словом function. Например, заголовок
function [a,b,c,d] = qq (x, y, z)
определяет функцию с именем qq, которая принимает три параметра (x, y и z) и возвращает 4 результата (a, b, c и d). В отличие от большинства современных языков, типы переменных (целая, вещественная, символьная, массив и т.д.) не определяются заранее, каждая из них содержать любые допустимые в MATLAB данные.
Функция записывается в М-файл (с расширением.m), имя которого должно совпадать с именем функции. Например, функция qq должна быть записана в файл qq.m. Современные версии MATLAB вообще не обращают внимание на имя функции (в заголовке), важно только имя файла.
Функция имеет своё пространство переменных и не может напрямую обращаться к переменным основного рабочего пространства. Внутри функции доступны аргументы, кроме того, можно вводить и использовать новые переменные. Для того, чтобы вернуть нужные значения, надо записать их в переменные a, b, c и d. Оператор return используется для досрочного возврата из функции (до этого во все выходные переменные должны быть записаны нужные значения).
Функции могут вызываться по имени из командной строки MATLAB, из скрипта или из другой функции. Например, для вызова рассмотренной выше функции qq надо набрать команду вида
[w,e,r,t] = qq (x1, 4*x2, 3)
В данном случае при работе функции вместо x используется значение переменной x1, вместо y – значение выражения 4*x2, а вместо z – число 3. Результаты функции записываются в переменные w, e, r и t.
При вызове функции количество входных и выходных переменных может быть меньше (но не больше!), чем в заголовке функции. Внутри функции число входных параметров хранится в специальной переменной nargin, а число выходных величин – в переменной nargout.
Постановка задачи
Задана функция (варианты см. табл. 1.2). По вариантам написать функцию в MatLab вычисления значений на указанном отрезке, состоящим из 20 аргументов. Построить график функции.
Таблица 1.2 – Варианты заданий
№ варианта | Функции | Отрезок |
1 | ||
2 | [0; 4] | |
3 | [0; 0.5] | |
4 | [0; 1] | |
5 | [0; 3] | |
6 | ||
7 | [-1,1] | |
8 | [-1,1] | |
9 | [-2,2] | |
10 | [-2,2] | |
11 | ||
12 | [0; 4] | |
13 | [0; 0.5] | |
14 | [0; 1] | |
15 | [0; 3] | |
16 | ||
17 | [-1,1] | |
18 | [-1,1] | |
19 | [-2,2] | |
20 | [-2,2] |