|
Учебное пособие: Матричная математическая система MATLABВ MATLAB: В математике: 2+3; 2+3 2^3* sqrt(y)/2; 2+3*003********/2 2.301*sin(x) 2,301sin(x) 4+exp(3)/5 4+e3/5 Разница в записи вполне очевидна. В MATLAB выражения записываются в виде одной строки и вместо разделительной запятой в числах применяется разделительная точка. Математические выражения строятся на основе чисел, констант, переменных, операторов, функций и разных спецзнаков. Ниже даются краткие пояснения сути этих понятий. Специфика MATLAB в том, что математические выражения задаются в виде одной строки. Например, 23 записывается как 2^3. Знак ; (точка с запятой) в конце строки ввода блокирует вывод результата вычислений, например: >> 2^3; Однако специальная переменная ans (от answer – ответ) позволяет вывести результат вычислений: >> ans ans = 8 Действительные и комплексные числа Число – простейший объект языка MATLAB, представляющий количественные данные. Числа можно считать константами. Числа используются в общепринятом представлении о них. Они могут быть целыми, дробными, с фиксированной и плавающей точкой. Возможно представление чисел в хорошо известном научном формате с указанием мантиссы и порядка числа. Ниже приводятся примеры представления действительных чисел: 0 -3 2.301 123.456e-24 -234.456e10 Как нетрудно заметить, в мантиссе чисел целая часть отделяется от дробной не запятой, а точкой, как принято в большинстве языков программирования. Для отделения порядка числа от мантиссы используется символ e. Знак «плюс» у чисел не проставляется, а знак «минус» у числа называют унарным минусом. Пробелы между символами в числах не допускаются. Числа могут быть комплексными: z=Re(x)+Im(x)*i. Такие числа содержат действительную Re(z) и мнимую Im(z) части. Мнимая часть имеет множитель i или j, означающий корень квадратный из –1: 3i 2j 2+3i -3.141i -123.456+2.7e-3i Функция real(z) возвращает действительную часть комплексного числа, Re(z), а функция imag(z) – мнимую, Im(z). Для получения модуля комплексного числа используется функция abs(z), а для вычисления фазы – angle(Z). Ниже даны простейшие примеры работы с комплексными числами: >> i ans = 0 + 1.0000i >> j ans = 0 + 1.0000i >> z=2+3i z = 2.0000 + 3.0000i >> abs(z) ans = 3.6056 >> real(z) ans = 2 >> imag(z) ans = 3 >> angle(z) ans = 0.9828 Операции над числами по умолчанию выполняются в формате, который принято считать форматом с двойной точностью (правильнее сказать с двойной разрядностью). Форматы чисел Для установки определенного формата представления чисел используется команда >> format name где name – имя формата. Для иллюстрации различных форматов рассмотрим вектор, содержащий два элемента-числа: x=[4/3 1.2345e-6] В различных форматах их представления будут иметь следующий вид: format short 1.3333 0.0000 format short e 1.3333E+000 1.2345E-006 format long 1.333333333333338 0.000001234500000 format long e 1.333333333333338E+000 1.234500000000000E-006 format bank 1.33 0.00 Задание формата сказывается только на форме вывода чисел. Вычисления все равно происходят в формате двойной точности, а ввод чисел возможен в любом удобном для пользователя виде. Константы и системные переменные Константа – это предварительно определенное числовое или символьное значение, представленное уникальным именем (идентификатором). Числа (например, 1, –2 и 1.23) являются безымянными числовыми константами. Другие виды констант в MATLAB принято называть системными переменными, поскольку, с одной стороны, они задаются системой при ее загрузке, а с другой – могут переопределяться. Основные системные переменные, применяемые в системе MATLAB, указаны ниже: • i или j –мнимая единица (корень квадратный из –1); • pi – число p = 3,1415926…; • eps – погрешность операций над числами с плавающей точкой (2–52); • realmin – наименьшее число с плавающей точкой (2–1022); • realmax – наибольшее число с плавающей точкой (21023) • inf – значение машинной бесконечности; • ans – переменная, хранящая результат последней операции и обычно вызывающая его отображение на экране дисплея; • NaN – указание на нечисловой характер данных (Not-a-Number). Вот примеры применения системных переменных: >> 2*pi ans = 6.2832 >> eps ans = 2.2204e-016 >> realmin ans = 2.2251e-308 >> realmax ans = 1.7977e+308 >> 1/0 Warning: Divide by zero. ans = Inf >> 0/0 Warning: Divide by zero. ans = NaN Как отмечалось, системные переменные могут переопределяться. Можно задать системной переменной eps иное значение, например eps=0.0001. Однако важно то, что их значения по умолчанию задаются сразу после загрузки системы.Поэтому неопределенными, в отличие от обычных переменных, системные переменные не могут быть никогда. Символьная константа – это цепочка символов, заключенных в апострофы, например: 'Hello my friend!' 'Привет' '2+3' Если в апострофы помещено математическое выражение, то оно не вычисляется и рассматривается просто как цепочка символов. Так что '2+3' не будет возвращать число 5. Однако с помощью специальных функций преобразования символьные выражения могут быть преобразованы в вычисляемые. Текстовые комментарии в программах Поскольку MATLAB используется для достаточно сложных вычислений, важное значение имеет наглядность их описания. Она достигается, в частности, с помощью текстовых комментариев. Текстовые комментарии в программах вводятся с помощью символа %, например так: % It is factorial function В новых версиях MATLAB отпала проблема ввода комментариев с символами кириллицы. Так что подобный комментарий также вполне приемлем: % Это функция вычисления факториала Обычно первые строки m-файлов служат для описания их назначения, которое выводится на экран дисплея после команды >> help Имя_файла Считается правилом хорошего тона вводить в m-файлы достаточно подробные текстовые комментарии. Без таких комментариев даже разработчик программных модулей быстро забывает о сути собственных решений. Переменные и присваивание им значений Переменные – это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными. Переменные являются широко распространенными объектами в математике и программировании. На языке программирования MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства: Имя_переменной = Выражение Типы переменных заранее не декларируются. Они определяются выражением, значение которого присваивается переменной. Так, если это выражение – вектор или матрица, то переменная будет векторной или матричной. Переменная, имеющая единственное значение, рассматривается как матрица размера 1×1. Имя переменной (ее идентификатор) может содержать сколько угодно символов, но запоминается и идентифицируется только 31 начальный символ. Имя любой переменной не должно совпадать с именами других переменных, функций и процедур системы, то есть оно должно быть уникальным. Имя должно начинаться с буквы, может содержать буквы, цифры и символ подчеркивания _. Недопустимо включать в имена переменных пробелы и специальные знаки, например +, -, *, / и т. д., поскольку в этом случае правильная интерпретация выражений становится невозможной. Желательно использовать содержательные имена для обозначений переменных, например speed_1 для переменной, обозначающей скорость первого объекта. Переменные могут быть обычными и индексированными, то есть элементами векторов или матриц (см. выше). Могут использоваться и символьные переменные, причем символьные значения заключаются в апострофы, например s='Demo'. Имена переменных рекомендуется задавать только латинскими буквами, цифрами и различными символами (не допускается применение символов операторов). Уничтожение определений переменных В памяти компьютера переменные занимают определенное место, называемое рабочей областью (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). После ввода вектора система выводит его на экран дисплея. Заметим, для вектора столбца нужно разделять элементы знаками «;» (точка с запятой): |
|
|||||||||||||||||||||||||||||
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |