Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


MATLAB в роли суперкалькулятора



Л е к ц и я № 1, 2

 
 

 

 


Введение

MATLAB – одна из старейших, тщательно проработанных и аппробированных временем систем автоматизации математических расчетов, построенная на расширенном представлении и применении матричных операций. Это нашло отражение и в названии системы (Matrix LABoratiryматричная лаборатория). Однако синтаксис языка программирования системы продуман настолько тщательно, что эта ориентация совсем не ощущается пользователями, ко-торых непосредственно матричные вычисления не интересуют.

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

С одной стороны, MATLAB содержит огромное число операторов и функций, которые решают множество практических задач. К примеру, это функции обращения и транспонирова-ния матриц, вычисления значений производной и интеграла и т.д. Число таких функций с уче-том новых пакетов расширения системы уже достигает многих тысяч и непрерывно увеличивается.

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

Система MATLAB имеет входной язык, напомиающий Бейсик (с примесью Фортрана и Паскаля). Запись программы традиционна и потому привычна большинству пользователей компьютеров. К тому же система дает возможность редактировать программы с помощью лю-бого, привычного для пользователя текстового редактора. Имеет она и собственный редактор с отладчиком. Отказ от присущего Matcad «шика» – задания задач в формулярном виде – компен-сируется заметным увеличением скорости вычислений: при прочих равных условиях она почти на порядок выше, чем у системы Matcad.

Язык системы MATLAB в части программирования математических выражений намного богаче любого универсального языка программирования высокого уровня. Он реализует почти все известные средства программирования, в том числе объектно-ориентированное и визуаль-ное программирование.

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

Особенно привлекательной выглядит возможность построения трехмерных графиков. В последних версиях MATLAB введена эффектная возможность быстрого вращения графиков мышью в любом направлении.

 

MATLAB в роли суперкалькулятора

Система MATLAB создана таким образом, что любые вычисления можно выполнять в режиме прямых вычислений, то есть без подготовки программы. Это превращает систему в нео-бычайно мощный калькулятор, который способен производить не только обычные для кальку-ляторов вычислений, но и операции с векторами и матрицами, комплексными числами, рядами и полиномами. Можно почтимгновенно задать и вывести графики различных функций: от прос-той синусоиды до сложной трехмерной фигуры.

Работа с системой в режиме прямых вычислений носит диалоговый характер и происхо-дит по правилу «задал вопрос, получил ответ». Пользователь набирает на клавиатуре вычисляе-мое выражение, редактирует его (если нужно) в командной строке и завершает ввод нажатием клавиши Enter.

Необходимо учитывать, что

· для указания ввода исходных данных используется символ > >;

· данные вводятся с помощью простейшего строчного редактора;

· для блокировки вывода результата вычислений некторого выражения, после него надо установить знак; (точка с запятой);

· если не указана переменная для значения результата вычислений, то MATLAB назна-чает такую переменную с именем ans;

· знаком присваивания является обычный математический знак равенства =, а не комби-нированный знак: =, как во многих других математических системах;

· встроенные функции (например, sin) записываются строчными буквами и их аргумен-ты указываются в круглых скобках;

· результат выводится в строках вывод (без знака > > );

Например:

 

> > 2+3 ans= > > a=5; > > b=8*a; > > c=1+b c= > > v=[1 2 3 4] ans= 1 2 3 4
> > x=sin(1) x= 0.8415 > > sin(v) ans= 0.8415 0.9093 0.1411 -0.7568

 

Специальные символы

К классу операторов в системе MATLAB относятся:

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

 

начальное значение: шаг: конечное значение

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

 

Например,

 

> > 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= 1.5708 3.1416 4.7124 6.2832
> > 5: 2 ans= Empty matrix: 1-by-0

 

· ( ) (круглые скобки) – используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности агрументов функции и указания ин-дексов элемента вектора или матрицы;

· [ ] (квадратные скобки) – используются для формирования векторов и матриц;

· { } (фигурные скобки) – используются для формирования массивов ячеек;

·, (запятая) – используется для разделения индексов элементов матрицы и аргументов функции, а также для разделения операторов языка MATLAB;

·; (точка с запятой) – используется внутри круглых скобок для разделения строк матри-цы, а также в конце операторов для запрета вывода на экран результата вычисленийж

· % (знак процента) – используется для указания логического конца строки. Текст, на-ходящийся после знака процента, воспринимается как комментарий и игнорируется;

· = (знак равенства) – используется для присваивания значений в арифметических опе-рациях;

