- •Введение
- •Лабораторная работа ип1 Знакомство с Matlab
- •1. Рабочая среда Matlab
- •2. Данные Matlab
- •Типы данных
- •Числовые константы
- •Символьные константы
- •Переменные
- •3. Выражения
- •3.1. Арифметические выражения
- •3.2. Логические выражения
- •3.3. Порядок вычисления выражений
- •4. Сообщения об ошибках и исправление ошибок
- •5. Завершение вычислений
- •6. Завершение работы с системой
- •7. Резюме
- •8. Контрольные вопросы
- •9. Индивидуальные задания
- •Лабораторная работа ип2 работа с матрицами в matlab
- •1. Общие сведения
- •2. Одномерные массивы – векторы
- •3. Двумерные массивы – матрицы
- •4. Использование двоеточия
- •4.1. Автозаполнение
- •4.2. Индексация
- •5. Поэлементные и матричные операции
- •6. Стандартные функции для работы с матрицами
- •7. Логическое индексирование
- •8. Контрольные вопросы
- •9. Индивидуальные задания
- •10. Упражнения
- •2. Диалоговый ввод/вывод
- •3. Управление последовательностью исполнения операторов
- •3.1. Оператор условия if
- •3.2. Оператор переключения
- •3.3. Оператор цикла с определенным числом повторений
- •3.4. Оператор цикла с неопределенным числом повторений
- •4. Контрольные вопросы
- •5. Индивидуальные задания
- •Лабораторная работа ип4 визуализация данных в matlab
- •1. Общие сведения
- •2. Построение таблицы значений функции
- •3. Двумерная графика
- •3.1. Общие правила построения графиков
- •3.2. Оформление графиков
- •3.3. Построение графиков
- •3.4. Управление свойствами графиков
- •4. Трехмерная графика
- •4.1. Общие принципы построения трехмерных графиков
- •4.2. Построение трехмерных графиков
- •4.3. Управление свойствами трехмерных графиков
- •5. Контрольные вопросы
- •6. Индивидуальные задания
- •Лабораторная работа ип5 файл-функции
- •2. Описание m-функции
- •3. Обращение к m-функции
- •4. Параметры-функции
- •5. Разновидности m-функций
- •5.1. Подфункции
- •5.2. Вложенные функции
- •6. Контрольные вопросы
- •7. Индивидуальные задания
- •2. Аппроксимация
- •2.1. Моделирование полиномом по методу
- •2.2. Аппроксимация произвольной функцией
- •3. Интерполяция
- •3.1. Кусочная интерполяция
- •3.2. Кубические сплайны
- •3.3. Интерполяция произвольной нелинейной функцией
- •4. Контрольные вопросы
- •5. Индивидуальные задания
- •Лабораторная работа ип7 Вычисление функций разложением в ряд
- •1. Общие сведения
- •2. Индивидуальное задание
- •Лабораторная работа ип8 Решение нелинейных уравнений в среде Matlab
- •1. Общие сведения
- •2. Поиск корней полиномов
- •3. Решение одного нелинейного уравнения
- •4. Решение систем нелинейных уравнений
- •5. Контрольные вопросы
- •6. Индивидуальные задания
- •Лабораторная работа ип9 обмен данными с текстовым файлом
- •1. Общие сведения
- •2. Открытие файла
- •3. Запись в текстовый файл
- •3.1. Запись строковых значений
- •3.2. Запись числовых значений
- •4. Чтение из текстового файла
- •4.1. Последовательное чтение строк
- •4.2. Последовательное чтение нескольких символов
- •4.3. Чтение чисел из текстового файла
- •4.4. Альтернативный доступ к текстовому файлу
- •5. Закрытие файла
- •6. Контрольные вопросы
- •7. Индивидуальные задания
- •Заключение
- •Список рекомендуемой литературы
- •Программирование в matlab
- •428015 Чебоксары, Московский просп., 15
4.3. Чтение чисел из текстового файла
Если данные в текстовый файл f1 были записаны в определенном формате, то прочитать их с преобразованием к числовым значениям можно с помощью функции fscanf, обращение к которой следующее
[arr n]=fscanf(f1, 'СписокФорматов', КоличествоЧисел)
Первый входной аргумент является идентификатором файла, открытого для чтения, второй – строка с кодами форматов, которые определяют вид преобразования считываемых значений, третий необязательный входной аргумент – количество чисел, которое следует ввести. Если количество запрашиваемых чисел не указано, то данные будут прочитаны до конца файла. Если количество запрашиваемых данных задано числом, то считываемые значения будут размещены в векторе-столбце. Указав количество запрашиваемых чисел в виде вектора [m n], можно прочитать данные из файла в матрицу m×n.
Первым выходным параметром является имя принимающего массива, в элементы которого будут размещены считываемые данные. Второй выходной параметр – счетчик количества фактически прочитанных значений (является необязательным).
Коды формата, указываемые в списке форматов функции fscanf, практически такие же, как и для функции fprintf (см. табл. 9.1). При этом следует помнить, что вводимые значения и вещественные и целочисленные преобразуются в машинный формат типа double. В связи с этим задание полей w.n при вводе не используется.
Пример. В файл на диске matrix.txt записывается матрица 3×3. Затем файл открывается для чтения и из него в переменную y считывается все содержимое как матрица 3×3.
f=fopen('matrix.txt','wt');
x=[11 12 13; 21 22 23; 31 32 33];
fprintf(f,'%4d',x);
fclose(f);
f=fopen('matrix.txt','rt');
y=fscanf(f,'%d',[3 3])
y =
11 12 13
21 22 23
31 32 33
Примечание: в файл matrix.txt' элементы матрицы записываются в том порядке, в каком они располагаются в рабочем пространстве – в одну строку столбец за столбцом.
Если форматный код начинается с комбинации %*, то соответствующее значение, считанное из файла, в принимающий массив не передается. Это дает возможность пропускать ненужные данные.
Пример. Из файла 'matrix.txt' предыдущего примера прочитать только элементы главной диагонали матрицы
y=fscanf(f,'%d%*d%*d%*d')
y =
11
22
33
4.4. Альтернативный доступ к текстовому файлу
Альтернативное чтение из текстового файла позволяет реализовать функция textread, синтаксис которой в простейшем случае следующий:
МассивПриемник=textread('ИмяФайла')
Обращение к файлу в этом случае выполняется по его имени (путь\имя_файла.расширение), а не по номеру заранее открытого файла. Таким образом, не требуется предварительное открытие файла для чтения и последующее его закрытие. Если текстовый файл содержит только числовую информацию, то при чтении функцией textread можно не задавать строку форматных преобразований.
Пример. В файл file1.txt записывается строка из пяти чисел в формате %3d – три позиции под одно значение целого (символы двухзначного целого числа в файле будут выровнены по правому краю поля, в итоге перед каждым числом будет по одному пробелу). Затем из файла считывается столько чисел, сколько есть. В результате переменная numbers будет вектором-строкой из пяти целых чисел.
f=fopen('file1.txt','wt');
fprintf(f,'%3d',11,12,13,14,15);
fclose(f);
numbers=textread('file1.txt')
numbers =
11 12 13 14 15
Примечание: следует помнить, что в конце каждой строки, завершающейся символом признака конца (парой символов CR и LF), считывается CR, который будет интерпретирован как число 0. Если за последним числом в строке в текстовый файл будет выведен пробел, то при чтении без указания форматов этот пробел также будет преобразован в ноль.
f=fopen('file1.txt','wt');
fprintf(f,'%2d ',11,12,13,14,15);
fclose(f);
numbers=textread('file1.txt')
Этот пример отличается от предыдущего только форматом вывода. '%2d ' предполагает за полем числа из двух символов выводится пробел. В результате переменная numbers будет вектором-строкой из шести целых чисел (пробел за числом 15 преобразован в число 0)
numbers =
11 12 13 14 15 0
Если задавать форматы преобразования, то можно управлять потоком данных. Например, чтобы читать не все данные, записанные в файл, в списке входных параметров textread необходимо указать форматную строку и количество запрашиваемых чисел
numbers=textread('file1.txt', '%d', 2)
numbers =
11
12
Данные можно прочитать не только в один массив, но и разбросать их по отдельным переменным. Но при этом каждой выходной переменной должен соответствовать свой формат
[n1 n2 n3 n4 n5]=textread('file1.txt','%d%d%d%d%d')
n1 =
11
n2 =
12
n3 =
13
n4 =
14
n5 =
15
Если в списке выходных переменных указано меньше элементов, чем чисел, записанных в файл, то чтение повторяется до тех пор, пока все данные файла не будут размещены
[n1 n2]=textread('file1.txt','%d%d')
n1 =
11
13
15
n2 =
12
14
Внимание: при использовании textread следует помнить, что каждое обращение к функции инициализирует чтение от начала файла.
n1=textread('file1.txt','%d',2)
n2=textread('file1.txt','%d',2)
n1 =
11
12
n2 =
11
12
Увы, n2 не будет содержать числа 13 и 14.
Пропустить несколько строк от начала файла перед чтением данных позволяет дополнительный входной параметр 'headerlines'. Например, прочитать таблицу, хранящуюся в файле result.txt (см. п. 3.2) можно следующим образом:
[x y]=textread('rezult.txt','%f%f','headerlines',2);
disp(' x sin(x)')
disp([x y])
x sin(x)
-1.5708 -1.0000
-1.0472 -0.8660
-0.5236 -0.5000
0 0
0.5236 0.5000
1.0472 0.8660
1.5708 1.0000
От начала файла result.txt пропускаются две строки поясняющего текста (шапка таблицы), затем до конца файла строка за строкой считывается числовая информация и размещается в переменных x и y.