Матлаб не сохраняет файлы

Обновлено: 04.07.2024

Создание программ часто предполагает сохранение результатов расчетов в файлы для их дальнейшего анализа, обработки и хранения. В связи с этим в среде MATLAB реализованы различные функции по работе с файлами, содержащие данные в разных форматах.

Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы:load, freadиfscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.

В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:

save<имя файла><имена переменных>

load<имя файла><имена переменных>

Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция loadпозволяет загрузить из указанного mat-файла ранее сохраненные переменные.

Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>)

<переменная>=fread(<идентификатор файла>, <размер>, <точность>)

где: <идентификатор файла>– это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:

<идентификатор файла>=fopen(<имя файла>,<режим работы>)

где: параметр <режим работы> может принимать значения, приведенные в таблице 1.

В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fcloseследующей структуры:

fclose(<идентификатор файла>)

С помощью команды fclose(all)можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.

Пример использования функций работы с файлами:

A=[1 2 3 4 5];

fid=fopen('my_file.dat', 'wb');% открытие файла на запись

fwrite(fid, A, 'double');% запись матрицы А в файл

fclose(fid);% закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:

feof(<идентификатор файла>)

Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen

Значение параметра <режим работы> Описание параметра
'r' чтение
'w' запись (стирает предыдущее содержимое файла)
'a' добавление (создает файл, если его нет)
'r+' чтение и запись (не создает файл, если его нет)
'w+' чтение и запись (очищает прежнее содержимое или создает файл, если его нет)
'a+' чтение и добавление (создает файл, если его нет)
'b' дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’

Описанные ранее функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или иные числа или текст. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации: fscanf и fprintf, соответственно.




Функция чтения fscanfимеет следующий синтаксис:

[value, count]=fscanf(fid, format, size)

где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных

Функция записиfprintfимеет следующий синтаксис:

count=fprintf(fid, format, a,b. )

где:a,b,… – переменные для записи в файл.

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

Спецификатор Описание
%d целочисленные значения
%f вещественные значения
%s строковые данные
%c символьные данные
%u беззнаковые целые значения

В форматной строке могут бытьтакже использованы различные управляющие символы:

\r – возврат каретки;

\t – горизонтальная табуляция;

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

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

И.В.Черных. "Simulink: Инструмент моделирования динамических систем"

9. Библиотека блоков Simulink

9.2. Sinks - приемники сигналов

Строит графики исследуемых сигналов в функции времени. Позволяет наблюдать за изменениями сигналов в процессе моделирования.

Изображение блока и окно для просмотра графиков показаны на рис. 9.2.1.

Рис. 9.2.1. Осциллограф Scope

Для того, чтобы открыть окно просмотра сигналов необходимо выполнить двойной щелчок левой клавишей “мыши” на изображении блока. Это можно сделать на любом этапе расчета (как до начала расчета, так и после него, а также во время расчета). В том случае, если на вход блока поступает векторный сигнал, то кривая для каждого элемента вектора строится отдельным цветом.

Настройка окна осциллографа выполняется с помощью панелей инструментов (рис.9.2.2).

Рис. 9.2.2. Панель инструментов блока Scope