· ‘ (одиночная кавычка) – текст в кавычках представляется как вектор символов. Кавыч-ка внутри текста задается двумя кавычками.

 

Например,

> > а=’Второй ‘’ курс’

а=

Второй ‘ курс

 

Кроме того, одиночная кавычка используется для транспонирования матриц и массивов;

·... (продолжение) – три или более точек в конце строки указывают на продолжение строки.

 

 

Л е к ц и я № 3, 4

 
 

 

 


Элементарные функции

Элементарные функции являются наиболее извеcтным классом математических функ-ций. Рассмотрим некоторые из существующих в MATLAB арифметические, тригонометричес-кие и другие функции.

 

Функция Назначение
abc(x) Возвращает абсолютную величину для каждого числового элемента вектора x
exp(x) Возвращает экспоненту для каждого элемента х
log(x) Возвращает натуральный логарифм элементов массива х
log2(x) Возвращает натуральный логарифм по основанию 2 элементов массива х
log10(x) Возвращает натуральный логарифм по основанию 10 для каждого элемента массива х
sqrt(x) Квадратный корень каждого элемента массива
cos(x) Косинус для каждого элемента х
sin(x) Синус для каждого элемента х
tan(x) Тангенс для каждого элемента х
cot(x) Котангенс для каждого элемента х
acos(x) Возвращает арккосинус для каждого элемента х
asin(x) Возвращает арксинус для каждого элемента х
atan(x) Возвращает арктангенс для каждого элемента х
acot(x) Возвращает арккотангенс для каждого элемента х
fix(A) Округление элементов массива до ближайшего к нулю целого числа, то есть отбрасы-вание дробной части без округления (4.9900 – 4, 0.6667 – 0 и т.д.)
floor(A) Возвращает А с элементами, представляющими ближайшее меньшее или равное соот-ветствующему элементу А целое число (-0.3333 – -1, 0.6667 – 0, 5.0100 – 5, 4.9900 – 4)
ceil(A) Возвращает А с элементами, представляющими ближайшее большее или равное соот-ветствующему элементу А целое число (-0.3333 – 0, 0.6667 – 1, 5.0100 – 6, 4.9900 – 5)
real(Z) Возвращает вещественные части всех элементов комплексного массива Z (1+2i – -1, 2+3i – 2)
imag(Z) Возвращает мнимые части всех элементов комплексного массива Z (1+2i – 2, 2+3i – 3)

 

Форматы чисел

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

short – короткое представление в фиксированном формате (5 знаков);

short е – короткое представление в экспоненциальном формате (5 знаков мантиссы и 3 знака порядка);

long – длинное представление в фиксированном формате (15 знаков):

long е – длинное представление в экспоненциальном формате (15 знаков мантиссы и 3 знака порядка):

bank – представление для денежных единиц:

rational – представление в виде дроби.

Задание формата сказывается только на форме вывода чисел. Вычисления все равно проис-ходят в формате двойной точности, а ввод чисел возможен в любом удобном для пользователя виде.

Для иллюстрации различных форматов рассмотрим вектор, содержащий два элемента-числа x=[4/3 1.2345е-6].

В различных форматах их представления будут иметь вид:

 

format short 1.3333 0.0000
format short e 1.3333Е+000 1.2345Е-006
format long 1.333333333333338 0.000001234500000
format long e 1.333333333333338Е+000 1.234500000000000Е-006
format bank 1.33 0.00
format rational 4/3 1/810045

 

Открытие нового файла и вызов старог о

Для редактирования и отладки m-файлов (файлы с программами MATLAB запоминиют-ся с расширением m) MATLAB имеет встренный современный редактор, интерфейс которого выполнен в лучших традициях Windows приложений.

Открыть окно редактора m-файлов можно при помощи кнопки New File на панели инст-рументов программы, либо выбрав одноименную команду из системного меню File.

По умолчанию файлу дается имя untitled (безымянный), которое впоследствии (при запи-си файла) можно изменить на другое, отражающее тему задачи. В редакторе можно редактиро-вать несколько m-файлов, и каждый из них будет находится в своем окне редактирования, хотя активным может быть только одно окно, расположенное поверх других.

Для загрузки в редактор ранее созданых файлов служит команда и кнопка Open.

Запустить файл на выполнение можно набрав его имя (без расширения) в командном окне, либо нажав кнопку Run на панели инструментов открытого файла.

Л е к ц и я № 5, 6

 
 

 

 


Л е к ц и я № 7, 8

 
 

 

 


Вычисление произведений

Несколько простых функций служат для перемножения элементов массивов:

· prod(A) возвращает произведение элементов массива, если А – вектор, или вектор-стро-ку, содержащую произведения элементов каждого столбца, если А – матрица;

· prod(A, dim) возращает произведение элементов массива А по столбцам или по стро-кам в зависимости от скаляра dim.

Например,

 

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

A =

1 2 3 4

2 4 5 7

6 8 3 4

 

> > B=prod(A)

B =

12 64 45 112

 

· cumprod(A) возвращает произведение с накоплением. Если А – вектор, cumprod(A) возвращает вектор, содержащий произведение с накоплением элементов вектора А. Если А – матрица, cumprod(A) возвращает матрицу того же размера, что и А, содержа-щую произведения с накоплением для каждого столбца матрицы А;

· cumprod(A, dim) возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от скаляра dim. Например, cumprod(A, 1) дает при-рост первому индексу (номеру строки), таким образом выполняя умножение по столб-цам матрицы А.

Например,

 

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

A =

1 2 3

4 5 6

7 8 9

 

> > B=cumprod(A)

B =

1 2 3

4 10 18

28 80 162

 

> > B=cumprod(A, 1)

B =

1 2 3

4 10 18

28 80 162

 

> > B=cumprod(A, 2)

B =

1 2 6

4 20 120

7 56 504

Cуммирование элементов

Определены следующие функции суммирования элементов массивов:

· sum(A) возвращает сумму элементов массива, если А – вектор, или вектор-строку, со-держащую сумму элементов каждого столбца, если А – матрица;

· sum(A, dim) возращает сумму элементов массива А по столбцам или по строкам в за-висимости от скаляра dim.

Например,

> > A=magic(4)

A =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

> > B=sum(A)

B =

34 34 34 34

· cumsum(A) выполняет суммирование с накоплением. Если А – вектор, cumsum(A) воз-вращает вектор, содержащий результаты суммирования с накоплением элементов век-тора А. Если А – матрица, cumsum(A) возвращает матрицу того же размера, что и А, содержащую суммирование с накоплением для каждого столбца матрицы А;

· cumsum(A, dim) выполняет суммирование с накоплением элементов по размерности, определенной скаляром dim. Например, cumsum(A, 1) выполняет суммирование по столбцам, а cumsum(A, 2) – по строкам.

Например,

> > A=magic(5)

A =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

> > B=cumsum(A)

B =

17 24 1 8 15

40 29 8 22 31

44 35 21 42 53

54 47 40 63 56

65 65 65 65 65

 

> > B=cumsum(A, 1)

B =

17 24 1 8 15

40 29 8 22 31

44 35 21 42 53

54 47 40 63 56

65 65 65 65 65

 

> > B=cumsum(A, 2)

B =

17 41 42 50 65

23 28 35 49 65

4 10 23 43 65

10 22 41 62 65

11 29 54 56 65

Поворот матриц

Следующая функция обеспечивает поворот матрицы (по расположению элементов):

· rot90(A) осуществляет поворот матрицы А на 900 против часовой стрелки;

· rot90(A, k) осуществляет поворот матрицы А на величину 90*k градусов, где k – целое число.

Например, > > M=[3 2 7; 3 3 2; 1 1 1]

M =

3 2 7

3 3 2

1 1 1

> > rot90(M)

ans =

7 2 1

2 3 1

3 3 1

> > rot90(M, 2)

ans =

1 1 1

2 3 3

7 2 3

 

Л е к ц и я № 9, 10

 
 

 

 


Численное интегрирование

Численное интегрирование традиционно является одной из важнейших сфер применения математического аппарата. Заключается оно в приближенном вычислении определенного ин-теграла вида

одним из многочисленных численных методов.

Приведенные ниже функции выполняют численное интегрирование методом трапеций:

· trapz(Y) возвращает интеграл, используя интегрирование методом трапеций. Если Y – вектор, то trapz(Y) возвращает интеграл элементов вектора Y, если Y – матрица, то trapz(Y) возвращает вектор-строку, содержащую интегралы каждого столбца этой матрицы;

· trapz(Х, Y) возвращает интеграл от функции Y по переменной Х, используя метод трапеций.

· trapz(..., dim) возвращает интеграл по строкам или столбцам для входной матрицы, в зависимости от значения переменной dim.

Например,

> > X=0: pi/70: pi/2;

> > Y=cos(X);

> > Z=trapz(Y)

Z=22.2780

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

.

Функции quad и quad8 используют два различных алгоритма квадратуры для вычисления определенного интеграла. Функция quad выполняет интегрирование по методу низкого порядка, используя рекурсивное правило Симпсона, а функция quad8 выполняет интегрирование по методу более высокого порядка, используя квадратурные формулы Ньютона-Котеса.8-го порядка.

· quad(‘fun’, a, b) возвращает численное значение определенного интеграла от заданной функции ‘fun’ на отрезке [a. b];

· quad(‘fun’, a, b, tol) возвращает численное значение оперделенного интегралас заданной относительной погрешностью tol. По умолчанию tol=1.е-3;

· quad(‘fun’, a, b, tol, trace) возвращает численное значение определенного интеграла и при значении trace, не равном нулю, строит график, показывающий ход вычисления интеграла.

Например, необходимо вычислить численное значение следующего интеграла

.

> > quad(‘x.^4’, -1, 3)

ans =

48.8000

 

 

Л е к ц и я № 11, 12

 
 

 

 


Многомерные массивы

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

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

 

Объединение массивов

Для объединения многомерных массивов служит описанная ранее для матриц специаль-ная функция конкатенации cat:

· cat(dim, A, B) возвращает результат объединения двух массивов А и В вдоль размер-ности dim;

· cat(2, A, B) возвращает массив [А, В], объединенный по столбцам;

· cat (1, A, B) возвращает массив [А, В], объединенный по строкам.

Примеры:

> > M1=[1 2; 3 4]

M1 =

1 2

3 4

 

> > M2=[5 6; 7 8]

M2 =

5 6

7 8

 

> > cat(1, M1, M2)

ans =

1 2

3 4

5 6

7 8

 

> > cat(2, M1, M2)

ans =

1 2 5 6

3 4 7 8

 

> > M=cat(3, M1, M2)

M(:,:, 1) =

1 2

3 4

 

M(:,:, 2) =

5 6

7 8

 

 

Л е к ц и я № 13, 14

 
 

 

 


Л е к ц и я № 15, 16

 
 

 

 


Основы программирования

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

Программирование в системе MATLAB является эффективным средством ее расширения и адаптации к решению специальных проблем. Оно реализуется с помощью языка программи-рования системы.

С позиций программиста язы кпрограммирования системы является типичным проблем-но-ориентированным языком программирования высокого уровня. Точнее говоря, это даже язык сверхвысокого уровня, содержащий сложные операторы и функции, реализация которых на обычных языках (например, Бейсике, Паскале или СИ) потребовала бы много усилий и времени.

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

Поскольку язык программирования системы MATLAB ориентирован на структурное программирование, в нем нет номеров строк (присущих до недавнего времени Бейсику) и прог-раммных операторов перехода GO TO. Имеются лишь управляющие структуры следующих ти-пов: условных выражений IF…ELSE…ELSEIF…END, циклы FOR…END и WHILE…END. Их форма похожа на ту, которая используется в языке Паскаль (то есть область действия управляю-щих структур начинается их заголовком, но без слова begin, а заканчивается словом end). С по-зиций структурного программирования этих средств достаточно для решения любых задач.

 

Л е к ц и я № 17, 18

 
 

 

 


Диалоговый ввод

Рассмотрим простой пример диалоговой программы

 

%Вычисление длины окружности

r=0;

while r> =0; r=input(‘Введите радиус окружности r=’);

if r> =0 disp(‘Длина окружности l=’);

disp(2*pi*r)

end

end

 

Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r. Организация простейшего диалога реализована с помощью команды input:

r=input(‘Введите радиус окружности r=’).

 

При выполнении этой команды вначале выводится запрос в виде строки, затем происхо-дит остановка работы программы и ожидается ввод значения радиуса r (в общем случае числа). Ввод, как обычно, подтверждается нажатием клавиши Enter, после чего введенное число прис-ваивается переменной r. Следующие строки

 

if r> =0 disp(‘Длина окружности l=’);

disp(2*pi*r)

end

 

с помощью команды disp при r> =0 выводят надписи «Длина окружности l=» и вычисленное значение длины окружности. Они представляют собой одну из наиболее простых управляющих структур типа if…end. В данном случае она нужна для остановки вычислений, если вводится отрицательное число.

Приведенные строки включены в управляющую структуру while…end. Это необходимо для циклического повторения вычислений с вводом значений r. Пока r> =0, цикл повторяется. Но стоит задатьr< =0, вычисление длины окружности перестает выполняться, а цикл завершается.

Если данная программа записана в виде m-файла, например, tbilisi.m, то работа с ней бу-дет выглядеть следующим образом:

 

> > tbilisi

Введите радиус окружности r=1

Длина окружности l=

6.2832

 

Введите радиус окружности r=2

Длина окружности l=

12.5664

 

Введите радиус окружности r=-1

> >

 

Итак, даже на примере простой программы видна польза применения управляющих струк-тур типа if…end и while…end, а также функций диалогового ввода input(‘String’) и вывода disp.

Функция input может использоваться и для ввода произвольных стрковых выражений. При этом она задается в следующем виде

 

input(‘Комментарий’, ‘s’)

 

При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример:

> > s=input(‘Введите выражение’, ‘s’)

Введите выражение 2*sin(1)

s =

2*sin(1)

> > eval(s)

ans =

1.6829

 

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

Условный оператор

Условный оператор if в общем виде записывается следующим образом:

if Условие

Инструкции_!

elseif Условие

Инструкции_2

else

Инструкции_3

еnd

Эта конструкция допускает несколько частных вариантов.

В простейшей конструкции типа if…end

if Условие Инструкции end

пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются Инструкции, составляющие тело структуры if…end. При этом оператор end указывает на конец перечня инс-трукций. Инструкции в списке разделяются оператором, (запятая) или; (точка с запятой). Если Условие не выполняется (дает логическое значение 0, «ложь»), то Инструкции также не выпол-няются.

Еще одна конструкция

if Условие Инструкции_1 else Инструкции_2 end

выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае.

Условия записываются в виде

Выражение_1 Оператор отношения Выражение_2

причем в качестве Операторов отношения используют следующие операторы: =, <, >, < =, > = или ~=. Все эти операторы представляют собой пары символов без пробелов между ними.

Циклы типа for…end

Циклы типа for…end обычно используются для организации вычислений с заданным числом повторяющихся циклов. Конструкция такого цикла имеет следующий вид:

for var=Выражение, Инструкция, ... Инструкция еnd

Выражение чаще всего записывается в виде s: d: e, где s – начальное значение переменной var, d – приращение этой переменной и е – конечное значение управляющей переменной, при достижении которого цикл завершается. Возможна и запись в виде s: e (в этом случае d=1). Спи-сок выполняемых в цикле инструкций завершаеся оператором end.

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

> > for i=1: 5 i^2, end;

ans =

ans =

ans =

ans =

ans =

> > for x=0:.25: 1 x^2, end;

ans =

ans =

0.0625

ans =

0.2500

ans =

0.5625

ans =

Возможны вложенные циклы, например:

for i=1: 3

for j=1: 3

A(i, j)=i+j;

end

end

В результате выполнения этого цикла (файл tbilisi.m) формируется матрица А

> > tbilisi

> > A

A =

2 3 4

3 4 5

4 5 6

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

> > A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

> > for var=A; var, end

var =

var =

var =

Циклы типа while…end

Цикл while выполняется до тех пор, пока выполняется Условие

while Условие

Инструкции

еnd

Пример применения цикла while ранее уже приводился. Досрочное завершение цикла ре-ализуется с помощью оператора break.

Л е к ц и я № 19, 20

 
 

 

 


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

Столбцовые диаграммы

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

· bar(X, Y) строит столбцовый график элементов массива Y в позициях, определяемых век-ором Х с упорядоченными в порядке возрастания значений элементами. Если Х и Y – двумерные массивы одинакового размера, то столбцы строятся попарно друг на друге;

· bar(Y) строит график значений одномерного массива;

· bar(X, Y, WIDTH) или bar(Y, WIDTH) – команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов (при WIDTH> 1 столбцы перекрываются). По умолча-нию задано WIDTH=0.8.

Помимо команды bar(...) существует аналогичная ей по синтаксису команда barh(...), которая строит столбцовые диаграммы с горизонтальным расположением столбцов.

Построение гистограммы

Классическая гистограмма характеризует число попаданий значений элементов вектора Y в М интервалов с представлением этих этих чисел в виде столбцевой диаграммы. Для получе-ния данных для гистограммы служит функция hist, записываемая в следующем виде:

· N=hist(Y) возвращает вектор чисел попаданий для 10 интервалов, выбираемых авто-матически. Если Y – матрица, то выдается массив данных о числе попаданий для ее столбцов;

· N=hist(Y, М) – аналогична рассмотренной выше, но используется М интервалов (М – скаляр);

