- •§ 2.2. Командное окно системы matlab
- •§ 2.3. Рабочее пространство системы matlab
- •§ 2.4. Скаляры и массивы. Индексированные переменные
- •§ 2.5. Форматы представления вещественных чисел
- •§ 2.6. Арифметические выражения
- •2.6.1. Некоторая специфика использования вещественных данных
- •2.6.2. Некоторая специфика использования комплексных данных
- •2.6.3. Некоторые приемы работы с матрицами и векторами
- •2.6.4. Некоторые специфика выполнения арифметических и логических операций.
- •§ 2.7. Элементарные математические функции
- •Часть 2. Визуализация результатов вычислений
- •§ 2.8. Особенности графической подсистемы matlab
- •§ 2.9. Построение графиков функций одной переменной
- •2.9.1. Простые графики в декартовой системе координат.
- •2.9.2. Визуализация нескольких графиков.
- •2.9.3. Функция fplot.
- •2.9.4. Построение графиков в логарифмическом и полулогарифмическом масштабах.
- •2.9.5. Построение графиков в полярных координатах.
- •§ 2.10. Оформление графиков и графических окон
- •2.10.1. Выбор свойств линий.
- •2.10.2. Оформление осей координат.
- •2.10.3. Добавление надписей, заголовков и координатной сетки.
- •§ 2.11. Средства управления в графическом окне
- •§ 2.12. Общее знакомство с трехмерной графикой в matlab
- •2.12.1. Общий алгоритм визуализации функций двух переменных.
- •2.12.2. Построение трехмерных линий.
- •2.12.3. Построение поверхностей.
- •2.12.4. Задание дополнительных параметров трехмерных графиков.
- •2.12.5. Построение линий уровня.
- •2.12.6. Построение траектории точки, движущейся в пространстве.
- •2.12.7. Интерактивное редактирование графиков.
- •Часть 3. Вычисления с действительными и комплексными массивами чисел
- •§ 2.13. Операции отношения и логические операции над числами
- •2.13.1. Операции отношения.
- •2.13.2. Логические операции.
- •2.13.3. Приоритет операций.
- •§ 2.14. Формирование одномерных числовых массивов
- •2.14.1. Задание одномерных массивов и доступ к их элементам.
- •2.14.2. Об ускорении операций задания массива.
- •2.14.3. Об использовании операции формирования диапазона.
- •§ 2.15. Матрицы и векторы. Двумерные массивы чисел
- •2.15.1. Создание матриц и векторов.
- •2.15.2. Доступ к отдельным фрагментам матриц.
- •2.15.3. Удаление строк и столбцов матрицы.
- •2.15.4. Использование функций перестановки частей матриц.
- •2.15.5. Определение размеров и размерностей массивов.
- •2.15.6. Использование операций индексации.
- •2.15.7. Изменение размеров массива.
- •2.15.8. Специальные функции формирования массивов.
- •§ 2.16. Вычисления с массивами
- •2.16.1. Поэлементные и групповые операции над массивами.
- •2.16.2. Решение некоторых типовых задач линейной алгебры и аналитической геометрии.
- •2.16.3. Применение операций отношения и логических операций к массивам.
- •2.16.4. Некоторые функции для работы с массивами.
- •Часть 4. Стандартные средства решения некоторых типовых задач линейной алгебры и математического анализа
- •§ 2.17. Решение систем линейных алгебраических уравнений
- •§ 2.18. Решение некоторых задач линейной алгебры. Матричные функции
- •§ 2.19. Разреженные матрицы
- •§ 2.20. Решение нелинейных уравнений
- •§ 2.21. Поиск минимального значения функции
- •§ 2.22. Численное интегрирование
- •2.22.1. Использование метода трапеций.
- •2.22.2. Использование методов Симпсона и Гаусса-Лобатто.
- •2.22.3. Вычисление двойных интегралов.
- •§ 2.23. Операции над полиномами
- •2.23.1. Вычисление значения полинома.
- •2.23.2. Вычисление корней полинома.
- •2.23.3. Умножение и деление полиномов.
- •2.23.4. Дифференцирование и интегрирование полиномов.
- •§ 2.24. Интерполяция и аппроксимация данных
- •2.24.1. Полиномиальная аппроксимация.
- •2.24.2. Интерполяция сплайнами.
- •Часть 5. Символьные вычисления
- •§ 2.25. Создание символьных переменных, выражений и матриц
- •2.25.1. Создание символьных переменных.
- •2.25.2. Создание символьных выражений.
- •2.25.3. Создание символьных матриц.
- •§ 2.26. Символьные вычисления
- •2.26.1. Символьное дифференцирование.
- •2.26.2. Вычисление пределов.
- •2.26.3. Символьное интегрирование.
- •2.26.3. Вычисление суммы ряда. Разложение функций в ряды.
- •2.26.4. Упрощение выражений. Подстановки.
- •2.26.5. Управление точностью вычислений.
- •2.26.6. Операции над векторами. Операции над матрицами. Некоторые операции линейной алгебры.
- •2.26.7. Решение уравнений и систем уравнений.
- •§ 2.27. Визуализация результатов символьных вычислений
- •2.27.1. Построение двумерных графиков.
- •2.27.2. Построение трехмерных графиков.
- •Часть 6. Основы программирования на m-языке
- •§ 2.28. Основные понятия программирования в системе matlab
- •2.28.1. Назначение языка программирования matlab.
- •2.28.2. Основные средства программирования.
- •2.28.3. Основные типы данных.
- •2.28.4. Виды программирования.
- •2.28.5. Двойственность операторов, команд и функций.
- •2.28.6. Некоторые ограничения.
- •§ 2.29. Создание и использование m-файлов
- •2.29.1. Понятие об m-файлах.
- •2.29.2. Типы m-файлов.
- •2.29.3. Создание файл-программ.
- •2.29.4. Создание файл-функций.
- •2.29.5. Глобализация переменных и функций.
- •2.29.6. Синтаксический контроль программ.
- •§ 2.30. Управляющие структуры
- •2.30.1. Понятие об управляющих структурах.
- •2.30.2. Операторы цикла.
- •2.30.3. Операторы ветвления.
- •2.30.4. Прочие операторы.
- •§ 2.31. Работа с файлами
- •2.31.1. Общие замечания.
- •2.31.2. Подготовка файла к работе.
- •2.31.3. Завершение работы с файлами.
- •2.31.4. Контроль за исчерпанием данных.
- •2.31.5. Чтение из текстового файла.
- •2.31.6. Анализ ошибок в файловых операциях.
- •§ 2.32. Форматный ввод-вывод данных
- •2.32.1. Форматные преобразования (sprintf, sscanf).
- •2.32.2. Форматные преобразования при работе с файлами (fprintf, fscanf).
- •§ 2.33. Рекурсивные файл-функции. Производительность файл-функций
- •2.33.1. Понятие о рекурсивных файл-функциях.
- •2.33.2. Оценка производительности файл-функции.
- •§ 2.34. Файл-функции с переменным числом входных параметров и выходных значений
- •§ 2.35. Диалоговые программы
- •2.35.1. Ввод числовых и символьных данных.
- •2.35.2. Вывод результатов вычислений.
- •§ 2.36. Анимационные эффекты
- •§ 2.37. Контроль входных и выходных параметров файл-функции
- •§ 2.38. Отладка программы
- •2.38.1. Понятие о способах отладки программы.
- •2.38.2. Рекомендации по созданию и отладке программ.
- •Часть 7. Создание программ с визуальным интерфейсом
- •§ 2.39. Понятие о графическом интерфейсе пользователя (gui)
- •2.39.1. Предварительные замечания.
- •2.39.2. Основные команды для создания gui.
- •§ 2.40. Общие сведения о визуальной среде guide
- •§ 2.41. Программирование событий в matlab
- •§ 2.42. Свойства основных компонентов в matlab
- •§ 2.43. Диалоговые окна в matlab
- •§ 2.44. Динамическое создание компонентов
- •§ 2.45. Создание меню
- •§ 2.46. Некоторые рекомендации по созданию приложений с графическим интерфейсом пользователя
§ 2.32. Форматный ввод-вывод данных
2.32.1. Форматные преобразования (sprintf, sscanf).
Идеологию форматного ввода-вывода данных MATLAB заимствовал у языка программирования C, практически полностью сохранив набор соответствующих спецификаций. Разумееется, определенная специфика вносится тем обстоятельством, что элементом преобразуемых данных может быть массив, но тогда действие соответствующего форматного указателя распространяется на каждый элемент массива.
Преобразование списка данных (a1, a2, …) по формату fmt с записью результата в строку s выполняется с помощью функции sprintf:
[s,s_err]=sprintf(fmt,a1,a2,...)
причем помимо результата функция sprintf может выработать сообщение об ошибке во время выполнения операции, которое заносится в строку s_err. При нормальном завершении операции вместо сообщения об ошибке выдается пустая строка, которую можно и вовсе проигнорировать, если обратиться к функции с единственным выходным параметром
[s]=sprintf(fmt,a1,a2,...)
однако ошибка, обнаруженная привыполнении преобразования, может привести к получению пустой результирующей строки.
Строка формата fmt задает формат преобразования, состоящий из спецификаций, начинающихся с символа % (процент), и набора литерных символов, переносимых безо всяких иземенений из строки формата в результат. Каждая спецификация, управляющая способом преобразования, может содержать до пяти следующих компонент:
%[флажки][ширина][.точность][{b,t}]letter
где обязательными являются начальный символ (%) и завершающая буква (letter); флажки задаются как комбинация от одного до трех символов из набора (-,+, , #, 0), причем символ «-» (минус) устанавливает левый прижим (по умолчанию преобразуемое значение прижимается к правой границе поля заданной ширины), символ «+» (плюс) устанавливает режим обязательного вывода знака числа (даже если преобразуемые числа положительны), символ « » (пробел) устанавливает режим вывода знака положительного числа пробелом (по умолчанию на знак положительного числа специальная позиция не отводится), символ «#» влияет на вывод восьмеричных, шестнадцатиричных чисел, которые остались за пределами настоящей книги, а также на вывод вещественных чисел (в символьную запись вещественных чисел, преобразуемых по форматам f, e и E, обязательно включается десятичная точка (по умолчанию она опускается, если дробная часть равна нулю); в символьной записи вещественных чисел, преобразуемых по форматам g и G, не удаляются лидирующие нули и всегда включается десятичная точка); символ «0» при правом прижиме чисел включает режим вывода лидирующих нулей; ширина, задаваемая целым числом, определяет количество позиций (символов), которое отводится под преобразуемое значение; точность, также задаваемая целым числом, определяет количество цифр в дробной части (дробных цифр), сохраняемых в преобразованном значении; символ letter, завершающий форматную спецификацию, определяет тип преобразованного значения и должен согласовываться с типом преобразуемого данного (возможные варианты этого символа указаны в таблице 2.32.1); символы b или t, предшествующие указанному символу-спецификатору позволяют преобразовать в восьмеричный или шестнадцатеричный формат вещественные числа стандарта IEEE.
Таблица 2.32.1. Краткие сведения о символах-спецификаторах.
Спецификатор |
Формат результата |
%c |
Единственный символ |
%d |
Целое десятичное число со знаком |
%e |
Вещественное число в форме с плавающей точкой (порядок идентифицирует буква «e») |
%E |
Вещественное число в форме с плавающей точкой (порядок идентифицирует буква «E») |
%f |
Вещественное число в форме с фиксированной точкой |
%g |
Компактная форма числа с фиксированной или плавающей точкой |
%G |
Компактная форма числа с фиксированной или плавающей точкой |
%o |
Целое восьмеричное число без знака |
%s |
Строка символов |
%u |
Целое десятичное число без знака |
%x |
Целое шестнадцатеричное число с малыми буквами a - f. |
%X |
Целое шестнадцатеричное число с большими буквами A - F. |
Спецификаторы %d, %u, %o, %x и %X имеет смысле применять к целочисленным значениям (хотя, тем не менее, и представленным в оперативной памяти в формате double), причем если соответствующий элемент списка не является целым числом, то MATLAB заменяет целочисленную спецификацию на формат вещественного числа.
Все символы, включенные в состав строки fmt и не относящиеся к форматным спецификациям, являются литералами, которые без изменения переносятся в результирующую строку. Среди литералов могут присутствовать управляющие символы, представленные в таблице 2.31.2, запись которых осуществляется согласно правилам языка программирования C.
Таблица 2.32.2. Краткие сведения об управляющих символах.
Символ |
Назначение |
\b |
Удаление предшествующего символа (Backspace) |
\f |
Перевод страницы (Form feed) |
\n |
Перевод строки (New line) |
\r |
Возврат каретки (Carriage return) |
\t |
Горизонтальная табуляция (Horizontal tab) |
\\ |
Обратная косая черта (Backslash) |
\'' |
Одинарная кавычка (') |
%% |
Процент (%) |
Приведем ниже несколько примеров форматного вывода данных в системе MATLAB.
>> sprintf('%-7d %+7d %07d',12345,12345,12345)
ans =
12345 +12345 0012345
>> sprintf('% d',12345)
ans =
12345
>> sprintf('% d',-12345)
ans =
-12345
>> sprintf('%10.6f',pi)
ans =
3.141593
>> sprintf('%9.5f',pi)
ans =
3.14159
>> sprintf('%d',pi)
ans =
3.141593e+00
>> sprintf('Число пи=%10.8f',pi)
ans =
Число пи=3.14159265
Обратная операция по извлечению данных из строки s, сформированной функцией sprintf, выполняется с помощью функции sscanf:
A=sscanf(s,fmt)
Такой вариант вызова обеспечивает выборку всех данных и их обратное преобразование из символьного представления в машинное в соответствии с форматными указателями строки fmt. Форматные спецификации в данном случае те же самые, что и при преобразовании в строку, хотя, разумеется, некоторые детали, характерные для вывода данных (прижим, точность, префиксы и т.д.), в обратном преобразовании не используются.
Среди дополнительных средств управления форматом следует выделить перечисленные ниже:
– использование флажка, задаваемого символом «*», обеспечивающего пропуск очередного данного в строке s;
– использование форматов %hd, %ld и %lg, позволяющих преобразовать
извлекаемое число в машинный код короткого целого (%hd), длинного целого (%ld) или вещественного числа двойной точности (%lg);
– использование формата %[s1s2...], обеспечивающего извлечение только тех символов из строки s, которые перечислены в квадратных скобках;
– использование формата %[^s1s2...], обеспечивающего извлечение только тех символов из строки s, которые не перечислены в квадратных скобках.
Приведем характерный пример:
>> s='2.7183 3.1416';
>> A=sscanf(s,'%f')
A =
2.7183
3.1416
Заметим, что при прямом преобразовании в строку для массива A также требовалась лишь одна спецификация формата:
>> s1=sprintf('%f ',A)
s1 =
2.718300 3.141600
Следует отметить использование литерального пробела в формате. Без него оба числовых значения оказались бы «склеянными», и для их разделения потребовались бы определенные усилия.
>> s1=sprintf('%f',A)
s1 =
2.7183003.141600
Такого рода склеивания, разумеется, можно было бы избежать за счет использования шрины, точности и прижма:
>> s1=sprintf('%-8.4f',A)
s1 =
2.7183 3.1416
Функция sscanf допускает и иные варианты вызова, обеспечивающие извлечение лишь заданного количества данных или их извлечение в цикле:
A=sscanf(s,fmt,size)
[A,count,s_err,nextindex]=sscanf(s,fmt)
Аналогами функций sprintf и sscanf при работе с файлами являются соответственно fprintf и fscanf, рассматриваемые далее.
