скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыУчебное пособие: Матричная математическая система MATLAB

В памяти компьютера переменные занимают определенное место, называемое рабочей областью (workspace). Для очистки рабочей области используется функция clear в разных формах, например:

• clear – уничтожение определений всех переменных;

• clear x – уничтожение определения переменной x;

• clear a, b, c – уничтожение определений нескольких переменных.

Уничтоженная (стертая в рабочей области) переменная становится неопределенной. Использовать неопределенные переменные нельзя, и такие попытки будут сопровождаться выдачей сообщений об ошибке. Приведем примеры задания и уничтожения переменных:

>> x=2*pi

x = 6.2832

>> V=[1 2 3 4 5]

V =             1       2       3       4       5

>> MAT??? Undefined function or variable 'MAT'.

>> MAT=[1 2 3 4; 5 6 7 8]

MAT =

1       2       3       4

5       6       7       8

>> clear V

>> V

??? Undefined function or variable 'V'.

>> clear

>> x

??? Undefined function or variable 'x'.

>> M

??? Undefined function or variable 'M'.

Обратите внимание на то, что сначала выборочно стерта переменная V, а затем командой clear без параметров стерты все остальные переменные.

Неопределенные переменные используются при выполнении символьных вычислений. Специально система MATLAB для выполнения таких вычислений не предназначена. Однако они возможны с помощью пакета расширения символьной математики Symbolic Math.

Операторы и встроенные функции MATLAB

Оператор – это специальное обозначение для определенной операции над данными – операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 – операндами. Операторы также являются распространенными объектами математических выражений и языков программирования.

Следует отметить, что большинство операторов относятся к матричным операциям, что может служить причиной серьезных недоразумений. Например, операторы умножения * и деления / вычисляют произведение и частное от деления двух массивов, векторов или матриц. Есть ряд специальных операторов, например оператор \ означает деление справа налево, а операторы .* и ./ означают, соответственно, поэлементное умножение и поэлементное деление массивов.

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

>> V1=[2 4 6 8]

V1 =           2       4       6       8

>> V2=[1 2 3 4]

V2 =           1       2       3       4

>> V1/V2

ans = 2

>> V1.*V2

ans = 2       8       18     32

>> V1./V2

ans = 2       2       2       2

Полный список операторов можно получить, используя команду help ops.

Приведем начало обширного полного списка операторов, содержащего арифметические операторы:

>> help ops

Operators and special characters.

Arithmetic operators.

Plus – Plus                                                                   +

Uplus – Unary plus                                            +

Minus – Minus                                                   –

Uminus – Unary minus                                                –

Mtimes – Matrix multiply                                  *

times – Array multiply                                       .*

mpower – Matrix power                                              ^

power – Array power                                         .^

mldivide – Backslash or left matrix divide                   \

mrdivide – Slash or right matrix divide              /

ldivide – Left array divide                                  .\

rdivide – Right array divide                                ./

kron – Kronecker tensor product

Функции – это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата – отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию sin в 2*sin(pi/2).

Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как bessel(NU,X). В данном случае список параметров содержит два аргумента – NU в виде скаляра и X в виде вектора. Многие функции допускают ряд форм записи, отличающихся списком параметров. Если функция возвращает несколько значений, то она записывается в виде

[Y1, Y2,...]=func(X1, X2,...), где Y1, Y2,... – список выходных параметров и X1, X2,... – список входных аргументов (параметров).

Со списком элементарных функций можно ознакомиться, выполнив команду help elfun, а со списком специальных функций – с помощью команды help specfun. Функции могут быть встроенными (внутренними) и внешними, или m-функциями. Так, встроенными являются наиболее распространенные элементарные функции, например sin(x) и exp(y), тогда как функция sinh(x) является внешней функцией. Внешние функции содержат свои определения в m-файлах. Задание таких функций возможно с помощью специального редактора m-файлов, который мы рассмотрим чуть позже. Встроенные функции хранятся в откомпилированном ядре системы MATLAB, в силу чего они выполняются предельно быстро.