Панель инструментов содержит 11 кнопок:

    1. Print – печать содержимого окна осциллографа.
    2. Parameters – доступ к окну настройки параметров.
    3. Zoom – увеличение масштаба по обеим осям.
    4. Zoom X-axis – увеличение масштаба по горизонтальной оси.
    5. Zoom Y-axis – увеличение масштаба по вертикальной оси.
    6. Autoscale – автоматическая установка масштабов по обеим осям.
    7. Save current axes settings – сохранение текущих настроек окна.
    8. Restore saved axes settings – установка ранее сохраненных настроек окна.
    9. Floating scope – перевод осциллографа в “свободный” режим.
    10. Lock/Unlock axes selection – закрепить/разорвать связь между текущей координатной системой окна и отображаемым сигналом. Инструмент доступен, если включен режим Floating scope.
    11. Signal selection – выбор сигналов для отображения. Инструмент доступен, если включен режим Floating scope.

    Изменение масштабов отображаемых графиков можно выполнять несколькими способами:

    1. Нажать соответствующую кнопку (, или ) и щелкнуть один раз левой клавишей “мыши” в нужном месте графика. Произойдет 2,5 кратное увеличение масштаба.

    2. Нажать соответствующую кнопку (, или ) и, нажав левую клавишу “мыши”, с помощью динамической рамки или отрезка указать область графика для увеличенного изображения. Рис. 9.2.3 поясняет этот процесс.

    Рис. 9.2.3. Увеличение масштаба графика.

    3. Щелкнуть правой клавишей “мыши” в окне графиков и, выбрать команду Axes properties… в контекстном меню. Откроется окно свойств графика, в котором с помощью параметров Y-min и Y-max можно указать предельные значения вертикальной оси. В этом же окне можно указать заголовок графика (Title), заменив выражение %<SignalLabel> в строке ввода. Окно свойств показано на рис. 9.2.4.

    Рис. 9.2.4. Окно свойств графика.

    Параметры блока устанавливаются в окне ‘Scope’ parameters, которое открывается с помощью инструмента (Parameters) панели инструментов. Окно параметров имеет две вкладки:

    General – общие параметры.

    Data history – параметры сохранения сигналов в рабочей области MATLAB.

    Вкладка общих параметров показана на рис. рис. 9.2.5.

    Рис. 9.2.5. Вкладка общих параметров General.

    На вкладке General задаются следующие параметры:

    1. Number of axes — число входов (систем координат) осциллографа. При изменении этого параметра на изображении блока появляются дополнительные входные порты.

    2. Time range — величина временного интервала для которого отображаются графики. Если время расчета модели превышает заданное параметром Time range, то вывод графика производится порциями, при этом интервал отображения каждой порции графика равен заданному значению Time range.

    3. Tick labels — вывод/скрытие осей и меток осей. Может принимать три значения (выбираются из списка):

      • all – подписи для всех осей,
      • none – отсутствие всех осей и подписей к ним,
      • bottom axis only – подписи горизонтальной оси только для нижнего графика.

      4. Sampling — установка параметров вывода графиков в окне. Задает режим вывода расчетных точек на экран. При выборе Decimation кратность вывода устанавливается числом, задающим шаг выводимых расчетных точек. На рис. 9.2.6 и 9.2.7. показаны графики синусоидальных сигналов рассчитанных с фиксированным шагом 0.1 с. На рис. 9.2.6 в окне блока Scope выводится каждая расчетная точка (параметр Decimation равен 1). На рис. 9.2.7 показан вывод каждого второго значения (параметр Decimation равен 2). Маркерами на графиках отмечены расчетные точки.

      Рис. 9.2.6. Отображение синусоидального сигнала (Decimation = 1).

      Рис. 9.2.7. Отображение синусоидального сигнала (Decimation = 2).

      В том случае, если режим вывода расчетных точек задается как Sample time, то его числовое значение определяет интервал квантования при отображении сигнала. На рис. 9.2.8 показан график синусоидального сигнала, для случая, когда значение параметра Sample time равно 0.1 .

      Рис. 9.2.8. Отображение синусоидального сигнала (Sample time = 0.1).

      5. floating scope – перевод осциллографа в “свободный” режим (при установленном флажке).

      На вкладке Data history (рис. 9.2.9)задаются следующие параметры:

      1. Limit data points to last – максимальное количество отображаемых расчетных точек графика. При превышении этого числа начальная часть графика обрезается. В том случае, если флажок параметра Limit data points to last не установлен, то Simulink автоматически увеличит значение этого параметра для отображения всех расчетных точек.

      2. Save data to workspace – сохранение значений сигналов в рабочей области MATLAB.

      3. Variable name – имя переменной для сохранения сигналов в рабочей области MATLAB.

      • Array – массив,
      • Structure – структура,
      • Structure with time – структура с дополнительным полем “время”.

      Рис. 9.2.9. Вкладка Data history.

      9.2.2. Осциллограф Floating Scope

      Осциллограф Floating Scope, по сути, есть обычный осциллограф Scope, переведенный в “свободный” режим. Пример модели с осциллографом Floating Scope показан на рис. 9.2.10.

      Рис. 9.2.10. Пример модели с осциллографом Floating Scope.

      В этом режиме блок осциллографа не имеет входов, а выбор отображаемого сигнала осуществляется с помощью инструмента (Signal selection) панели инструментов. Для выбора сигналов необходимо выполнить следующие действия:

      1. Выделить систему координат, в которой будет отображаться график. Это достигается с помощью одиночного щелчка левой клавишей “мыши” внутри нужной системы. Выбранная система координат будет подсвечена по периметру синим цветом.

      2. С помощью инструмента открыть окно диалога Signal Selector (рис. 9.2.11).

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

      После выполнения расчета в окне блока Floating Scope будут отображены выбранные сигналы.

      Рис. 9.2.11. Окно диалога Signal Selector

      9.2.3. Графопостроитель ХУ Graph

      Строит график одного сигнала в функции другого (график вида Y(X)).

      x-min – Минимальное значение сигнала по оси X.

      x-max – Максимальное значение сигнала по оси X

      y-min – Минимальное значение сигнала по оси Y.

      y-max – Максимальное значение сигнала по оси Y

      Sample time – шаг модельного времени.

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

      На рис.9.2.12, в качестве примера использования графопостроителя, показано построение фазовой траектории колебательного звена.

      Рис. 9.2.12. Пример использования графопостроителя ХУ Graph.

      Графопостроитель можно использовать и для построения временных зависимостей. Для этого на первый вход следует подать временной сигнал с выхода блока Clock. Пример такого использования графопостроителя показан на рис. 9.2.13.

      Рис. 9.2.13. Пример использования блока ХУ Graph для отображения временных зависимостей.

      9.2.4. Цифровой дисплей Display

      Отображает значение сигнала в виде числа.

      • Format – формат отображения данных. Параметр Format может принимать следующие значения:
        1. short – 5 значащих десятичных цифр.
        2. long – 15 значащих десятичных цифр.
        3. short_e –5 значащих десятичных цифр и 3 символа степени десяти.
        4. long_e – 15 значащих десятичных цифр и 3 символа степени десяти.
        5. bank – "денежный" формат. Формат с фиксированной точкой и двумя десятичными цифрами в дробной части числа.
      • Decimation – кратность отображения входного сигнала. При Decimation = 1 отображается каждое значение входного сигнала, при Decimation = 2 отображается каждое второе значение, при Decimation = 3 – каждое третье значение и т.д.
      • Sample time – шаг модельного времени. Определяет дискретность отображения данных.
      • Floating display (флажок)– перевод блока в “свободный” режим. В данном режиме входной порт блока отсутствует, а выбор сигнала для отображения выполняется щелчком левой клавиши “мыши” на соответствующей лини связи. В этом режиме для параметра расчета Signal storage reuse должно быть установлено значение off (вкладка Advanced в окне диалога Simulation parameters…).

      На рис. 2.9.14 показано применение блока Display с использованием различных вариантов параметра Format.

      Рис. 9.2.14. Применение блока Display с использованием различных вариантов параметра Format.

      Блок Display может использоваться для отображения не только скалярных сигналов, но также векторных, матричных и комплексных. Рис. 2.9.15 иллюстрирует это. Если все отображаемые значения не могут поместиться в окне блока, в правом нижнем углу блока появляется символ , указывающий на необходимость увеличить размеры блока (см. блок Display4 на рис. 2.9.15).

      Рис. 9.2.15 Применение блока Display для отображения векторных, матричных и комплексных сигналов.

      9.2.5. Блок остановки моделирования Stop Simulation

      Обеспечивает завершение расчета, если входной сигнал блока становится не равным нулю.

      При подаче на вход блока ненулевого сигнала Simulink выполняет текущий шаг расчета, а затем останавливает моделирование. Если на вход блока подан векторный сигнал, то для остановки расчета достаточно, чтобы один элемент вектора стал ненулевым. На рис. 2.9.16 показан пример использования данного блока. В примере остановка расчета происходит, если выходной сигнал блока Transfer Function становится большим или равным 0.99.

      Рис. 9.2.16. Применение блока Stop Simulation

      9.2.6. Блок сохранения данных в файле То File

      Блок записывает данные, поступающие на его вход, в файл.

      Данные в файле сохраняются в виде матрицы:

      Значения времени записываются в первой строке матрицы, а в остальных строках будут находиться значения сигналов, соответствующих данным моментам времени.

      Файл данных (mat-файл), в который записываются данные, не является текстовым. Структура файла подробно описана в справочной системе MATLAB. Пользователям Simulink удобнее всего считывать данные из mat-файла с помощью блока From File (библиотека Sources).

      На рис. 9.2.17 показан пример использования данного блока. Результаты расчета сохраняются в файле result.mat.

      Рис. 9.2.17. Применение блока To File

      9.2.7. Блок сохранения данных в рабочей области То Workspace

      Блок записывает данные, поступающие на его вход, в рабочую область MATLAB.

      1. Matrix – матрица. Данные сохраняются как массив, в котором число строк определяется числом расчетных точек по времени, а число столбцов – размерностью вектора подаваемого на вход блока. Если на вход подается скалярный сигнал, то матрица будет содержать лишь один столбец.
      2. Structure – структура. Данные сохраняются в виде структуры, имеющей три поля: time – время, signals – сохраняемые значения сигналов, blockName – имя модели и блока To Workspace. Поле time для данного формата остается не заполненным.
      3. Structure with Time – структура с дополнительным полем (время). Для данного формата, в отличие от предыдущего, поле time заполняется значениями времени.

      На рис. 9.2.18 показан пример использования данного блока. Результаты расчета сохраняются в переменной simout.

      Для считывания данных сохраненных в рабочей области MATLAB можно использовать блок From Workspace (библиотека Sources).

      Рис. 9.2.18. Применение блока To Workspace

      9.2.8. Концевой приемник Terminator

      Блок используется для подачи сигнала с неиспользуемого выхода другого блока.

      Рис. 9.2.19. Применение блока Terminator

      9.2.9. Блок выходного порта Outport

      Создает выходной порт для подсистемы или для модели верхнего уровня иерархии.

      1. held – выходной сигнал подсистемы равен последнему рассчитанному значению.
      2. reset – – выходной сигнал подсистемы равен значению задаваемому параметром Initial output.

      9.2.9.1. Использование блока Outport в подсистемах

      Блоки Outport подсистемы являются ее выходами. Сигнал, подаваемый в блок Outport внутри подсистемы, передается в модель (или подсистему) верхнего уровня. Название выходного порта будет показано на изображении подсистемы как метка порта.

      На рис. 9.2.19 показана модель, использующая подсистему и схема этой подсистемы.

      Рис. 9.2.19. Использование блока Outport в подсистеме

      В том случае, если подсистема является управляемой, то для ее выходных портов можно задать вид выходного сигнала для тех временных интервалов, когда подсистема заблокирована. На рис. 9.2.20 показана модель, использующая управляемую подсистему (схема подсистемы такая же, как и в предыдущем примере). Для первого выходного порта подсистемы параметр Output when disabled задан как held, а для второго – как reset, причем величина начального значения задана равной нулю. Графики сигналов показывают, что когда подсистема заблокирована, сигнал первого выходного порта остается неизменным, а сигнал второго становится равным заданному начальному значению (нулю).

      Рис. 9.2.20. Управляемая подсистема с различными настройками выходных портов.

      9.2.9.2. Использование блока Outport в модели верхнего уровня

      Выходной порт в системе верхнего уровня используется в двух случаях:

        1. Для передачи сигнала в рабочее пространство MATLAB.
        2. Для обеспечения связи функций анализа с выходами модели.

        Для передачи сигнала в рабочее пространство MATLAB требуется не только установить в модели выходные порты, но и выполнить установку параметров вывода на вкладке Workspace I/O окна диалога Simulation parameters… (должен быть установлен флажок для параметра Output и задано имя переменной для сохранения данных). Тип сохраняемых данных - Array массив, Structure (структура) или Structure with time (структура с полем “время”) задается на этой же вкладке.

        На рис. 9.2.21 показана модель, передающая сигналы в рабочее пространство MATLAB.

        Рис. 9.2.21. Модель, передающая сигналы в рабочее пространство MATLAB с помощью блоков Outport.

        Блок Outport может использоваться также для связи модели с функциями анализа, например: linmod или trim.

        Одним из самых простых способов сохранения вычисленных значений является сохранение рабочей среды (всех переменных) с помощью команды File - Save Workspace As … . При этом открывается диалоговое окно, в котором необходимо указать папку и имя сохраняемого файла. Файл рабочей среды имеет расширение mat . После выполнения этой команды все переменные и значения рабочей среды будут храниться в одном файле с расширением mat . Для загрузки рабочей среды необходимо выполнить команды File - Open .

        Кроме сохранения переменных в файле рабочей среды в Matlab есть есть возможности работы с текстовым файлом, как и в языке программирования Си.

        Для записи данных в текстовый файл необходимо выполнить следующие действия:

        2. Записать данные в файл с помощью функции printf . Обращение к функции printf имеет следующий вид: printf ( F , s 1, s 2), где F – имя файловой переменной, s 1 – строка вывода, s 2 – список выводимых переменных. В строке вывода могут использоваться некоторые специальные символы:

        o \ b – сдвиг текущей позиции влево;

        o \ n – перевод строки;

        o \ t – горизонтальная табуляция.

        В строке вывода вместо выводимых переменных указывается строка преобразования следующего вида: % n . m , где n – ширина поля вывода; если позиций недостаточно, то поле вывода расширяется до минимального необходимого, незаполненные позиции заполняются пробелами; m – количество знаков после десятичной точки. В качестве типа могут использоваться следующие латинские буквы: c – символ, d – целое десятичное число, o – целое восьмеричное число, x – целое шестнадцатеричное число, f – вещественное число вида [+] dddd . dddd , e – вещественное число в экспоненциальной форме вида + d . dddde [+] ddd , g – вещественное число вида e или f в зависимости от значения и точности, s – строка символов.

        3. Закрыть файл с помощью функции fclose ( F ), F .

        Для чтения данных из файла необходимо:

        1. Открыть файл с помощью функции fopen .

        2. Считать данные из файла с помощью функции fscanf . Обращение к функции fscanf имеет вид: A = fscanf ( F , s 1). В переменную А считываются данные из файла в соответствии со строкой s 1.

        3. Закрыть файл (функция fclose ) .

        Рассмотрим пример записи в файл значений: x = p /7 и y = cos ( x ).

        На рисунке ниже представлено вычисление x и y и запись их в текстовый файл abc . txt .


        Содержимое текстового файла abc . txt :


        Теперь рассмотрим два способа чтения данных из файла abc . txt . На рисунке представлено чтение содержимого файла abc . txt в переменную h .


        На следующем рисунке показан пример чтения содержимого файла abc . txt в переменную p и s :

        Создание графиков в Matlab

        Для быстрого ознакомления с графикой в Matlab рекомендую ознакомиться со статьей выше.

        Чтобы автоматизировать большинство нужных операций для создания красивых графиков, можно внести изменения в файл startup.m (в папке MatlabFolder/toolbox/local). Этот файл содержит пользовательские настройки, которые подключаются при запуске Matlab.

        Для редактирования файла startup.m можно в консоли Matlab набрать команду:

        В файле startup.m я использую следующие настройки:

        Все параметры по умолчанию, которые можно изменить в файле startup.m можно посмотреть, выполнив в консоли Matlab команду

        Пример кода Matlab для создания графика

        Заметки про Matlab. Экспорт графиков.

        Для создания легенды рекомендую использовать сразу в команде plot (и других подобных) ключ DisplayName. Ключ FileName нужен для того, чтобы сразу задать имя файла, в который будет сохранен рисунок.

        Экспорт графиков из Matlab

        Родная для Matlab схема экспорта графики

        До этого момента работа с графиками в Matlab укладывалась в следующую схему:

        Заметки про Matlab. Экспорт графиков.

        Как видно, на этом этапе начинаются основные трудности.

        Новая схема: используем Matlab+PowerPoint с помощью Smart PowerPoint Exporter

        Цель: получить векторный рисунок графика Matlab при этом избежать всех сложностей с неказистым и неудобным редактором графики в Matlab.

        Средства: Matlab (для производства графика), PowePoint 2010 (для хранения векторной графики), Smart PowerPoint Exporter (для экспорта фигуры из Matlab в PowerPoint).

        Итак, для начала надо установить Smart PowerPoint Exporter в Matlab.

        Устанавливаем Smart PowerPoint Exporter по умолчанию для любой новой фигуры командой:

        Читайте также: