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

Меню

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

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

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

>> М(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 – Integer Arithmetic Examples

Здесь весьма длинный список примеров обрезан.

Пример – вывод изображения поверхности

Исполнив команду

>> 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), при которой каждому графическому объекту в соответствие ставится особое описание – дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса – управляющих кнопок, текстовых панелей и т. д.


Графики функций одной переменной

Графики в MATLAB строятся в отдельных масштабируемых и перемещаемых окнах. Возьмем вначале простейший пример – построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, то есть осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента x от 0 до 10 с шагом 0,1. Для построения графика достаточно вначале задать вектор x=0:0.1:15, а затем использовать команду построения графиков plot(sin(x)).

Итак, для построения графика синусоиды надо исполнить следующие команды:

x=0:0.1:15; y=sin(x); plot(x,y)

При этом будут построены окно графика и сам график синусоидальной функции. В этих примерах вектор x задает интервал изменения независимой переменной от 0 до 15 с шагом 0,1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что plot из окна командного режима работы MATLAB строит не истинный график функции sin(x), а лишь заданное числом элементов вектора x число точек. Эти точки затем просто соединяются отрезками прямых того или иного стиля и цвета, то есть осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10–20 точках она будет выглядеть состоящей из отрезков прямых.


Графики ряда функций

Построим графики сразу трех функций: sin(x), cos(x) и sin(x)/x. Прежде всего отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде y(x):

>> y1=sin(x); y2=cos(x); y3=sin(x)/x;

Такая возможность обусловлена тем, что эти переменные являются векторами – как и переменная x. Теперь можно использовать одну из ряда форм команды

plot:

plot(a1,f1,a2,f2,a3,f3,...),

где a1, a2, a3, … – векторы аргументов функций (в нашем случае все они – x), а f1, f2, f3, … – векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее:

>> plot(x,y1,x,y2,x,y3)

Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Не исключен даже сбой в работе системы. Причина этого казуса – если x представляет собой массив (вектор), то нельзя использовать оператор матричного деления /.

Этот пример еще раз наглядно указывает на то, что чисто поверхностное применение даже такой мощной системы, как MATLAB, иногда приводит к досадным срывам. Чтобы все же получить график, надо вычислять отношение sin(x) к x с помощью оператора поэлементного деления массивов ./. Этот случай поясняет рисунок. Кстати, на нем показана открытой позиция Tools (Инструменты) меню графического окна, которая открывает доступ к многочисленным командам форматирования графиков.

Обратим внимание на то, что хотя на этот раз MATLAB построил графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 – в момент, когда x=0 – «Warning: Divide by zero.». Таким образом, plot «не знает» о том, что неопределенность sin(x)/x=0/0 устранимая и дает 1. Это недостаток практически всех систем для численных вычислений.


Построение графиков трех функций

Графическая функция fplot

Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot:

fplot('f(x)', [xmin xmax])

Она позволяет строить график функции f(x), заданной в символьном виде, в интервале изменения аргумента x от xmin до xmax без фиксированного шага изменения x. Один из вариантов ее применения демонстрирует рисунке. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при x=0 sin(x)/x=1. Обратите также внимание на две используемые команды: clear (Очистить) – очистка графического окна и grid on (Сетка) – включение отображения сетки, которая строится пунктирными линиями.

На рисунке представлено также меню Insert (Вставка) окна графики. С его помощью можно задать вставки в графическое окно различных объектов, например легенд – обозначений кривых графиков, шкалы цветов и т. д. На рисунке представлены примеры вставки легенды и шкалы цветов Colorbar.

Обратим внимание и на позицию File (Файл) меню окна графики. Она содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.


Знакомство с трехмерной графикой MATLAB

Построение трехмерных графиков

Столь же просто обеспечивается построение графиков сложных поверхностей, представленных функцией двух переменных z=f(x,y). Такую графику называют трехмерной, или 3D-графикой. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и ее проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующий фрагмент программы:

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


Новости

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

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

Пока нет

Новости в Twitter и Facebook

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

Новости

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

© 2010.