Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
85
Добавлен:
13.02.2015
Размер:
3.08 Mб
Скачать

МАТЛАБ. МАТРИЦЫ, СТРОКИ, ФАЙЛЫ.

Матрицы. Действия с матрицами в Command Window.

В Command Window можно осуществлять все основные операции с матрицами (массивами, как их называют в программировании). Матрица вводится так: А=[1 5 46; 6 7 34; 78 12 5]; где А имя матрицы выбранное программистом по своему усмотрению, строки матрицы отделены друг от друга точкой с запятой. Например, матрица из одного столбца (вектор, как ее называют в программировании) вводится в Command Window так: В=[2; 6; 7; 89; -4]; то есть ее элементы, каждый из которых расположен в следующей строке, отделены друг от друга точкой с запятой. Для операций с матрицами предусмотрены специальные команды, которые будут подробно описаны позже.

Действия с матрицами в М-файлах.

В М-файлах ввод массива следует организовывать поэлементно, используя для этого следующие команды: A(i,j)=input(strcat(‘А(‘,int2str(i),’,’,int2str(j),’)=’)); где А имя массива, i, j целые числа (переменные целочисленного типа) используемые как счетчики циклов, input команда ввода переменной с предварительным выводом обращения к пользователю. Обращение к пользователю обычно указывается в скобках команды input. В данном случае в скобках находится команда strcat которая предназначена для формирования строки символов (текста). В ее скобках обычно указывают несколько фрагментов текста и имена переменных, когда требуется сформировать единый текст из этих фрагментов и чисел (значений числовых переменных). Для того чтобы значения числовых переменных преобразовать в строку цифр, используются команды int2str для целых чисел и num2str для любых чисел. Для операций с матрицами предусмотрены специальные команды, которые будут подробно описаны позже.

Файлы. Действия с файлами.

Текстовыми файлами называются файлы из символов (текста). Они состоят из строк, оканчивающихся символом «конец строки». В конце файла стоит символ «конец файла». Файл имеет расширение .txt.

Двоичные файлы содержат информацию в виде последовательностей двоичных символов заданной длины. Имеют расширение .dat.

Текстовые файлы.

Для открытия текстового файла используется команда f=fopen('exTextFile_1.txt','wt'); где f имя переменной которая будет изображать открытый файл в тексте программы. exTextFile_1.txt это имя файла с расширением .txt который будет открыт. Если он не существовал раньше то он будет создан (без какого-либо содержащегося в нем текста). wt означает что файл вновь создаваемый, текстовый, пустой и открыт только для записи.

Команда fprintf(f,'first matrix \n'); означает что в упомянутый файл f будет помещена (записана) строка указанная в кавычках. Ее завершает символ конца строки \n.

Команда fprintf(f,'%f\t',A(i,j)); записывает в файл очередной элемент массива A(i,j). Указанное в кавычках %f означает что элемент массива будет записан как число со знаком, с шестью знаками после запятой (а если бы было %d то было бы целое число со знаком; %с символ; %s строка символов; %g число со знаком и указанием порядка). Указанное там же \t означает что перед элементом массива будет вставлена табуляция (то есть перед ним будет широкий пробел).

Команда fprintf(f,'\n'); означает что будет вставлен символ конца строки и произойдет переход на следующую строку.

Команда fclose(f); закрывает файл f. Она необходима. Каждый использованный (открытый) файл необходимо закрыть (закончить работу с ним).

Для того чтобы считать содержимое созданного нами текстового файла, напишем М-файл.

Команда f=fopen('exTextFile_1.txt','rt'); означает что файл открыт для чтения.

Команда s1=fscanf(f,'%s',2); означает что считывается в переменную s1 строка (так как указано %s) из двух слов (словом считается все что перед пробелом или знаком препинания или знаком конца строки). При этом пробел не считывается.

Команда A(i,:)=fscanf(f,'%f',3); означает что в матрицу А в ее i-ю строку, во всю длину строки копируются из файла числа со знаком и с шестью знаками после запятой, три числа.

Функции для записи матриц в файл и чтения матриц из файла.

Функция dlmread считывает числовые данные из текстового файла в матрицу.

Функция dlmwrite записывает матрицу в текстовый файл.

Команда dlmwrite('dlm1.txt',A) записывает матрицу А в файл и ставит запятые после элементов матрицы. Команда type('dlm1.txt') показывает содержимое текстового файла в окне Command Window.

Команда dlmwrite('dlm2.txt',A,'#') не только записывает матрицу А в файл, но и добавляет между элементами матрицы разделитель. Разделитель можно указать почти любой.

Команда dlmwrite('dlm3.txt',A,'#',2,2) записывает не всю матрицу, а начиная с указанной строки и столбца. На месте пропущенных элементов (строк и столбцов) остаются разделители.

Команда A=dlmread('dlm2.txt','#',1,1) считывает матрицу из указанного текстового файла, начина с второй строки и второго столбца (указанные номера строки и столбца 1, 1 на самом деле означают 2 строку и 2 столбец, так как нумерация в этой команде идет с нуля). При этом команда предупреждена о наличии между считываемыми элементами разделителя # и не затрудняется из-за его наличия.

Команда A=dlmread('exTextFile_3.txt') считывает матрицу квадратную, и если до квадратной не хватает, то добавляет строки или столбцы из нулей.

Команда A=dlmread('dlm1.txt',',') считывает, зная о наличии разделителя между элементами матрицы.

Команда A=dlmread('dlm1.txt',',',[0 0 1 1]) считывает, зная о разделителе, элементы начиная с 0-й строки и 0-го столбца и до 1-й строки и 1-го столбца при нумерации с нуля.

Двоичные файлы.

При открытии функцией fopen указывается режим: wb (аналогично wt для текстовых) и rb (вместо rt для текстовых).

uchar

1 байт

Целое беззнак.

schar

1

Целое со знаком

int16

2

Целое со знаком

int32

4

Целое со знаком

int64

8

Целое со знаком

uint16

2

Целое без знака

uint32

4

Целое без знака

uint64

8

Целое без знака

float32

4

Вещественное число

float64

8

Вещественное число

Чтение из двоичного файла выполняется [A n]=fread(f, n, type); где А матрица, n количество реально считанных в нее элементов. В правой части выражения, f идентификатор файла, n количество считываемых (если удастся столько считать) элементов, type указывает сколько байт в каждом считываемом элементе. Если параметр type (см. таблицу) не указан то по умолчанию программа будет считать что выбрано значение uchar. Если прпущено количество n считываемых элементов, то будет считывать до конца файла.

Текущая позиция указателя (сколько байт от начала файла) возвращается функцией ftell(f) где f идентификатор файла. Вернуть указатель в начало файла можно функцией frewind(f). Остальные перемещения указателя с помощью функции fseek(f,n,origin) где n перемещение (в байтах) относительно позиции origin (три варианта: ‘bof’ или -1 начало файла, ‘eof’ или 1 конец файла, ‘cof’ или 0 текущая позиция. Относительно текущей позиции вперед n>0, назад n<0. В остальных случаях n>0.)

Запись в двоичный файл осуществляется функцией n=fwrite(f, A, type) где f идентификатор файла, A матрица которую записываем, type тип записываемых значений, n отчет о количестве реально записанных значений.

Чтение из двоичного файла, если заранее не известно количество элементов в нем.

Пусть нам о файле exFwrite1_1.dat уже известно, что он состоит из 32-разрядных значений. Тогда команда fseek(f,0,1); означает перевод указателя в конец файла и после этого команда n=ftell(f)/4 получает текущее положение указателя в байтах от начала файла (фактически, длину файла) и затем делит его на 4, так как файл состоит из 32-разрядных (по 4 байта) элементов, получая количество элементов в файле. Первое из них целое, остальные массив вещественных чисел (см. выше по тексту как заполнялся этот файл).

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