Курс лекций по "Программированию и компьютерам"

Автор работы: Пользователь скрыл имя, 10 Октября 2012 в 18:07, курс лекций

Краткое описание

Работа содержит курс лекций по дисциплине "ФПрограммирование ии компьютеры" на тему: "Основы программирования в MatLab.doc"

Содержание

Введение
Глава 1. Структура программы. Основные математические операции и типы данных
1.1. Структура программы пакета MatLab
1.2. Простые переменные и основные типы данных в MatLab
1.3. Арифметические операции с простыми переменными
1.4. Основные математические функции MatLab
1.5. Векторы и матрицы в MatLab
1.6. Операции над матрицами и векторами
1.7. Структуры в MatLab
1.8. Ячейки в MatLab
Глава 2. Условные операторы и циклы в MatLab
2.1. Условный оператор if
2.2. Условный оператор switch
2.3. Оператор цикла while
2.4. Оператор цикла for
Глава 3. Работа с графиками в MatLab
3.1. Функция plot
3.2. Оформление графиков
3.3. Отображение трехмерных графиков
3.4. Отображение растровых изображений
Глава 4. Программирование функций в MatLab
4.1. Порядок определения и вызова функций
4.2. Область видимости переменных
Глава 5. Работа с файлами в MatLab
5.1. Функции save и load
5.2. Функции fwrite и fread
5.3. Функции fscanf и fprintf
5.4. Функции imread и imwrite

Вложенные файлы: 1 файл

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

— 562.50 Кб (Скачать файл)

plot(<x>, <y>, <’цвет линии, тип линии, маркер точек’>);

Обратите внимание, что  третий параметр записывается в апострофах и имеет обозначения, приведенные  в таблицах 3.1-3.3. Маркеры, указанные  ниже записываются подряд друг за другом, например,

‘ko’ – на графике отображает черными кружками точки графика,  
‘ko-‘ – рисует график черной линией и проставляет точки в виде кружков.

Табл. 3.1. Обозначение  цвета линии графика 

Маркер 

Цвет линии 

c

голубой

m

фиолетовый 

y

желтый 

r

красный

g

зеленый

b

синий

w

белый

k

черный 


Табл. 3.2. Обозначение  типа линии графика 

Маркер 

Цвет линии 

-

непрерывная

--

штриховая

:

пунктирная 

-.

штрих-пунктирная


Табл. 3.3. Обозначение  типа точек графика 

Маркер 

Цвет линии 

.

точка

+

плюс 

*

звездочка

o

кружок 

x

крестик


Ниже показаны примеры  записи функции plot() с разным набором  маркеров.

x = 0:0.1:2*pi;  
y = sin(x);  
   
subplot(2,2,1); plot(x,y,'r-');  
subplot(2,2,2); plot(x,y,'r-',x,y,'ko');  
subplot(2,2,3); plot(y,'b--');  
subplot(2,2,4); plot(y,'b--+');

Результат работы фрагмента  программы приведен на рис. 3.7. Представленный пример показывает, каким образом  можно комбинировать маркеры  для достижения требуемого результата. А на рис. 3.7 наглядно видно к каким  визуальным эффектам приводят разные маркеры, используемые в программе. Следует особо отметить, что в четвертой строчке программы по сути отображаются два графика: первый рисуется красным цветом и непрерывной линией, а второй черными кружками заданных точек графика. Остальные варианты записи маркеров очевидны.

Рис. 3.7. Примеры отображения  графиков с разными типами маркеров

Из примеров рис. 3.7 видно, что масштаб графиков по оси Ox несколько больше реальных значений. Дело в том, что система MatLab автоматически масштабирует систему координат для полного представления данных. Однако такая автоматическая настройка не всегда может удовлетворять интересам пользователя. Иногда требуется выделить отдельный фрагмент графика и только его показать целиком. Для этого используется функция axis() языка MatLab, которая имеет следующий синтаксис:

axis( [ xmin, xmax, ymin, ymax ] ),

где название указанных параметров говорят сами за себя.

Воспользуемся данной функцией для отображения графика функции  синуса в пределах от 0 до :

x = 0:0.1:2*pi;  
y = sin(x);  
   
subplot(1,2,1);  
plot(x,y);  
axis([0 2*pi -1 1]);  
   
subplot(1,2,2);  
plot(x,y);  
axis([0 pi 0 1]);

Из  результата работы программы (рис. 3.8) видно, что несмотря на то, что функция синуса задана в диапазоне от 0 до , с помощью функции axis() можно отобразить как весь график, так и его фрагмент в пределах от 0 до .

Рис. 3.8. Пример работы функции axis()

