Реферат: Матричная математическая система 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--
еще рефераты
Еще работы по информатике