Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие (Лаб.1-2)

.pdf
Скачиваний:
12
Добавлен:
02.04.2015
Размер:
724.42 Кб
Скачать

матричные операции.

При вычислении более сложных операций в MATLAB нужно помнить о приоритете этих операций. Приоритет операций представлен в таблице 2.

Таблица 2. Приоритеты арифметических операций

уровень

операции

 

 

 

поэлементное транспонирование «.'», поэлементное возведение в степень «.^»,

1

эрмитово сопряженное транспонирование матрицы «'», возведение матрицы в

 

степень «^»

2

унарное сложение «+», унарное вычитание «-»

 

 

3

поэлементное умножение «.*», поэлементное деление «./», умножение матриц

«*», решение систем линейных уравнений «/»

 

4

сложение «+», вычитание «-»

5

оператор формирования массивов «:»

Внутри каждого уровня операторы имеют равный приоритет и вычисляются в порядке следования слева направо. Заданный по умолчанию порядок следования может быть изменен с помощью круглых скобок.

Приведем пример:

>>x = [0 pi*5/2];

>>y = ( sin( 2 * x ) + 1 ) .* x

y =

07.8540

Отметим, что матрицы или вектора можно складывать со скалярными значениями и в этом случае скалярное значение прибавится к каждому элементу матрицы или вектора:

>> [1 2 3] - 2

ans =

-1 0 1

Аналогичные действия можно выполнять с операциями вычитания, умножения, деления и операции поэлементного возведения в степень.

Основы построения графиков

Приведем пример построения графика в MATLAB:

>>x = 0 : 0.05 : 6*pi;

>>y = ( sin( 2 * x ) + 1 ) .* ( x .^ 2 );

11

>>plot(x, y);

>>xlabel x

>>ylabel y

После ввода данных команд появится график представленных на рисунке 4.

Рисунок 4. График в MATLAB

В простейшем случае для построения графиков используется функция plot, принимающая два входных аргумента, которыми являются векторы одинаковой длинны, задающие координаты точек для построения графика. В первом аргументе содержится значение координат точек по оси абсцисс, а во втором — по оси ординат.

Для того чтобы подписать оси графиков используется команды xlabel и ylabel, за которыми следует название оси графика.

Задания на лабораторную работу

После выбора номера варианта выполнить следующие этапы:

1.выбрать функцию для вычисления в соответствии с номером варианта;

2.вычислить значение заданной функции в точке x1;

3.с использованием оператора двоеточия сформировать вектор x со значениями от xMin до xMax с шагом dx;

4.для каждого элемента вектора x вычислить значение функции, заданной по варианту, и записать результат в переменную y;

5.используя созданные вектора, построить график функции и подписать оси.

Примечание к заданию

Для вычисления натурального логарифма, тангенса и экспоненты в MATLAB

12

предусмотрены функции log, tan и exp соответственно.

Варианты задания

Номер

 

 

 

 

 

 

 

 

функция

 

 

 

 

 

 

 

 

 

x1

xMin

dx

xMax

варианта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

y=sin (2 x )2cos(5 x)+ 2

π

2π

 

π

2π

3

 

25

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

2

π

 

 

π

 

2

y= sin( x) +cos(−3 x) +2

2π

 

2π

3

 

25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

y=−5cos( x2)+ xsin( x) x 2

π

2π

 

π

2π

3

 

25

 

 

 

 

 

 

tg(2x) sin (

x

)

 

π

 

 

π

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

2π

 

 

 

2π

y=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

y=6sin(

x

 

 

 

+1)+cos(

 

x

2

 

3 x )

π

2π

 

π

2π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

25

 

 

 

 

 

 

 

 

 

10

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

y=

 

 

x3+ 4 x 10

 

 

 

 

 

 

5

8

0.16

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7 x24 x +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2+

4

x+ 2

 

 

 

 

 

 

7

 

 

 

 

 

 

5

8

0.16

8

y=

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 x39 x +2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x4

10 x2 +4

3

0

0.08

8

8

y=

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6 x32 x +2

 

 

 

 

 

 

 

9

y=

 

 

 

x24 x +4

 

 

 

 

 

 

3

0

0.08

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 x24 x+4

 

 

 

 

 

 

 

 

 

 

 

 

10

y=

x2+ 4 x10

 

 

 

 

 

 

3

0

0.08

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 x34 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

y=

4

 

+ sin( x+1) x

4

1

0.08

9

 

x

 

 

 

 

 

 

12

y=2e−(x3)2 + 2e−(x6)2

4

1

0.08

9

13

y=−x e−(x4)2 + x e−( x9 )2

4

1

0.08

9

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

−(x4)2

 

 

 

 

 

 

14

y=ln (

 

) x sin (x )+ e

2

4

0.02

6

4

 

 

 

 

 

 

 

 

 

 

ln (

x

) x +10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

y=

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

2

4

0.02

6

 

2

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(

x

) x+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

Лабораторная работа №2. Программы в MATLAB

Скрипты

Наряду с работой в командной строке, существует еще один способ выполнения команд. Это написание программ.

Скрипт — последовательность команд MATLAB, записанная в файл с расширением

«.m».

Это обычные текстовые файлы. Для их написания можно использовать любой текстовый редактор.

Чтобы создать скрипт, в общем случае достаточно иметь под рукой обычный текстовый редактор. Мы будем использовать встроенный в среду MATLAB редактор. Используйте кнопку «New Script» в верхнем левом углу для создания нового скрипта. После нажатия данной кнопки появится окно текстового редактора (рисунок 5).

Рисунок 5. Редактор кода MATLAB Создадим небольшую программу:

fprintf('Hello World!\n')

Теперь необходимо сохранить данный скрипт, для этого надо нажать на кнопку «Save» в левом верхнем углу, после чего MATLAB предложит сохранить его в текущей директории («Current Folder»). Дадим скрипту имя «Example1.m» и сохраним его. Желательно, чтобы скрипт был сохранен в текущей директории, так MATLAB будет искать скрипты для запуска

14

в папках, которые перечислены во внутренней переменной MATLAB path. Также в этот список входит и текущая директория, отображаемая в среде MATLAB справа в специальной плавающей области. По умолчанию скрипт будет сохранен в текущий каталог, поэтому можно сразу же сделать его вызов. Запустить скрипт на выполнение можно введя его имя (имя m-файла в который он был сохранен) в командной строке и нажав «Enter» или кнопку «Run» в редакторе кода. В обоих случаях в командном окне отобразится следующий вывод:

>> Example1 Hello World!

Рассмотрим другой пример. Имеется скрипт:

x = 0:0.02:2*pi; a = 0.3;

b = 0.7;

y = a * sin(x) + b * cos(x); plot(x, y)

Сохраним в файл Example2.m и запустим на выполнение. В результате MATLAB посчитает и выведет на экран график функции y=a sin(x )+b cos(x ) .

Так же отметим, что после выполнения скрипта в окне «Workspace» появились переменные x, a, b и y. Для объяснения почему так получилось, рассмотри очень важно понятие в MATLAB как рабочая область.

Рабочая область системы MATLAB — это область памяти, в которой размещены переменные системы. Рабочие области в MATLAB бывают двух типов:

base workspace — базовая рабочая область;

function workspace — рабочая область функции.

Все переменные в рабочей области существуют в ней с момента их объявления при работе с данной рабочей областью и до явного их удаления с помощью команды clear или до конца действия данной рабочей области, например для базовой рабочей области это закрытие MATLAB.

При запуске скрипта он не создает новую рабочую область, а работает с рабочей областью откуда был вызван.

Когда мы вызываем скрипт из командного окна, то он работает с работает с базовой рабочей областью, поэтому ему доступны все переменны, которые мы создали до вызова скрипта. Так же если скрипт создаст еще переменные, то они останутся доступными и после его завершения.

Комментарии

15

Хорошим тоном в написании программного кода считается составлять комментарии к написанному вами коду. Комментарии никак не влияют на работу программы и служат для предоставления дополнительной информации. Комментарии помогут другим людям разобраться в вашем алгоритме и помогут вам вспомнить суть написанного через какой-то промежуток времени, когда вы уже забыли что программировали. Для указания начала комментария в MATLAB используется символ «%».

%Генерация равномерно распределенных случайных чисел

%Подсчет математического ожидания сгенерированных чисел

%Отображение данных на графике

n = 50;

% 50 случайных

чисел

r = rand(n,1);

% Сформировать

и присвоить вектор случайных

значений переменной r

 

plot(r)

% Отобразить на графике сформированный вектор

% Проводим линию

через (0, m) и

(n, m)

m = mean(r);

% Вычислить среднее арифметическое по значениям

вектора r hold on

plot([0,n],[m,m]) hold off

title('Mean of Random Uniform Data') % Название графика

Функции

Еще одна разновидность программ MATLAB — функции. В отличии от скриптов при вызове функция создает новую рабочую область, поэтому внутри функции не будут видны переменны, объявленные вне ее кода. Поэтому для связи функции с внешним кодом используются входные и выходные параметры. Рассмотрим общий синтаксис объявления функции:

function [y1,...,yN] = имя_функции(x1,...,xM) оператор_1 оператор_2

оператор_n end

Функция содержится в отдельном m-файле.

Функция начинается с ключевого слова function, за которым следуют в квадратных скобках через запятую имена выходных переменных. Далее идет знак «=» и имя функции. Имя функции подчиняется тем же правилам, что и имена переменных. Так же отметим, что имя функции обязательно должно совпадать с именем файла, в котором она определена.

16

После имени функции в круглых скобках через запятую идут имена входных параметров. Следующие строки содержат тело функции (любые допустимые выражения

MATLAB).