Применение оператора : (двоеточие)

Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны, например, для создания векторов со значениями абсциссы при построении графиков или при создании таблиц. Для этого в MATLAB используется оператор : (двоеточие) в виде:

Начальное_значение:Шаг:Конечное_значение

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

Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, – выдается сообщение об ошибке. Примеры применения оператора : даны ниже:

>> 1:5

ans =                    1       2       3       4       5

>> i=0:2:10

i =               0       2       4       6       8       10

>> j=10:-2:2

j =               10     8       6       4       2

>> V=0:pi/2:2*pi;

>> V

V =             0       1.570 3.141 4.712 6.2832

>> X=1:-.2:0

X =             1.000 0.800 0.600 0.400 0.200 0

>> 5:2

ans =

Empty matrix: 1-by-0

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

>> x=0:5

x =              0       1       2       3       4       5

>> cos(x)

ans =                    1.000 0.54 -0.416 -0.99 -0.653 0.2837

>> sin(x)/x

ans = -0.0862

Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции sin(x)/x дает неожиданный, на первый взгляд, эффект – вместо массива с шестью элементами вычислено единственное значение!

Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(x)/x, надо использовать специальный оператор поэлементного деления массивов – ./. Тогда будет получен массив чисел:


>> sin(x)./x

Warning: Divide by zero.

ans = NaN           0.841 0.454 0.047 -0.1892 -0.1918

Впрочем, и тут без особенностей не обошлось. Так, при x = 0 значение sin(x)/x дает устранимую неопределенность вида 0/0 – 1. Однако, как и всякая численная система, MATLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 – это все же не обычное число.

Выражения с оператором : могут использоваться в качестве аргументов функций для получения множественных их значений. Например, в приводимом ниже примере вычислены функции Бесселя порядка от 0 до 5 со значением аргумента 0,5:

>> bessel(0:1:5,1/2)

ans =                             0.938 0.242 0.030 0.002 0.0002 0.0000

А в следующем примере вычислено шесть значений функции Бесселя нулевого порядка для значений аргумента от 0 до 5 с шагом 1:

>> bessel(0,0:1:5)

ans =                             1.0000 0.7652 0.2239 -0.2601 -0.3971 -0.1776

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


Функции пользователя

matlab график матрица функция

Хотя ядро новых версий системы MATLAB содержит уже более 1000 встроенных функций (не считая функций, определенных в десятках пакетов расширения), всегда может понадобиться какая-то нужная пользователю функция. Язык программирования системы MATLAB предоставляет ряд возможностей для задания функций пользователя. Одна из таких возможностей заключается в применении функции inline, аргументом которой надо в апострофах задать выражение, задающее функцию одной или нескольких переменных. В приведенном ниже примере задана функция двух переменных – суммы квадратов sin(x) и cos(y):

>> sc2=inline('sin(x).^2+cos(y)^.2')

sc2 =

Inline function:

sc2(x,y) = sin(x).^2+cos(y).^2

Можно также задавать свои функции в виде m-файлов. Например, можно в окне редактора m-файлов (открывается командой New в меню File) создать m-файл с именем sc2 и листингом:

function y=sc2(x,y)

y=sin(x).^2+cos(y).^2

Записав его на диск, можно командой type sc2 вывести листинг созданной функции:

>> type sc2

function y=sc2(x,y)

y=sin(x).^2+cos(y).^2


Обращение к функции, созданной описанными методами, задается как

sc2(x,y), где на место x и y подставляются значения переменных – аргументов функции пользователя. Например:

>> sc2(1,2)

ans = 0.8813

>> sc2(2,1)

y = 1.1187

ans = 1.1187

Можно также создать так называемую handle-функцию (именуемую также анонимной функцией) с помощью оператора @:

>> fh=@sc2;

К такой функции можно обращаться с помощью функции исполнения функций feval(fh,x,y):

>> feval(fh,1,2)

y = 0.8813

ans = 0.8813

>> feval(fh,2,1)

y = 1.1187

ans = 1.1187

Сообщения об ошибках и исправление ошибок

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

>> sqr(2)

и нажмем клавишу ENTER. Система сообщит об ошибке:

??? Undefined function or variable 'sqr'.

Это сообщение говорит о том, что не определена переменная или функция, и указывает, какая именно, – sqr. В данном случае, разумеется, можно просто набрать правильное выражение. Однако в случае громоздкого выражения лучше воспользоваться редактором. Для этого достаточно нажать клавишу ↓ для перелистывания предыдущих строк. В результате в строке ввода появится выражение

>> sqr(2)

с курсором в его конце. В MATLAB можно теперь нажать клавишу Tab. Система введет подсказку, анализируя уже введенные символы. Из предложенных системой трех операторов выбираем sqrt. Теперь c помощью клавиши ↓ вновь выбираем нужную строку и, пользуясь клавишей ←, устанавливаем курсор после буквы r. Теперь нажмем клавишу T, а затем клавишу ENTER. Выражение примет следующий вид:

>> sqrt(2)

ans = 1.4142

Если бы был только один вариант окончания введенных символов, то после нажатия клавиши Tab система бы закончила наш ввод без перевода строки.

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

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

Впрочем, если вы забудете об этом или введете имя несуществующего определения, то система отреагирует на это звуковым сигналом (звонком) и выводом сообщения об ошибке:

>> hsin(1)

??? Undefined function or variable 'hsin'.

>> sinh(1)

ans = 1.1752

В этом примере мы забыли (нарочно), какое имя имеет внешняя функция, вычисляющая гиперболический синус. Система подсказала, что функция или переменная с именем hsin не определена – ни как внутренняя, ни как m-функция.

Зато далее мы видим, что функция с именем sinh есть в составе функций системы MATLAB – она задана в виде M_функции, хранящейся на жестком диске. Между тем в последнем примере мы не давали системе никаких указаний на то, что следует искать именно внешнюю функцию! И это вычисление прошло так же просто, как вычисление встроенной функции, такой как sin.

Иногда в ходе вывода результатов вычислений появляется сокращение NaN (от слов Not a Number – не число). Оно обозначает неопределенность, например вида 0/0 или Inf/Inf, где Inf – системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного числа появляется предупреждение «Warning: Devide by Zero.» («Внимание: деление на нуль»). Диапазон чисел, представимых в системе, лежит от 10–308 до 10+308.

Вообще говоря, в MATLAB надо отличать предупреждение об ошибке от сообщения о ней. Предупреждения (обычно после слова Warning) не останавливают вычисления и лишь предупреждают пользователя о том, что диагностируемая ошибка способна повлиять на ход вычислений. Сообщение об ошибке (после знаков ???) останавливает вычисления. Система контроля за ошибочными ситуациями в MATLAB 2009 была существенно переработана и стала более корректной.


Формирование векторов и матриц

Задания векторов и матриц и доступ к их элементам

MATLAB – система, специально предназначенная для проведения сложных вычислений с векторами, матрицами и массивами. При этом она по умолчанию предполагает, что каждая заданная переменная – это вектор, матрица или массив. Все определяется конкретным значением переменной. Например, если задано X=1, то это значит, что X – это вектор с единственным элементом, имеющим значение 1, а точнее даже матрица с размером 1×1. Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами или запятыми. Так, например, присваивание

>> V=[1 2 3]

V =    1 2 3

задает вектор V, имеющий три элемента со значениями 1, 2 и 3 (его можно считать и матрицей размера 3×1). После ввода вектора система выводит его на экран дисплея. Заметим, для вектора столбца нужно разделять элементы знаками «;» (точка с запятой):

>> V=[1; 2; 3]

V =

1

2

3

Задание матрицы требует указания нескольких строк и нескольких столбцов.

Для разграничения строк используется знак ; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще любой операции) на экран дисплея. Так, ввод

>> M=[1 2 3; 4 5 6; 7 8 9];

задает квадратную матрицу, которую можно вывести:

>> M

M =

1       2       3

4       5       6

7       8       9

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

>> V= [2+2/(3+4),exp(5),sqrt(10)];

>> V

V = 2.2857          148.4132    3.1623

Для указания отдельного элемента вектора или матрицы используются выражения вида V(i) или M(i, j). Например, если задать

Страницы: 1, 2, 3, 4, 5


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.