Пятница, 2025-06-20, 11:56 PM
Приветствую Вас Гость | RSS
Главная | Урок 10 | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Урок 10 — М-файлы в Матлаб. M-file Matlab

     

     

    1. Работа в редакторе М-файлов

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

    Раскройте меню File основного окна MatLab и в пункте Newвыберите подпункт M-file. Новый файл открывается в окне редактора М-файлов.

    Наберите в редакторе команды, приводящие к построению двух графиков в одном графическом окне:

    x = [0:0.1:7];
    f = exp(-x);
    subplot(1, 2, 1)
    plot(x, f)
    g = sin(x);
    subplot(1, 2, 2)
    plot(x, g)

    Сохраните теперь файл с именем  mydemo.m  в подкаталоге work основного каталога MatLab, выбрав пункт Save as меню File редактора. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт  Run  в меню  Debug. На экране появится графическое окно  Figure No.1, содержащее графики функций. Если Вы решили построить график косинуса вместо синуса, то просто измените строку  g = sin(x) в М-файле на g = cos(x) и запустите все команды снова.

    Замечание 1

    Если при наборе сделана ошибка и MatLab не может распознать команду, то происходит выполнение команд до неправильно введенной, после чего выводится сообщение об ошибке в командное окно.

    Очень удобной возможностью, предоставляемой редактором М-файлов, являетсявыполнение части команд. Закройте графическое окно Figure No.1. Выделите при помощи мыши, удерживая левую кнопку, или клавишами со стрелками при нажатой клавише <Shift>, первые четыре команды программы и выполните их из пунктаEvaluate Selection меню TextОбратите внимание, что в графическое окно вывелся только один график, соответствующий выполненным командам. Запомните, что для выполнения части команд их следует выделить и нажать <F9>. Выполните оставшиеся три команды программы и проследите за состоянием графического окна. Потренируйтесь самостоятельно, наберите какие-либо примеры из предыдущих лабораторных работ в редакторе М-файлов и запустите их.

    Отдельные блоки М-файла можно снабжать комментариями, которые пропускаются при выполнении, но удобны при работе с М-файлом. Комментарии в MatLab начинаются со знака процента и автоматически выделяются зеленым цветом, например:

    %построение графика sin(x) в отдельном окне

    В редакторе М-файлов может быть одновременно открыто несколько файлов. Переход между файлами осуществляется при помощи закладок с именами файлов, расположенных внизу окна редактора.

    Открытие существующего М-файла производится при помощи пункта Open менюFile рабочей среды, либо редактора М-файлов. Открыть файл в редакторе можно и командой MatLab  edit  из командной строки, указав в качестве аргумента имя файла, например:

    » edit mydemo

    Команда edit без аргумента приводит к созданию нового файла. 
    Все примеры, которые встречаются в этой и следующих лабораторных работах, лучше всего набирать и сохранять в М-файлах, дополняя их комментариями, и выполнять из редактора М-файлов. Применение численных методов и программирование в MatLab требует создания М-файлов.

    2. Типы М-файлов

    М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files), содержащие последовательность команд, и файл-функции (Function M-Files), в которых описываются функции, определяемые пользователем.

    Файл-программу (файл-процедуру) Вы создали при прочтении предыдущего подраздела. Все переменные, объявленные в файл-программе, становятся доступными в рабочей среде после ее выполнения. Выполните в редакторе М?файлов файл-программу, приведенную в подразделе 2.1, и наберите команду whos в командной строке для просмотра содержимого рабочей среды. В командном окне появится описание переменных:

    » whos 
    Name  Size      Bytes  Class 
    f     1x71      568   double array 
    g     1x71      568   double array 
    x     1x71      568   double array 
    Grand total   is 213 elements using 1704 bytes

    Переменные, определенные в одной файле-программе, можно использовать в других файл-программах и в командах, выполняемых из командной строки. Выполнение команд, содержащихся в файл-программе, осуществляется двумя способами:

    • Из редактора М-файлов так, как описано выше.
    • Из командной строки или другой файл-программы, при этом в качестве команды используется имя М-файла.

    Применение второго способа намного удобнее, особенно, если созданная файл-программа будет неоднократно использоваться впоследствии. Фактически, созданный М-файл становится командой, которую понимает MatLab. Закройте все графические окна и наберите в командной строке mydemo, появляется графическое окно, соответствующее командам файл-программы mydemo.m. После ввода команды mydemo MatLab производит следующие действия.

    • Проверяет, является ли введенная команда именем какой-либо из переменных, определенных в рабочей среде. Если введена переменная, то выводится ее значение.
    • Если введена не переменная, то MatLab ищет введенную команду среди встроенных функций. Если команда оказывается встроенной функцией, то происходит ее выполнение.

    Если введена не переменная и не встроенная функция, то MatLab начинает поиск М-файла с названием команды и расширением m. Поиск начинается с текущего каталога (Current Directory), если М-файл в нем не найден, то MatLab просматривает каталоги, установленные в пути поиска (Path). Найденный М-файл выполняется в MatLab.

    Если ни одно из вышеперечисленных действий не привело к успеху, то выводится сообщение в командное окно, например:

    » mydem 
    ??? Undefined function or variable 'mydem'.

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

    Замечание 2

    Хранить собственные М-файлы вне основного каталога MatLab следует по двум причинам. Во-первых, при переустановке MatLab файлы, которые содержатся в подкаталогах основного каталога MatLab, могут быть уничтожены. Во-вторых, при запуске MatLab все файлы подкаталога toolbox размещаются в памяти компьютера некоторым оптимальным образом так, чтобы увеличить производительность работы. Если вы записали М-файл в этот каталог, то воспользоваться им можно будет только после перезапуска MatLab.

    3. Установка путей

    В MatLab версий 6.x определяется текущий каталог и пути поиска. Установка этих свойств производится либо при помощи соответствующих диалоговых окон либо командами из командной строки.

    Текущий каталог определяется в диалоговом окне Current Directory рабочей среды. Окно присутствует в рабочей среде, если выбран пункт Current Directory менюView рабочей среды.
    Текущий каталог выбирается из списка. Если его нет в списке, то его можно добавить из диалогового окна Browse for Folder, вызываемого нажатием на кнопку, расположенную справа от списка. Содержимое текущего каталога отображается в таблице файлов.

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

    Для добавления каталога нажмите кнопку Add Folder и в появившемся диалоговом окне Browse for Path выберите требуемый каталог. Добавление каталога со всеми его подкаталогами осуществляется при нажатии на кнопку Add  with  Subfolders. Путь к добавленному каталогу появляется в поле MATLAB search path. Порядок поиска соответствует расположению путей в этом поле, первым просматривается каталог, путь к которому размещен вверху списка. Порядок поиска можно изменить или вообще удалить путь к какому-либо каталогу, для чего выделите каталог в поле MATLAB search path  и определите его положение при помощи следующих кнопок: 
    Move to Top - поместить вверх списка; 
    Move Up - переместить вверх на одну позицию; 
    Remove - удалить из списка; 
    Move Down - переместить вниз на одну позицию; 
    Move to Bottom - поместить вниз списка.

    После внесения изменений следует сохранить информацию о путях поиска, нажав кнопку Save. При помощи кнопки Default можно восстановить стандартные установки, a Revert предназначена для возврата к сохраненным.

    4. Команды для установки путей.

    Действия по установке путей в MatLab 6.x дублируются командами. Текущий каталог устанавливается командой cd, например cd c:\users\igor. Команда cd, вызванная без аргумента, выводит путь к текущему каталогу. Для установки путей служит команда path, вызываемая с двумя аргументами:

    path (path, 'c:\users\igor') - добавляет каталог c:\users\igor с низшим приоритетом поиска; 
    path ('с: \users\igor',path) - добавляет каталог c:\users\igor с высшим приоритетом поиска.

    Использование команды path без аргументов приводит к отображению на экране списка путей поиска. Удалить путь из списка можно при помощи команды rmpath:

    rmpath ('с:\users\igor') удаляет путь к каталогу c:\users\igor из списка путей.

     Замечание 3

    Не удаляйте без необходимости пути к каталогам, особенно к тем, в назначении которых вы не уверены. Удаление может привести к тому, что часть функций, определенных в MatLab, станет недоступной.

    Пример. Создайте в корневом каталоге диска D  (или любом другом диске или каталоге, где студентам разрешено создавать свои каталоги) каталог со своей фамилией, например, WORK_IVANOV, и запишите туда М-файл  mydemo.m  под именем mydemo3.m. Установите пути к файлу и продемонстрируйте доступность файла из командной строки. Результаты приведите в отчете по лабораторной работе.

    Вариант решения:

    1. В корневом каталоге диска Dсоздается каталог WORK_IVANOV. 
    2. В каталог WORK_IVANOV записывается М-файл  mydemo.m  под именем mydemo3.m. 
    3. Открывается диалоговое окно Set Path меню File рабочей среды MatLab.
    4. Нажимается кнопка Add Folder и в появившемся диалоговом окне Browse forPath выбирается каталог WORK_IVANOV. 
    5. Добавление каталога со всеми его подкаталогами осуществляется при нажатии на кнопку Add with Subfolders. Путь к добавленному каталогу появляется в полеMATLAB search path. 
    6. Для запоминания пути нажимается клавиша Save диалогового окна Set Path.
    7. Выполняется проверка правильности всех действий путем набора команды mydemo3 из командной строки. На экране появится графическое окно.

    5. Файл-функции

    Рассмотренные выше файл-программы являются последовательностью команд MatLab, они не имеют входных и выходных аргументов. Для использования численных методов и при программировании собственных приложений в MatLab необходимо уметь составлять файл-функции, которые производят необходимые действия с входными аргументами и возвращают результат в выходных аргументах. В этом подразделе разобрано несколько простых примеров, позволяющих понять работу с файл-функциями. Файл-функции, так же как и файл-процедуры, создаются в редакторе М-файлов.

    5.1. Файл-функции с одним входным аргументом

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

    .

    Имеет смысл один раз написать файл-функцию, а потом вызывать её всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст листинга

    function f = myfun(x) 
    f= ехр(-х)*sqrt((х^2+1)/(х^4+0.1));

    Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном в листинге, имя функции myfun, один входной аргумент х и один выходной - f. После заголовка следует тело функции (оно в данном примере состоит из одной строки), где и вычисляется ее значение. Важно, что вычисленное значение записывается в f. Точка с запятой поставлена для предотвращения вывода лишней информации на экран.

    Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пунктаSave или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержится название myfun. He изменяйте его, сохраните файл-функцию в файле с предложенным именем.

    Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например из командной строки:

    » у =myfun(1.3) 
    У = 
    0.2600

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

    Предупреждение

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

    Файл-функция, приведенная в листинге, имеет один существенный недостаток. Попытка вычисления значений функции от массива приводит к ошибке, а не к массиву значений, как это происходит при вычислении встроенных функций.

    » х = [1.3 7.2]; 
    » у = myfun(x) 
    ??? Error using ==> ^ 
    Matrix must be square. 
    Error in ==> C:\MATLABRll\work\myfun.m 
    On line 2 ==> f = exp(-x)*sqrt((х^2+1)/(х^4+1));

    Если вы изучили работу с массивами, то устранение этого недостатка не вызовет затруднений. Необходимо просто при вычислении значения функции использовать поэлементные операции. 
    Измените тело функции, как указано в следующем листинге (не забудьте сохранить изменения в файле myfun.m).

    function f = myfun(x) 
    f = ехр(-х).*sqrt((х.^2+1)./(х.^4+0.1));

    Теперь аргументом функции myfun может быть как число, так и вектор или матрица значений, например:

    » х = [1.3 7.2]; 
    » у = myfun(x) 
    У = 
    0.2600   0.0001

    Переменная у, в которую записывается результат вызова функции myfun, автоматически становится вектором нужного размера.

    Постройте график функции myfun на отрезке [0, 4] из командной строки или при помощи файл-программы:

    x = [0:0.5:4]; 
    у = myfun(x); 
    plot(x, у)

    MatLab предоставляет еще одну возможность работы с файл-функциями - использование их в качестве аргументов некоторых команд. Например, для построения графика служит специальная функция fplot, заменяющая последовательность команд, приведенную выше. При вызове fplot имя функции, график которой требуется построить, заключается в апострофы, пределы построения указываются в вектор-строке из двух элементов

    fplot('myfun', [0  4])

    Постройте графики myfun при помощи plot и fplot на одних осях, при помощи hold on. Обратите внимание, что график, построенный при помощи fplot, более точно отражает поведение функции, т. к. fplot сама подбирает шаг аргумента, уменьшая его на участках быстрого изменения отображаемой функции. Результаты приведите в отчете по лабораторной работе.

    5.2. Файл-функции с несколькими входными аргументами

    Написание файл-функций с несколькими входными аргументами практически не отличается от случая с одним аргументом. Все входные аргументы размещаются в списке через запятую. Например, следующий листинг содержит файл-функцию, вычисляющую длину радиус-вектора точки трехмерного пространства 
    Листинг файл-функции с несколькими аргументами

    function r = radius3(x, у, z) 
    r = sqrt(х.^2 + у.^2 + z.^2);

    Для вычисления длины радиус-вектора теперь можно использовать функцию radius3, например:

    » R = radius3(1, 1, 1) 
    R = 
    1.732

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

    5.3. Файл-функции с несколькими выходными аргументами

    Файл-функции с несколькими выходными аргументами удобны при вычислении функций, возвращающих несколько значений (в математике они называютсявектор-функциями)Выходные аргументы добавляются через запятую в список выходных аргументов, а сам список заключается в квадратные скобки. Хорошим примером является функция, переводящая время, заданное в секундах, в часы, минуты и секунды. Данная файл-функция приведена в следующем листинге.

    Листинг функции перевода секунд в часы, минуты и секунды

    function [hour, minute, second] = hms(sec) 
    hour = floor(sec/3600); 
    minute = floor((sec-hour*3600)/60); 
    second = sec-hour*3600-minute*60;

    При вызове файл-функций с несколькими выходными аргументами результат следует записывать в вектор соответствующей длины:

    » [Н, М, S] = hms(10000) 
    H = 

    М = 
    46 
    S = 
    40

     

    uCozCopyright MyCorp © 2025