В конце функция заканчивается ключевым словом end, однако оно не является обязательным, и его можно опустить.

Так же отметим, что если функция возвращает только один параметр, то его не обязательно заключать в квадратные скобки, например:

function s = triaArea( a, b )

%вычисление площади прямоугольного треугольника

%a, b - катеты треугольника

s = a * b / 2; end

Если функция вообще не возвращает параметры, то сразу после ключевого слова function идет имя функции, например:

function hellowWorld()

% пример функции без входных и выходных параметров disp('Hello world!');

end

Для вызова функции применяется следующий синтаксис:

[k1, ..., kN] = имя_функции(z1,...,zM)

где k1, ..., kN — переменны, куда будут записаны выходные значения функции, а z1,...,zM — аргументы функции.

В случае если функция возвращает только один параметр, то квадратные скобки можно опустить, например:

s = triaArea(1,2)

Фактические и формальные параметры функции

Важно различать фактические и формальные параметры функции:

фактический параметр — аргумент, передаваемый в функцию при ее вызове;

формальный параметр — аргумент, указываемый при объявлении или определении

функции.

Поясним данное различие на примере: Файл demoParam.m:

function [ v ] = demoParam( a, b, c )

%Вычисление объема прямоугольного параллелепипеда

%a, b, c - входные параметры (длины граней)

%v - выходной параметр (объем)

%a, b, c, v являются формальными параметрами, то есть объявленные

17

%в определении функции

%с входными параметрами можно работать как с обычными переменными

%выходным параметрам необходимо присвоить какое-либо значение

v = a * b * c; end

Файл testDemoParam.m

a = 1; x = 3;

v = demoParam(a, x, 2);

% a, x, 2 являются фактическими параметрами

Отметим что при вызове функции, фактические параметры подставляться в формальные, поэтому их имена могут быть различными.

Рабочая область функции

Как было отмечено ранее при вызове функции создается новая рабочая область, которая существуют до конца работы функции. Все переменны которые создаются в данной рабочей области называются локальными. Они отличны от переменных других функций и базовой рабочей области, даже если имеют одинаковые имена. Например, создадим следующую функцию:

function [] = demoLocaLVar() % пример локальной переменной x = 2;

end

Ивведем следующие команды в командное окно MATLAB:

>>x = 0

x =

0

>>demoLocalVar()

>>x

x =

0

Как видно из примера, даже не смотря на то что в функции была создана переменная x, и ей было присвоено значение 2, это никак не повлияло на переменную x, созданную в базовой рабочей области.

Так же необходимо отметит, что после того как функция заканчивает свою работу, все локальные переменные будут уничтожены. Выполнение функции завершается по

18

выполнению последнего оператора, либо по команде return.

Скрипты и функции

Как было сказано скрипты в MATLAB используют рабочую область кода из которого они были вызваны, что можно использовать для передачи парамеров скриптам. Например напишем скрипт, вычисляющий гипотенузу прямоугольного треугольника:

%скрипт, вычисляющий гипотенузу прямоугольного треугольника

%a, b - катеты прямоугольного треугольника

%с - вычисляемая гипотенуза

%промежуточные расчеты

x = a^2 + b^2;

% вычисляем гипотенузу c = sqrt(x);

Пример использования данного скрипта:

>>a = 3;

>>b = 4;

>>hypScr

>>c

c =

5

>> x

x =

25

Как видно из примера у данного подхода сразу появляются следующие недостатки:

необходимо заранее создать переменные с заранее заданными именами (a, b);

после вычислений появится совершенно нам не нужная переменная x;

все четыре переменные (a, b, c и x) могут использоваться в коде ранее и в них могут

уже содержаться данные, которые нельзя терять, поэтому неосторожно использование скриптов может привести к большим проблемам.

Всех этих недостатков лишены функции: function c = hypFun( a, b )

%функция, вычисляющая гипотенузу прямоугольного треугольника

%a, b - катеты прямоугольного треугольника

%с - вычисляемая гипотенуза

19

%промежуточные расчеты x = a^2 + b^2;

%вычисляем гипотенузу c = sqrt(x);

end

Пример использования данной функции:

a = 2; % некие важные данные, которые нужно сохранить

>>x = 3; % некие важные данные, которые нужно сохранить, со скриптом это не получится

>>c = hypFun(3,4)

c =

5

>> a a =

2

>> x x =

3

Передача параметров по значению

В MATLAB параметры всегда передаются по значению (однако передача по ссылке существует, но в данном курсе не рассматривается). Передача по значению означает, что вызывающая функция копирует в память, доступную вызываемой, непосредственное значение параметра. Изменение копии переменной, соответственно, оригинал не затрагивает.

Приведем пример. Функция demoTrFun: function [ ] = demoTrFun( x )

%демонстрация передачи по значению

%увеличим переменную x

x = x + 5;

end

Демонстрация использования данной функции:

>> x = 0; % создадим переменную x

20