Реферат: Матричная математическая система MATLAB
--PAGE_BREAK--Форма вывода и перенос строки в сессииСледует отметить особенности вывода в системе MATLAB. Вывод начинается с новой строки, причем числовые данные выводятся с отступом, а текстовые – без него. Для экономии места в данной книге в дальнейшем вывод будет даваться без перевода на новую строку. Например, вывод вектора-строки
ans =
3 4 5 6
будет дан в виде:
ans = 3 4 5 6
Исключением является вывод векторов столбцов и матриц – тут будет сохранена более наглядная и присущая MATLAB по умолчанию форма вывода.
В некоторых случаях вводимое математическое выражение может оказаться настолько длинным, что для него не хватит одной строки. Тогда часть выражения можно перенести на новую строку с помощью знака многоточия «...» (3 или более точек), например:
s = 1 – 1/2 + 1/3 – 1/4 + 1/5 – 1/6 + 1/7 ...
1/8 + 1/9 – 1/10 + 1/11 – 1/12;
Максимальное число символов в одной строке командного режима – 4096, а в m-файле – не ограничено, но со столь длинными строками работать неудобно. В ранних версиях в одной строке было не более 256 символов.
Запуск примеров применения MATLAB из командной строки
MATLAB имеет множество примеров применения, часть из которых можно запускать прямо из командной строки. Например, команда
>> bench
запускает m-файл bench.m демонстрационного примера тестирования системы.
Основные объекты MATLAB
Понятие о математическом выражении
Центральным понятием всех математических систем является математическое выражение. Оно задает то, что должно быть вычислено в численном (реже символьном) виде. Вот примеры простых математических выражений, записанных в 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, представляющий количественные данные. Числа можно считать константами. Числа используются в общепринятом представлении о них. Они могут быть целыми, дробными, с фиксированной и плавающей точкой. Возможно представление чисел в хорошо известном научном формате с указанием мантиссы и порядка числа. Ниже приводятся примеры представления действительных чисел:
-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
formatbank 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– Kroneckertensorproduct
Функции – это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата – отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию 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
Таким образом, оператор: является весьма удобным средством задания регулярной последовательности чисел. Он широко используется при работе со средствами построения графиков. В дальнейшем мы расширим представление о возможностях этого оператора.
продолжение
--PAGE_BREAK--Функции пользователя
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 и листингом:
functiony=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). Например, если задать
>> М(2, 2)
ans = 5
то результат будет равен 5. Если нужно присвоить элементу M(i, j) новое значение x, следует использовать выражение
M(ij)=x
Например, если элементу M(2, 2) надо присвоить значение 10, следует записать
>> M(2, 2)=10
Вообще говоря, в тексте программ MATLAB лучше не использовать i и j как индексы, так как i и j – обозначение квадратного корня из –1. Но можно использовать I и J.
Выражение M(i) с одним индексом дает доступ к элементам матрицы, развернутым в один столбец. Такая матрица образуется из исходной, если подряд выписать ее столбцы. Следующий пример поясняет подобный доступ к элементам матрицы M:
>> M=[1 2 3; 4 5 6; 7 8 9]
M =
1 2 3
4 5 6
7 8 9
>> M(2)
ans = 4
>> M(8)
ans = 6
>> M(9)
ans = 9
>> M(5)=100;
>> M
M =
1 2 3
4 100 6
7 8 9
Здесь уместно отметить, что размер векторов и матриц в данной книге учебного характера ограничен. Однако система MATLAB способна работать с очень большими векторами и матрицами. Например, последняя версия MATLAB может работать с матрицами размера nЧn, где максимальное значение n = 248 – 1, тогда как предшествующие версии имели максимальное значение n = 231. При этом размеры файла, который может хранить матрицу, могут достигать 18 Гб.
Задание векторов и матриц с комплексными элементами
Из курса математики известно о существовании комплексных чисел вида a + b * i, где a – действительная часть числа, b – мнимая часть и i – мнимая единица (корень квадратный из –1). Возможно задание векторов и матриц с комплексными элементами, например:
>> i=sqrt(-1);
>> CM = [1 2; 3 4] + i*[5 6; 7 8]
или
>> CM = [1+5*i 2+6*i; 3+7*i 4+8*i]
Это создает матрицу:
CM =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
Возможно разделение элементов не только пробелами, но и запятыми.
Понятие о матричных операциях и магические матрицы
Наряду с операциями над отдельными элементами матриц и векторов система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, то есть над массивами. Для этого перед знаком операции ставится точка. Например, оператор * означает умножение для векторов или матриц, а оператор .* – поэлементное умножение всех элементов массива. Так, если M – матрица, то M.*2 даст матрицу, все элементы которой умножены на скаляр – число 2. Впрочем, для умножения матрицы на скаляр оба выражения – M*2 и M.*2 – оказываются эквивалентными.
Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic(n) задает магическую матрицу размера nЧn, у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу:
>> M=magic(4)
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> sum(M)
ans = 34 34 34 34
>> sum(M’)
ans = 34 34 34 34
>> sum(diag(M))
ans = 34
>> M(1,2)+M(2,2)+M(3,2)+M(4,2)
ans = 34
Уже сама по себе возможность создания такой матрицы с помощью простой функции magic заинтересует любителей математики. Но векторных и матричных функций в системе множество, и мы их детально рассмотрим в дальнейшем. Для стирания переменных из рабочей области памяти служит команда clear.
Конкатенация (объединение) матриц
Описанный способ задания матриц позволяет выполнить операцию конкатенации – объединения малых матриц в большую матрицу. Например, создадим вначале магическую матрицу размера 3Ч3:
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
Теперь можно построить матрицу, содержащую четыре матрицы:
>> B=[A A+16;A+32 A+16]
B =
8 1 6 24 17 22
3 5 7 19 21 23
4 9 2 20 25 18
40 33 38 24 17 22
35 37 39 19 21 23
36 41 34 20 25 18
Полученная матрица имеет уже размер 6Ч6. Вычислим сумму ее столбцов:
>> sum(B)
ans = 126 126 126 126 126 126
Любопытно, что она одинакова для всех столбцов. А для вычисления суммы строк используем команду
>> sum(B.')
ans = 78 78 78 174 174 174
Здесь запись B.' означает транспонирование матрицы B, то есть замену строк столбцами. На этот раз сумма оказалась разной. Это отвергает изначально возникшее предположение, что матрица B тоже является магической. Для истинно магической матрицы суммы столбцов и строк должны быть одинаковыми:
>> D=magic(6)
D =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>> sum(D)
ans = 111 111 111 111 111 111
>> sum(D.')
ans = 111 111 111 111 111 111
Более того, для магической матрицы одинаковой является и сумма элементов по основным диагоналям (главной диагонали и главной антидиагонали).
Удаление столбцов и строк матриц
Для формирования матриц и выполнения ряда матричных операций возникает необходимость удаления отдельных столбцов и строк матрицы. Для этого используются пустые квадратные скобки – [ ]. Проделаем это с матрицей M:
>> M=[1 2 3; 4 5 6; 7 8 9]
M =
1 2 3
4 5 6
7 8 9
Удалим второй столбец, используя оператор: (двоеточие):
>> M(:,2)=[ ]
M =
1 3
4 6
7 9
А теперь, используя оператор: (двоеточие), удалим вторую строку:
>> M(2,:)=[ ]
M =
1 3
7 9
Работа с демонстрационными примерами с командной строки
Вызов списка демонстрационных примеров
Одним из самых эффективных методов знакомства со сложными математическими системами является ознакомление со встроенными примерами их применения. Система MATLAB содержит многие сотни таких примеров – по примеру практически на каждый оператор или функцию. Наиболее поучительные примеры можно найти в разделе demos справки или выполнив команду:
>> help demos
Examples and demonstrations.
Type 'demo' at the command line to browse more demos of
MATLAB, the Toolboxes, and Simulink.
demo – Run demonstrations.
Mathematics.
intro – Basic Matrix Operations
inverter – Inverses of Matrices
buckydem – Graphs and Matrices
sparsity – Sparse Matrices
matmanip – Matrix Manipulation
integerMath– IntegerArithmeticExamples
Здесь весьма длинный список примеров обрезан.
Пример – вывод изображения поверхности
Исполнив команду
>> wernerboy
можно наблюдать изображение сложной поверхности Вернера–Боя, показанной на рисунке в окне графики.
Это построение прекрасно иллюстрирует технику функциональной окраски сложных поверхностей и фигур, именуемую рендерингом. Данная техника обеспечивает высокую степень реалистичности поверхностей с учетом условий освещения и свойств отражения света от материалов с определенными свойствами.
Что больше – e^pi или pi^e?
Рассмотрим еще один простой пример, дающий ответ на сакраментальный вопрос о том, какое значение больше – e^pi или pi^e? Для запуска этого примера надо исполнить команду
>> e2pi
и наблюдать красочное шоу – графики степенных функций x^y и y^x с построением на них линий заданных функций и оценкой их значений – рисунке. Этот пример – наглядная демонстрация перехода от узких понятий к более широким.
Так можно легко убедиться в том, что все же e^pi больше, чем pi^e. Можно проверить это и помощью логического оператора сравнения > (результат 1 означает, что неравенство выполняется и дает логическое значение TRUE):
>> e^pi>pi^e
ans = 1
Встроенные фигуры
MATLAB имеет ряд встроенных фигур, которые можно легко выводить на построение простым указанием их названия. Так, введя команду knot, можно задать построение еще одной сложной пространственной фигуры узла с функциональной окраской. Можно убедиться в том, что имеется возможность вращать полученную фигуру. В данном примере показан также вывод шкалы цветовых оттенков – справа от фигуры.
Просмотр текстов примеров и m-файлов
Как программная среда MATLAB открыта для пользователя. Любой m-файл системы, например файл демонстрационных примеров, можно просмотреть с помощью любого текстового редактора, редактора и отладчика m-файлов, встроенного в систему, или с помощью команды
type Имя_M-файла
Например, если вы хотите просмотреть текст файла демонстрационного примера e2pi, то нужно выполнить команду:
>> type e2pi
Используя команду help, можно получить справку по любой конкретной функции или команде.
Особенности двумерной графики MATLAB
Для визуализации вычислений в MATLAB широко используется машинная графика. Графика в MATLAB имеется двух типов:
• обычная двумерная и трехмерная растровая графика;
• специальная дескрипторная (handle) графика.
Остановимся на обычной графике. С ней связано представление о графических объектах, имеющих определенные свойства. В большинстве случаев об объектах можно забыть, если только не занимаеться объектно-ориентированным программированием задач графики. Связано это с тем, что большинство команд высокоуровневой графики, ориентированной на конечного пользователя, автоматически устанавливают свойства графических объектов и обеспечивают воспроизведение графики в нужной системе координат, палитре цветов, масштабе и т. д. Применение графики MATLAB практически исключает необходимость в сложных математических вычислениях, обычно необходимых для построения графиков.
Средства графики в новых версиях MATLAB существенно дополнены. Новая позиция Graphics меню содержит три команды:
• New Figure – открывает пустое окно графики;
• Plot Tools – открывает окно нового мощного редактора графики;
• More Plots… – открывает окно доступа к различным видам графики.
Первая команда очевидна, а две другие будут детально описаны ниже.
На более низком уровне решения задач используется ориентированная на опытного программиста дескрипторная графика (Handle Graphics), при которой каждому графическому объекту в соответствие ставится особое описание – дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса – управляющих кнопок, текстовых панелей и т. д.
продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике
Реферат по информатике
Программирование контроллера приоритетных прерываний
18 Июня 2015
Реферат по информатике
Микропроцессорный комплект серии К580
18 Июня 2015
Реферат по информатике
Синтез операционных автоматов
18 Июня 2015
Реферат по информатике
Особенности работы в программном пакете MicroCAP-7
3 Сентября 2013