|
МATLAB_ЛР№1. Лабораторная работа 1 Работа в режиме командной строки в системе matlab
Логический тип данных (LOGICAL) Значения этого типа являются результатом вычислений условных и логических выражений и участвуют во всевозможных условных операторах языка. Логическое выражение может принимать одно из двух значений: «Истина» («true») или «Ложь» («false»). В MATLAB «Истина» ассоциируется с единицей, а «Ложь» – с нулем, хотя запись «true» и «false» также допустима.
Значения логического типа получаются как результат операций отношения («==», «=»,«<», «>», «<=», «>=») и логических операций (конъюнкция, дизъюнкция, отрицание, сумма по модулю 2), список которых с примерами использования в MATLAB приведен в учебном пособии «Алгоритмизация и структурное программирование в MATLAB».
В MATLAB существует ряд логических функций, начинающихся со слова «is» («быть», «являться» с англ.), с помощью которых переменные проверяются на различные условия. Например, функция isscalar(x) возвращает логическую 1, если переменная х является матрицей размером 1х1 (т.е. скаляром или символом), и логический 0 в противном случае.
Следует отметить, что система MATLAB воспринимает как «Ложь» только 0 (типа double), а все остальные числовые или строковые значения воспринимаются как «Истина», однако результатом логических вычислений могут быть только «0» или «1».
В отличие от некоторых других языков программирования, результат вычисления логического выражения может быть использован в арифметических выражениях. В качестве примера рассчитаем значение кусочно заданной функции с использованием операций отношения. Дана функция:
>> x=0:0.1:6; %создать вектор-строку х со значениями от 0 до 6 с шагом 0.6
>> y=(x =pi).*(x-pi).^0.5;
>>plot(x,y) % для визуализации результатов используется функция …
построения двумерного графика plot()
Рисунок 3. График кусочно заданной функции В данном примере задается вектор аргументов x со значениями от 0 до 6 с шагом 0,1. После этого вычисляется вектор значений функции y. Логическое выражение (x=pi) равно нулю, второе слагаемое также равно нулю и значимым является первое слагаемое. Символьный тип данных Символьный тип (char) – это тип данных, состоящих из одного символа (знака, буквы, кода). Значением типа char может быть любой символ из таблицы кодировки символов ASCII. Строки в MATLAB являются векторами, элементами которых являются символы, для них применимы многие матричные операции. Так, например, можно объединить строки с помощью символов«[,]»или «[;]». Система MATLAB позволяет создавать многострочные переменные символьного класса, являющиеся двумерными массивами символов.
Для создания строки в MATLAB необходимо ее значение (текст) заключить в одинарные кавычки. Приведем пример создания строки:
>>str = 'Hellow, world!'
str =
Hellow, world! Внутри одиночных кавычек можно помещать все доступные символы, например буквы, цифры, символы подчеркивания, двойные кавычки и др. Однако, так как строка сама ограничивается одинарными кавычками, то для того чтобы поместить в строку одинарную кавычку, необходимо поместить в нее две следующие подряд одинаковые кавычки.
>>str = 'You''re right!'
str =
You're right! Система MATLAB обладает рядом функций для работы с символьными переменными и строками, например функции создания и проверки строк.
Основы работы с матрицами и векторами
Создание матриц и векторов
Как отмечалось ранее, переменные в MATLAB представляют собой матрицы. Рассмотрим способы ввода матрицы с указания полного списка элементов. В MATLABматрицы задаются с помощью специальных символов («[ ]», «[ , ]», «[ ; ]», а так же с помощью стандартных функций (horzcat( ) – создает строку, vertcat( ) – создает столбец). При задании матриц необходимо следить за равенством длин строк, ее образующих. Для примера создадим числовую матрицу :
>> A = [1.2 2.4 3.1; 4.3 5.3 6.4]
A =
1.2000 2.4000 3.1000
4.3000 5.3000 6.4000
В данном случае элементы матрицы, находящиеся в одной строке, разделяют пробелами, а строки разделяются символом «;». Так же элементы, находящиеся в одной строке, можно разделить с помощью запятых:
>> A = [1.2, 2.4, 3.1; 4.3, 5.3, 6.4]
A =
1.2000 2.4000 3.1000
4.3000 5.3000 6.4000
Матрицы в MATLABможно задавать не только с помощью вертикального объединения строк, как в предыдущем примере, но и при помощи горизонтального объединения столбцов:
>> A = [[1.2;4.3] [2.4;5.3] [3.1;6.4]]
A =
1.2000 2.4000 3.1000
4.3000 5.3000 6.4000
При обращении к элементу матрицы в MATLAB после имени матрицы следует указать в круглых скобках два индекса, разделенных запятой. Первый индекс обозначает номер строки, а второй – номер столбца. Нумерация строк и столбцов начинается с единицы.
>> A(2,3)
ans =
6.4000
При обращении к строке (столбцу) матрицы необходимо указать номер строки в качестве первого (второго) индекса, а на месте второго (первого) индекса ввести символ двоеточие «:».
>> A(2,:)
ans =
4.3000 5.3000 6.4000
Также MATLAB позволяет создать специальные матрицы, для чего используются встроенные функции MATLAB.
Векторы создаются аналогично матрицам:
>> x = [1 2 3]
x =
1 2 3
>> y = [1; 2; 3]
y =
1
2
3
>> A=vertcat(2,5,8); B=horzcat(5,3,1);
>>A
A =
2
5
8
>> B
B =
5 3 1
В данном случае xи B – это векторы-строки, а yи А - векторы-столбцы. Отличия вектора-столбца от вектора-строки проявляются при использовании матричных операций и использовании функций.
Рассмотрим еще один важный способ задания вектора-строки – оператор двоеточия «:». Например:
>> 1:10
ans =
1 2 3 4 5 6 7 8 9 10
В данном случае был создан вектор-строка со значениями от 1 до 10 с шагом 1 (задается по умолчанию). При необходимости шаг можно указать явно:
>> 1:2:10
ans =
1 3 5 7 9
В данном случае значение 10 не содержится в векторе, так как оно задает лишь максимальное значение (или минимальное, при отрицательном шаге), которое будет содержаться в векторе.
Шаг так же может быть отрицательным:
>> 0 : -pi/4 : -2 * pi
ans =
0 -0.7854 -1.5708 -2.3562 -3.1416 -3.9270 -4.7124 -5.4978 -6.2832
Поэлементные операции над матрицами
Рассмотрим поэлементные операции над матрицами/векторами.
Большинство функций MATLAB могут работать с матрицами и векторами. Рассмотрим в качестве примера функцию sin:
>>x = 0 :pi/6 : pi
x =
0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416
>>sin(x)
ans =
0 0.5000 0.8660 1.0000 0.8660 0.5000 0.0000
Результат данных вычислений является вектор такого же размера, что и входной аргумент функции sin, содержащий значения синуса элементов вектора x.
Так же можно производить поэлементные операции сложения, вычитания, умножения, деления и возведения в степень для матриц/векторов одинаковой размерности. Например:
>> x = [1 2 3];
>> y = [3 2 1];
>> x + y
ans =
4 4 4
>> x - y
ans =
-2 0 2
>>x .* y
ans =
3 4 3
>>x ./ y
ans =
0.3333 1.0000 3.0000
>>x .^ y
ans =
1 4 3
Однако, при поэлементном умножении матриц разного размера, получим ошибку:
>> x = [1 2 3];
>> y = [3; 2; 1];
>>x .* y
Error using .*
Matrixdimensionsmustagree.
Отметим, что для поэлементного умножения, деления и возведения в степень необходимо перед операцией ставить точку: «.*», «./», «.^», иначе будут применяться матричные операции. При вычислении более сложных операций в MATLAB нужно помнить о приоритете этих операций (см. таблицу 3).
Преобразование типов данных в MATLAB
Как отмечалось ранее, основными типами данных в MATLAB являются числовые, логические и символьные. Зачастую, при написании программы необходимо преобразовать данные из одного типа в другой. Например, для того, чтобы подписать график функции текст подписи должен представлять собой строковую переменную. Данное из числовой переменной a с помощью функции num2str преобразуется в строку b.
>> a=sin(pi/2)+2*cos(pi/4)
a =
2.4142
>> b=num2str(a)
b =
2.4142
>> c=(a>0)
c =
1
В рабочей области было создано три переменные – а типа double, b типа char и с типа logical.
Следует обратить внимание, что для обозначения каждого из перечисленных типов данных в рабочей области MATLAB существует свой значок (иконка): - тип double, - тип char, - тип logical.
Так же удобно использовать функции преобразования типов данных для проверки типов переменных. В частности, при организации диалога с пользователем удобно использовать преобразование типов для оценки корректности ввода данных. По результату преобразования можно судить о том, содержит ли строка только цифры или так же и символы. Например, функция str2double(s)(см. таблицу 4 приложения) преобразует строку s в число (скаляр) типа double. Если строка s содержала символы, математические выражения или представляла собой вектор или матрицу, функция str2double(s) вернет Nan (Not-a-number). Следует так же отметить, что при преобразовании с помощью функции str2double символ запятая ',' опускается.
>> a='23.2';
>> str2double(a)
ans =
23.2000
>> b='hello';
>> str2double(b)
ans =
NaN
>> c='12,4';
>> str2double(c)
ans =
124
Так же MATLAB обладает возможностями вычисления математических выражений, содержащихся в символьной переменной или строке. В частности, это реализуется с помощью функции eval(). >> str='sin(pi/2)';
>> eval(str)
ans =
1 >> x = 0 : 0.5 : pi;
>> str = '( sin( 2 * x ) + 1 ) .* ( x .^ 2 )';
>> y=eval (str)
y =
0 0.4604 1.9093 2.5675 0.9728 0.2567 6.4853
Основы построения графиков в MATLAB
MATLAB обладает мощным инструментом визуализации результатов вычислений.
Построим график функции вMATLAB. Для этого создадим вектор-строку xзначений переменной от 0 до с шагом 0,05.
>>x = 0 : 0.05 : 6*pi;
>>y = ( sin( 2 * x ) + 1 ) .* ( x .^ 2 );
>>plot(x, y);
>>xlabelx
>>ylabely
После ввода данных команд появится график представленных на рисунке 4.
Рисунок 4. График в MATLAB
В простейшем случае для построения графиков используется функция plot, принимающая два входных аргумента, которыми являются векторы одинаковой длины, задающие координаты точек для построения графика. В первом аргументе содержится значение координат точек по оси абсцисс, а во втором – по оси ординат.
Для того, чтобы подписать оси графиков, используется команды xlabel и ylabel, за которыми через пробел следует название оси графика.
Справочная система в MATLAB (Help)
Подробную информацию об объектах и функциях MATLAB можно получить, используя справочную систему. Для вывода справки в консоль используют команду help. Для вывода справки по конкретному объекту используют help<имя объекта>. При этом в консоль выводится краткая справка по объекту, приводятся гиперссылки на близкие по значению или назначению объекты, а так же наCHTML-страницу с расширенной справкой по объекту. В расширенной справке так же приводятся примеры использования рассматриваемого объекта.
Например, для получения справки о функции sin, введем в командной строке «helpsin»:
>> help sin
sin Sine of argument in radians.
sin(X) is the sine of the elements of X.
See also asin, sind.
Overloaded methods:
codistributed/sin
gpuArray/sin
sym/sin
Reference page in Help browser
doc sin
Так же в MATLAB существует справка по ключевому слову, реализуемая командой «lookfor<Ключевое слово>».
Задание на лабораторную работу №1
Задание №1
Выбрать функцию для вычисления в соответствии с номером варианта (таблица 4); Задать точкуx1согласно номеру варианта; Вычислить значение функции в точкеx1 и присвоить результат переменнойy1; С использованием оператора двоеточия сформировать вектор x со значениями от xMin до xMax с шагом dx; Для каждого элемента вектора x вычислить cпомощью значение функции, заданной по варианту, и записать результат в переменную y; Используя созданные вектора, построить график функции и подписать оси.
Задание №2
Используя операторы отношения, вычислить значения кусочно заданной функциипо 100 равномерно распределенным точкам, охватывающими все ее области определения (3 отрезка) согласно номеру варианта (таблица 5), рассчитанные значения присвоить переменной y2 и нарисовать график функции. Задание №3
Создать строковые переменные:str1, в которую записать свою фамилию, переменную str2, в которую записать свое имя и переменную str3, в которую записать свое отчество; С помощью объединения строк создать переменные str4 и ,str5, содержащее ФИО, записанные в одну строку, и ФИО, записанные в три строкисоответственно;
3. Найти, в каких позициях ФИО содержится буква «а»;
4. Определить, содержится ли в ФИО буква «ю»;
В переменной str4 поменять все строчные буквы напрописные; В переменной str5 поменять все заглавные буквы на строчные.
Задание №4
Создать строковые переменные, содержащие данные согласно номеру варианта (таблица 6) Преобразовать строковые переменные в числовые с помощью функции str2double. Объяснить полученные результаты. Преобразовать строковые переменные в числовые с помощью функции str2num. Объяснить полученные результаты. Применить к строковым переменным функцию eval. Объяснить полученные результаты.
Задание №5*(дополнительное)
Четырьмя способами сформировать матрицу, содержащую 2 строки и 3 столбца, элементами которой являются первые 6 значений вектора y2 значений функции (задание 2). Названия матриц должны соответствовать Аi, где i=1..4. (Задание матриц с использованием « , » и « » для элементов в одной строке считается 1 способом).С помощью логических функций проверить матрицы на равенство, матрицуА3 возвести в квадрат, поэлементно умножить матрицы А1 и А2. Таблица 4. Варианты задания №1
Номер варианта
| ЗАДАНИЕ №1
| Функция для задания №1
| x1
| xMin
| dx
| xMax
| I
| II
| III
| IV
| V
| VI
| 1
|
|
|
|
|
| 2
|
|
|
|
|
| 3
|
|
|
|
|
| 4
|
|
|
|
|
| 5
|
|
|
|
|
| 6
|
|
|
|
|
| 7
|
|
|
|
|
| 8
|
|
|
|
|
| 9
|
|
|
|
|
| 10
|
|
|
|
|
| 11
|
|
|
|
|
| 12
|
|
|
|
|
| 13
|
|
|
|
|
| 14
|
|
|
|
|
| 15
|
|
|
|
|
| 16
|
|
|
|
|
| 17
|
|
|
|
|
| 18
|
|
|
|
|
| 19
|
|
|
|
|
| 20
|
|
|
|
|
| 21
|
|
|
|
|
| 22
|
|
|
|
|
| 23
|
|
|
|
|
| 24
|
|
|
|
|
| 25
|
|
|
|
|
| 26
|
|
|
|
|
| 27
|
|
|
|
|
| |
|
|