· N=hist(Y, Х) возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора Х;

· [N, X]=hist(...) возвращает числа попаданий в интервалы и данные о центрах интервалов.

Команда hist с синтаксисом, аналогичным приведенному выше, строит график гистог-раммы. В следующем примере строится гистограмма для 1000 случайных чисел и выводится вектор с данными о числах их попаданий в интервалы, заданные вектором Х.

> > x=-3: 0.2: 3;

> > y=randn(1000, 1);

> > hist(y, x)

> > h=hist(y, x)

h =

Columns 1 through 20

0 0 3 7 8 9 11 23 33 43 57 55 70 62 83 87 93 68 70 65

Columns 21 through 31

41 35 27 21 12 5 6 3 2 1 0

 

 

Л е к ц и я № 21, 22

 
 

 

 


Лестничные графики

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

Для построения лестничных графиков в сис-теме MATLAB используются команды группы stairs:

· stairs(Y) строит лестничный график по данным вектора Y;

· stairs(Х, Y) строит лестничный график по дан-ным вектора Y с координатами х переходов от ступеньки к ступеньке, заданными значениями элементов вектора Х;

· stairs(..., S) аналогична по действию вышеопи-санным командам, но строит график линиями, стиль которых задается символами S.

Следующий пример иллюстрирует построение лестничного графика

> > % Лестничный график функции x^2

> > x=0: 0.25: 10;

> > stairs(x, x.^2)

 

Контурные графики

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

Для построения контурных графиков используются команды contour:

· contour(Z) строит контурный график по данным матрицы Z с автоматическим заданием диапазо-нов изменения х и у;

· contour(X, Y, Z) строит контурный график по данным матрицы Z с указанием спецификаций для X и Y;

· contour(Z, N) и contour(X, Y, Z, N) дает пост-роения, аналогичные ранее описанным коман-дам, с заданием N линий равного уровня (по умолчаниюN=10).

Пример:

> > % Построение контурного графика объекта peaks

> > z=peaks(27);

> > contour(z, 15)

 

Л е к ц и я № 23, 24

 
 

 

 


Л е к ц и я № 25, 26

 
 

 

 


Установка титульной надписи

После того, как график уже построен, MATLAB позволяет выполнить его форматирова-ние или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется следующая команда:

 

· title(‘string’) – установка на двухмерных и трехмерных графиках титульной надписи, за-данной строковой константой string.

Установка осевых надписей

Для установки надписей возле осей х, у и z используются следующие команды

 

· xlabel(‘string’)

ylabel(‘string’)

zlabel(‘string’)

 

Соответствующая надпись задается символьной константой или переменной ‘string’. Пример установки титульной надписи и надписей по осям графиков приводится ниже

 

> > [x, y]=meshgrid([-3: 0.1: 3]);

> > z=sin(x)./(x.^2+y.^2+0.3);

> > surfl(x, y, z)

> > colormap(gray)

> > shading interp

> > colorbar

> > title('График трехмерной поверхности')

> > xlabel('Ось х')

> > ylabel('Ось y')

> > zlabel('Ось z')

 

Используемые надписи делают рисунок более наглядным.

Вывод пояснений

Пояснение в виде отрезков диний со справочными надписями, размещаемое внутри гра-фика или около него, называется легендой. Для создания легенды используются различные ва-рианты команды legend:

· legend(string1, string2, string3, ...) добавляет к текущему графику легенду в виде строк, указанных в списке параметров;

· legend off устраняет выведенную ранее легенду;

· legend(..., pos) помещает легенду в точно определенное место, специфицированное параметром pos:

 

Ø pos=0 – лучшее место, выбираемое автоматически;

Ø pos=1 – верхний правый угол;

Ø pos=2 – верхний левый угол;

Ø pos=3 – нижний левый угол;

Ø pos=4 – нижний правый угол;

Ø pos=-1 – справа от графика (вне поля графика).

 

На редактирование легенда выводится двойным щелчком. Пример, приведенный ни-же, строит график трех функций с легендой, размещенной в поле графика.

 

> > x=-2*pi: 0.1*pi: 2*pi;

> > y1=sin(x);

> > y2=sin(x).^2;

> > y3=sin(x).^3;

> > plot(x, y1, '-m', x, y2, '-. +r', x, y3, '--ok')

> > legend('function1', 'function2', 'function3')

 

Л е к ц и я № 1, 2

 
 

 

 


Введение


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 484; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.29 с.)
Главная | Случайная страница | Обратная связь