ВычМат_Лекции_2013 / Лекции Матлаб, программы и задачи к ним / 3 лекция Матлаб (матрицы, строки, файлы) / 3 лекция Матлаб (матрицы, строки, файлы)
.docxМАТЛАБ. МАТРИЦЫ, СТРОКИ, ФАЙЛЫ.
Матрицы. Действия с матрицами в 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 |
Вещественное число |
Текущая позиция указателя (сколько байт от начала файла) возвращается функцией 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 байта) элементов, получая количество элементов в файле. Первое из них целое, остальные массив вещественных чисел (см. выше по тексту как заполнялся этот файл).
Аналогичным образом можно считать данные из любого двоичного файла, обладая минимальной необходимой информацией о характере того, что там находится (разрядность, типы элементов).