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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать файл)

и записана в виде '%d,%f,%f,%f,%f,%d'. Это означает, что сначала должно быть прочитано целочисленное значение из файла, затем, через запятую должно читаться второе вещественное значение, затем третье и так далее до последнего целочисленного значения. Полный список возможных спецификаторов приведен в табл. 5.2.

В результате работы программы  переменная S будет представлять собой  вектор-столбец, состоящий из 24 элементов:

S = [174500 1,6382 1,6384 1,6366 1,6375 288 180000 1,6374 1,6395 1,6366 1,6382 361 181500 1,6383 1,6385 1,6368 1,6374 223 183000 1,6372 1,6403 1,6372 1,6402 220]’;

Несмотря на то, что  данные были корректно считаны из файла, они из таблицы были преобразованы  в вектор-столбец, что не соответствует  исходному формату представления  данных. Чтобы сохранить верный формат данных, функцию fscanf() в приведенном примере следует записать так:

S = fscanf(fid, '%d,%f,%f,%f,%f,%d', [6 4]);

Тогда на выходе получится  матрица S размером в 6 столбцов и 4 строки с соответствующими числовыми значениями.

Таблица 5.2. Список основных спецификаторов для функций fscanf() и fprintf()

Спецификатор 

Описание 

%d

целочисленные значения

%f

вещественные значения

%s

строковые данные

%c

символьные данные

%u

беззнаковые целые значения


Для записи данных в текстовый  файл в заданном формате используется функция fprintf(). Ниже представлен пример записи матрицы чисел

180000    1.28210    1.28240    1.28100    1.28120    490  
190000    1.28100    1.28150    1.27980    1.28070    444  
200000    1.28050    1.28080    1.27980    1.28000    399  
210000    1.27990    1.28020    1.27880    1.27970    408  
220000    1.27980    1.28060    1.27880    1.28030    437  
230000    1.28040    1.28170    1.28020    1.28130    419  
000000    1.28140    1.28140    1.28010    1.28100    294  
010000    1.28080    1.28190    1.28030    1.28180    458  
020000    1.28190    1.28210    1.28080    1.28140    384  
030000    1.28130    1.28170    1.28080    1.28140    313

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

function fprintf_ex  
   
fid = fopen('my_excel.txt', 'w');  
if fid == -1  
    error('File is not opened');  
end  
   
fprintf(fid, '%6d;%.4f;%.4f;%.4f;%.4f;%d\r\n', Y');  
fclose(fid);

Следует отметить, что  в функции fprintf() переменная Y имеет  знак транспонирования ‘, т.к. данные в файл записываются по столбцам матрицы. Кроме того, перед спецификаторами стоят числа, которые указывают сколько значащих цифр числа должно быть записано в файл. Например, спецификатор %6d говорит о том, что целые числа должны иметь 6 значащих цифр, а спецификатор %.4f означает, что после запятой будет отображено только 4 цифры. Наконец, в форматной строке были использованы управляющие символы

\r – возврат каретки;  
\n – переход на новую строку

которые необходимы для  формирования строк в выходном файле. В итоге, содержимое файла будет иметь вид:

180000;1.2821;1.2824;1.2810;1.2812;490  
190000;1.2810;1.2815;1.2798;1.2807;444  
200000;1.2805;1.2808;1.2798;1.2800;399  
210000;1.2799;1.2802;1.2788;1.2797;408  
220000;1.2798;1.2806;1.2788;1.2803;437  
230000;1.2804;1.2817;1.2802;1.2813;419  
     0;1.2814;1.2814;1.2801;1.2810;294  
 10000;1.2808;1.2819;1.2803;1.2818;458  
 20000;1.2819;1.2821;1.2808;1.2814;384  
 30000;1.2813;1.2817;1.2808;1.2814;313

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

str = 'Hello';  
y = 10;  
count = fprintf(fid, '%d\r\n%s\r\n', y, str);

и содержимое файла будет  иметь вид:

10  
Hello

Таким образом можно осуществлять запись разнородных данных в файл в требуемом формате.

5.4. Функции imread и imwrite

При работе с файлами  изображений, представленных в форматах bmp, png, gif, jpeg, tif и т.д., используются функции  чтения

[X, map] = imread(filename, fmt)

и записи

imwrite(X, map, filename, fmt)

Здесь X – матрица точек  изображения; map – цветовая карта  изображения; filename – путь к файлу; fmt – графический формат файла  изображения.

Работа функции imread() была подробно рассмотрена в п. 3.4. Ниже приведен пример ее использования для загрузки растрового изображения

[A, map]=imread('1024.bmp','bmp');

где A – матрица размером 1024х1024xN точек; map – цветовая карта  загруженного изображения. Значение N показывает число байт, расходуемых  на представление точки изображения. Например, если изображение представляется в формате RGB с 24 бит/пиксел, то N=3. Если же загружается изображение с 256 градациями серого (8 бит/пиксел), то N=1.

После обработки изображение A можно обратно сохранить в  файл, используя следующую запись:

imwrite(A, map, 'out_img.bmp', 'bmp');

В результате в рабочем  каталоге MatLab будет сохранено изображение  в формате bmp с исходной цветовой картой. Однако следует отметить, что  если загруженное изображение A было преобразовано, например, в формат double

A = double(A);

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

imwrite(uint8(A), map, 'out_img.bmp', 'bmp');

Здесь uint8 – беззнаковый  целый тип в 8 бит.

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

imwrite(uint8(A), gray(256), 'out_img.bmp', 'bmp');

При этом матрица A должна иметь размерность MxNx1, т.е. один байт на пиксел.


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