В заключении данного  параграфа рассмотрим возможности  создания подписей графиков, осей и  отображения сетки на графике. Для  этого используются функции языка MatLab, перечисленные в табл. 3.4.  

 

Таблица 3.4. Функции оформления графиков

Название 

Описание 

grid [on, off]

Включает/выключает сетку на графике 

title(‘заголовок графика’)

Создает надпись заголовка графика 

xlabel(‘подпись оси Ox’) 

Создает подпись оси Ox

ylabel(‘подпись оси Oy’) 

Создает подпись оси Oy

text(x,y,’текст’) 

Создает текстовую надпись в  координатах (x,y).


Рассмотрим работу данных функций в следующем примере:

x = 0:0.1:2*pi;  
y = sin(x);  
   
plot(x,y);  
axis([0 2*pi -1 1]);  
grid on;  
title('The graphic of sin(x) function');  
xlabel('The coordinate of Ox');  
ylabel('The coordinate of Oy');  
text(3.05,0.16,'\leftarrow sin(x)');

Из результата работы данной программы, представленного  на рис. 3.9, видно каким образом  работают функции создания подписей на графике, а также отображение сетки графика.

Таким образом, используя  описанный набор функций и  параметров, можно достичь желаемого  способа оформления графиков в системе MatLab.

Рис. 3.9. Пример работы функций  оформления графика 

3.3. Отображение трехмерных графиков

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

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

plot3(X,Y,Z);

которая в качестве первых двух аргументов принимает матрицы  с координатами точек по осям Ox и Oy соответственно, а в качестве третьего аргумента передается матрица значений точек по оси Oz. Рассмотрим работу данной функции на примере отображения графика функции

,

при  и .

Сформируем матрицы X и Y, содержащие координаты точек данного  графика по осям Ox и Oy соответственно. Данные матрицы нужны для того, чтобы функция plot3() «знала» какие  реальные координаты соответствуют точке Z(i,j) матрицы значений по оси Oz. Для этого достаточно взять i-ю и j-ю компоненту матриц

Формирование матриц X и Y можно осуществить с помощью функции

[X,Y]=meshgrid(x,y);

языка MatLab. Здесь x и y –  одномерные векторы значений координат  по осям Ox и Oy соответственно, которые  можно сформировать как 

x=-1:0.1:1;              % координаты точек по оси Ox  
y=-2:0.1:2;              % координаты точек по оси Oy

и, затем, вычислить матрицы 

[X,Y]=meshgrid(x,y); % матрицы координат точек по осям Ox и Oy

В результате, матрицы X и Y будут содержать следующие первые восемь значений по строкам и столбцам:

Матрица X:

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

-1      -0,9   -0,8   -0,7   -0,6   -0,5   -0,4   -0,3

Матрица Y:

-2      -2      -2      -2      -2      -2      -2      -2

-1,9   -1,9   -1,9   -1,9   -1,9   -1,9   -1,9   -1,9

-1,8   -1,8   -1,8   -1,8   -1,8   -1,8   -1,8   -1,8

-1,7   -1,7   -1,7   -1,7   -1,7   -1,7   -1,7   -1,7

-1,6   -1,6   -1,6   -1,6   -1,6   -1,6   -1,6   -1,6

-1,5   -1,5   -1,5   -1,5   -1,5   -1,5   -1,5   -1,5

-1,4   -1,4   -1,4   -1,4   -1,4   -1,4   -1,4   -1,4

-1,3   -1,3   -1,3   -1,3   -1,3   -1,3   -1,3   -1,3

Используя данные матрицы, можно вычислить значения матрицы Z, следующим образом:

Z=exp(-X.^2-Y.^2);

и отобразить результат на экране

plot3(X,Y,Z);

Рис. 3.10. Пример отображения  графика с помощью функции plot3()

Из приведенного рисунка  видно, что функция plot3() отображает график в виде набора линий, каждая из которых соответствует сечению  графика функции   вдоль оси Oy.

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

mesh(X,Y,Z);   % отображение графика в виде сетки

В результате получим  следующий вид трехмерного графика (рис. 3.11).

Благодаря использованию  функции mesh() получается график, образованный интерполяцией точек массивов X, Y и Z линиями по осям Ox и Oy. Кроме того, цветом указывается уровень точки по оси Oz: от самого малого значения (синего) до самого большого (красного) и производится удаление «невидимых» линий. Это позволяет лучше визуально оценивать структуру трехмерного графика по сравнению с функцией plot3(). Если же необходимо отобразить «прозрачный» график, то следует выключить режим удаления «невидимых» линий:

hidden off;         % скрытые линии рисуются

В системе MatLab предусмотрена  функция визуализации непрерывной  поверхности в трехмерных осях

surf(X,Y,Z);        % отображение непрерывной поверхности

В результате получается график, представленный на рис. 3.12.

Рис. 3.11. Результат работы функции mesh()

Рис. 3.12. Результат работы функции surf()

Функция surf() может использоваться в режиме

shading interp;         % интерполяция тени на гранях графика

которая интерполирует  цвет на гранях для получения более  гладкого изображения поверхности (рис. 3.13). Также существует возможность  менять цветовую карту отображения графика с помощью функции

colormap( <карта> );    % установка цветовой карты

Например, карта с именем hot, используемая по умолчанию может  быть заменена на любую другую доступную (hot, hsv, gray, pink, cool, bone copper) или созданную  самостоятельно.

Рис. 3.13. Результат работы функции surf() в режиме shading interp

Следует отметить, что  все три функции plot3(), mesh() и surf() могут быть использованы и с одним аргументом Z, который интерпретируется как матрица со значениями точек по оси Oz.

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

axis([xmin xmax ymin ymax zmin zmax]);

с очевидным набором  параметров.

Для оформления трехмерных графиков можно пользоваться описанными ранее функциями: text, xlabel, ylabel, zlabel, title, grid [on/off], subplot.

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

view([az el]);

где az – угол азимута; el – угол возвышения. Изменение первого  угла означает вращение плоскости xOy вокруг оси Oz против часовой стрелки. Угол возвышения есть угол между направлением на камеру и плоскостью xOy.

3.4. Отображение растровых изображений

Система MatLab позволяет  загружать, отображать и сохранять  растровые изображения, представленные в известных графических форматах: bmp, jpg, tiff, gif, png и т.д. Для загрузки изображений используется функция

imread(FILENAME,FMT);

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

A=imread('1024.bmp','bmp'); % A – 1024x1024 матрица uint8

Если исходное изображение  имеет глубину цвета не более 256, то матрица A будет двумерной и  каждое ее значение будет представлять соответствующий уровень яркости  точки. Если же точка исходного изображения  представляется, например, 24 битами (3 байта), то матрица А будет иметь размерность 1024x1024x3, где третья размерность будет соответствовать цветовым составляющим исходного изображения. Поэтому для обработки изображений в экспериментальных целях часто используют формат с 256 градациями серого без индексации цвета.

Формат uint8 не очень удобен для последующей обработки точек  изображения, поэтому обычно его  приводят к вещественному следующим  образом:

A=double(imread('1024.bmp','bmp'));

В результате матрица  А будет состоять из элементов  типа double.

Для отображения растровых  изображений в графическом окне используется функция 

image(A);

результат действия которой  показан на рис. 3.14.

Неверное отображение  изображения объясняется несоответствием палитры цветов по умолчанию (hot), заданное в MatLab, с палитрой цветов загруженного изображения (gray(256) ). Для замены одной палитры на другую используется функция

colormap(gray(256));

которая в данном случае задает палитру 256 градаций серого и результат отображения принимает вид, представленный на рис. 3.15.

Рис. 3.14. Результат работы функции image

Рис. 3.15. Коррекция цветовой палитры функцией colormap

Если цветовая палитра  заранее неизвестна на момент загрузки изображения, то ее можно узнать, используя второй возвращаемый параметр функции imread:

[A, map]=imread(‘1024.bmp’,’bmp’);  
image(A);  
colormap(map);

где map – цветовая карта  текущего изображения.

При работе с изображениями возникают ситуации, когда диапазон значений элементов матрицы A может не соответствовать диапазону значений цветовой карты, например, gray(256). В результате отображения такой матрицы на экране монитора изображение будет показываться некорректно и некоторые его детали будут незаметны. Чтобы избежать такой ситуации, диапазон значений и диапазон цветовой карты должны совпадать. Это можно сделать искусственно, масштабируя соответствующим образом значения элементов матрицы А. Однако MatLab предоставляет функцию

imagesc(A);

которая делает это автоматически. Благодаря ее использованию, масштаб  значений матрицы А всегда будет  приведен к масштабу цветовой карты.

Глава 4. Программирование функций  в MatLab

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

4.1. Порядок определения и вызова функций

В первой главе данного  пособия был показан порядок  определения собственных функций  в программе MatLab. В данном параграфе  остановимся на более подробном  описании программирования пользовательских функций.

Синтаксис для определения  собственных функций в MatLab имеет следующий вид:

function [ RetVal1, RetVal2,… ] = FunctionName( arg1, arg2,… )  
<тело функции>

где RetVal1, RetVal2,... – набор  возвращаемых значений функцией (результаты работы); arg1, arg2,... – набор входных  аргументов; тело функции – набор операторов (программа), которые выполняются при вызове функции.

Информация о работе Курс лекций по "Программированию и компьютерам"