Учебное пособие для студентов высших учебных заведений
Скачать 5.41 Mb.
|
» help f1, и в командном окне появится Процедура, которая вычисляет значение функции y = (d3)*ctg(x)*sqrt(sin(x)4-cos(x)4). Обращение y = F1(x,d). Другой пример. Построим график двух функций: y1 = 200 sin(x)/x; y2 = x2. Для этого создадим М-файл, который вычисляет значения этих функций: function y = myfun(x) % Вычисление двух функций % y(1) = 200 sin(x)/x, y(2) = x2. y(:,1) = 200*sin(x) . / x; y(:,2) = x . 2; Теперь построим графіки этих функций: » fplot('myfun', [-20 20], 50, 2), grid » set(gcf,'color','white'); title('Графік функции "MYFUN"') Результат изображен на рис. 2.1. 2.3. Создание файл-функций 101 -20 -15 -10 -5 0 5 10 15 20 -50 0 50 100 150 200 250 300 350 400 Графік функції "MYFUN" Рис. 2.1 Третий пример - создание файл-функции, вычисляющей значения функции y(t) = k1+k2*t+k3*sin(k4*t+k5). В этом случае удобно объединить совокупность коэффициентов k в единый вектор К: К = [k1 k2 k3 k4 k5] и создать такой М-файл: function y = dvob(x, K) % Вычисление функции % y = K(1)+K(2)*x+K(3)*sin(K(4)*x+K(5)), % где К - вектор из пяты элементов % Используется для определения текущих значений % параметров движения подвижного объекта y = K(1)+K(2)*x+K(3)*sin(K(4)*x+K(5)); Тогда расчет, например, 11-ти значений этой функции можно осуществить так » K = ones(1,5); » t = 0:1:10; » fi = dvob(t, K) fi = 1. 8415 2. 9093 3. 1411 3. 2432 4. 0411 5. 7206 7. 6570 8. 9894 9. 4560 10. 0000 2.3.2. Типовое оформление процедуры-функции Рекомендуется оформлять М-файл процедуры-функции по такой схеме: function [<Выход>] = <имя функции>(<Вход>) % <Краткое пояснение назначения процедуры> % Входные переменные %<Детальное пояснение о назначении, типе и размерах % каждой из переменных, перечисленных в перечне <Вход> % Выходные переменные % <Детальное пояснение о назначении, типе и размерах % каждой из переменных перечня <Выход> % и величин, используемых в процедуре как глобальные> % Использование других функций и процедур % <Раздел заполняется, если процедура содержит обращение % к другим процедурам, кроме встроенных> 2.3. Создание файл-функций 102 < П у с т а я с т р о к а > % Автор : <Указывается автор процедуры, дата создания конечного варианта % процедуры и организация, в которой созданная программа> < Т е к с т и с п о л н я е м о й ч а с т и п р о ц е д у р ы > Здесь обозначен: <Выход> - перечень выходных переменных процедуры, <Вход> - перечень входных переменных, разделенных запятыми. Примечание. При использовании команды help <имя процедуры> в ко- мандное окно выводятся строки комментария до первой пустой строки. 2.3.3. Задания Задание 2.1. Создайте М-файл, вычисляющий значение функции из задания 1.5. Постройте график этой функции с помощью процедуры fplot в границах, за- данных в задании 1.5. Вычислите интеграл от функции в тех же пределах, исполь- зуя процедуры quad и quad8. Найдите точку локального минимума и локальный минимум функции и ближайший корень (нуль). Задание 2.2. Найдите точку локального минимума и локальный минимум функции двух переменных, приняв за начальную точку с заданными координата- ми (таблица 2.1). Предварительно создайте соответствующую файл-функцию. Таблица 2.1 Вариант x o y o f(x,y) 1 0 1 e x y x x y y + + − − − ( ) 2 2 2 2 0.7 -1. 2 ( ) cos( x y x y − − − − 2 1) 3 1.5 -0. 5 e x y x y x y + − − − − − 2 2 1 cos( ) 4 0.5 1.5 e x x x y y + + − − 4 3 3 2 5 0 1 4 1 2 x x y x y + + + + ln( ) 6 1.2 0.7 2 2 2 2 2 x y x y x y + − − + − ( ) 7 0 -0. 9 e x y x x y y − + + + + 2 2 2 ( ) 8 0.8 1.3 ( ) cos( x y x y − − + − 2 1) 9 1.5 0.5 e x y x y x y − − + − + − 2 2 1 cos( ) 10 0.5 -1. 5 e x y x y x − − + + 3 3 4 2 11 0 -1 4 1 2 x x y x y + − + − ln( ) 12 1.2 -0. 8 2 2 2 2 2 x y x y x y − − + + + ( ) 2.4. Создание Script-файлов 103 2.3.4. Вопросы 1. Для чего создаются программы в среде MatLAB? 2. Чем отличаются файл-функции от Script-файлов? Какова сфера применения каждого из этих видов файлов? 3. Что понимается под понятием "функция функций"? Какие наиболее употребительные стандартные функции функций есть в MatLAB? 4. Как создать М-файл процедуры или функции? 5. Какие основные правила написания текстов М-файлов в языке MatLAB? 2.4. Создание Script-файлов 2.4.1. Основные особенности Script-файлов Как уже было отмечено, основные особенности Script-файлов таковы: Script-файлы являются независимо (самостоятельно) исполняемыми бло- ками операторов и команд; все используемые переменные образуют так называемое рабочее про- странство, которое является общим для всех исполняемых Script-файлов; из это- го следует, что при выполнении нескольких Script-файлов имена переменных в них должны быть согласованы, так как одно имя означает в каждом из них один и тот же объект вычислений; в них отсутствует заголовок, т. е. первая строка определенного вида и на- значения; обращение к ним не требует указания никаких имен переменных: все пе- ременные формируются в результате выполнения программы либо сформированы ранее и существуют в рабочем пространстве. Необходимо отметить, что рабочее пространство Script-файлов недоступ- но для файлов-функций, которые используются в нем. В файлах-функциях невоз- можно использовать значения, которые приобретают переменные в Script-файле, обходя заголовок файл-функции (так как все переменные файл-функции являются локальными). Единственной возможностью сделать так, чтобы внутри файл- функции некоторая переменная рабочего пространства могла сохранить свое зна- чение и имя, является специальное объявление этой переменной в Script-файле как глобальной с помощью служебного слова global. Кроме того, аналогичная за- пись должна содержаться и в тексте М-файла той файл-функции, которая будет использовать значение соответствующей переменной Script-файла. Например, можно перестроить файл-функции первого и третьего примеров из предыдущего раздела, вводя коэффициенты соответствующих функций как глобальные переменные: function y = dvob1(x) % Вычисление функции % y = K(1)+K(2)*x+K(3)*sin(K(4)*x+K(5)), % где К - глобальный вектор из пяти элементов % Применяется для определения текущих значений % параметров движения подвижного объекта 2.4. Создание Script-файлов 104 global K y = K(1)+K(2)*x+K(3)*sin(K(4)*x+K(5)); Чтобы использовать новую файл-функцию dvob1 в Script-файле, в послед- нем до обращения к этой функции должна быть записана строка global K и определен вектор-строка К из пяти элементов (заданы их значения). Если в одной строке объявляются несколько переменных как глобальные, они должны отделяться пробелами (не запятыми!). 2.4.2. Ввод и вывод информации в диалоговом режиме Для обеспечения взаимодействия с пользователем в процессе выполнения М-файла в системе MatLAB используются такие команды: disp, sprintf, input, menu, keyboard, pause. Команда disp осуществляет вывод значений указанной переменной или ука- занного текста в командное окно. Обращение к ней имеет вид: disp (<переменная или текст в апострофах>). Особенностью этой команды является то, что аргумент у нее может быть только один. Поэтому невозможно без специальных мер осуществить вывод не- скольких переменных и, в особенности, объединение текста с численными значе- ниями некоторых переменных, что часто необходимо для удобного представления информации. Для устранения этого недостатка используют несколько способов. Чтобы вывести значения нескольких переменных в одну строку (например, при создании таблиц данных), нужно создать единый объект, который содержал бы все эти значения. Это можно сделать, объединив соответствующие перемен- ные в вектор, пользуясь операцией создания вектора-строки: x = [x1 x2 ... x]. Тогда вывод значений нескольких переменных в одну строку будет иметь вид: disp ([x1 x2 ... x]). Приведем пример: » x1=1.24; x2=-3. 45; x3=5.76; x4=-8. 07; » disp([x1 x2 x3 x4]) 1. 2400 -3. 4500 5. 7600 -8. 0700. Аналогично можно объединять несколько текстовых переменных, напри- мер: » x1=' psi '; x2=' fi '; x3=' teta '; x4=' w1 '; » disp([x1 x2 x3 x4]) psi fi teta w1 Гораздо сложнее объединить в одну строку текст и значение переменных, что часто бывает необходимо. Трудности возникают потому, что нельзя объеди- нять текстовые и числовые переменные, так как они являются данными разных типов. Одним из путей преодоления этого препятствия есть перевод числового значения переменной в символьную (текстовую) форму. Это возможно, если вос- 2.4. Создание Script-файлов 105 пользоваться функцией num2str, которая осуществляет такое преобразование. За- пись: y = num2str(x) превратит числовое значение переменной "х" в текстовое представление. При этом форма представления определяется установленным режимом вывода чисел на экран (Numeric Format), например: » x = -9. 30876e-15 x = -9. 3088e-015 » y = num2str(x) y = -9. 309e-015 Если Т - текстовая переменная, или некоторый текст, а Х - числовая переменная, то вывод их в одной строке можно обеспечить обращениям disp ([T num2str(X)]). Рассмотрим пример: x = -9. 3088e-015 » T = 'Значение параметра равняется '; » disp([T x]) Значение параметра равняется » disp([T num2str(x)]) Значение параметра равняется -9. 309e-015 Как следует из этого примера, "механическое" объединение текстовой и чи- словой переменных не приводит к желаемому результату. Другим средством достижения того же результата есть использование функции sprintf. Обращение к ней имеет вид: Y = sprintf (‘<текст1> %g <текст2>’, X). В результате получается текстовая строка Y, состоящая из текста, указанно- го в <текст1>, и значения числовой переменной Х в соответствия с форматом %g, причем текст из фрагмента <текст2> располагается после значения переменной Х. Эту функцию можно использовать в команде disp в виде: disp (sprintf (‘<текст> %g', X) ). Пример: » disp(sprintf('Параметр1 = %g ',x)) Параметр1 = -9. 30876e-015 Ввод информации с клавиатуры в диалоговом режиме можно осуществить с помощью функции input. Обращение к ней вида: x = input(‘<приглашение>’) приводит к следующим действиям ПК. Выполнение операторов программы пре- кращается. ПК переходит в режим ожидания окончания ввода информации с кла- виатуры. После окончания ввода с клавиатуры (которое определяется нажатием клавиши Удобным инструментом выбора некоторой из альтернатив будущих вычис- лительных действий является функция menu MatLAB, которая создает текущее окно меню пользователя. Функция menu имеет такой формат обращения: k=menu(‘Заголовок меню','Альтернатива1','Альтернатива2',..., 'Альтернатива n'). 2.4. Создание Script-файлов 106 Такое обращение приводит к появлению на экране меню, изображенного на рис. 2.2. Выполнение программы временно приостанавливается, и система ожида- ет выбора одной из кнопок меню с альтернативами. После правильного ответа ис- ходному параметру "k" присваивается значение номера избранной альтернативы (1, 2 , …, n). В общем случае число альтернатив может быть до 32. Теперь, в зависимости от полученного значения этого параметра, можно по- строить процесс разветвления вычислений, например, выбора параметра, значение которого нужно изменить. Команда pause временно прекращает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу клавиатуры. Если после названия команды указать в скобках некоторое положительное целое число n, то задержка выполнения программы будет осуществлена на протяжении n секунд. Если в тексте М-файла встречается команда keyboard, то при выполнении программы выполнение М-файла прекращается, и управление передается клавиа- туре. Этот специальный режим работы сопровождается появлением в командном окне MatLAB нового вида приглашения к действиям k>>. В этом режиме пользователь может осуществить любые действия, прове- рить или изменить данные. При этом ему доступны все команды и процедуры системы MatLAB. Для завершения работы в этом режиме необходимо ввести ко- манду return. Тогда система продолжит роботу программы с оператора, следую- щего за командой keyboard. Рис. 2.2 Рис. 2.3 2.4.3. Организация повторения действий Одной из главных задач создания самостоятельной программы есть обеспе- чение возвращения к началу программы с целью продолжения ее выполнения при новых значениях исходных данных. Пусть основные операторы созданной программы расположены в Script- файле с именем "ScrFil_yadro. m". Тогда схема обеспечения возврата к началу вы- полнения этого Script-файла может быть, например, такой: flag =0; while flag == 0 ScrFil_yadro kon=0; kon=input('Закончить работу-<3>, продолжить - 2.4. Создание Script-файлов 107 if kon==3, flag=3; end end В этом случае Script-файл "ScrFil_yadro" будет повторно выполняться до тех пор, пока на вопрос 'Закончить работу-<3>, продолжить - не будет введен из клавиатуры ответ "3". Если же ответ будет именно таким, цикл закончится и будут выполняться следующие за этим циклом операторы. Естественно, что пере- менная flag не должна изменять свое значение в Script-файле "ScrFil_yadro". Можно также с той же целью использовать механизм создания меню. В этом случае программу можно представить, к примеру, так: k=1; while k==1 ScrFile_Yadro k = menu(' Что делать ? ',' Продолжить роботу ', ' Закончить работу '); end Тогда, после первого выполнения Script-файла "ScrFil_Yadro" на экране появится окно меню, изображенное на рис. 2.3, и, при нажатии кнопки первой альтернативы значение k останется равным единице, цикл повторится, а при на- жатии второй кнопки k станет равным 2, цикл закончится и программа перейдет к окончанию работы. 2.4.4. Организация изменения данных в диалоговом режиме Повторение действий, содержащихся в ядре "ScrFil_yadro", имеет смысл только в том случае, когда в начале этого ядра обеспечено выполнение действий по изменению некоторых из исходных величин. MatLAB содержит ряд удобных средств, позволяющих осуществлять изменение данных в диалоговом режиме с использованием стандартных меню-окон пользователя. Организацию диалогового изменения данных рассмотрим на примере неко- торых 5 параметров, которые назовем Параметр1, Параметр2, ... , Параметр5. Пусть их обозначения как переменных в программе таковы: х1, х2, ... , х5. Тогда меню выбора параметра для изменения его значения должно содержать 6 альтер- натив: 5 из них предназначены для выбора одного из указанных параметров, а по- следняя должна предоставить возможность выхода из меню, если значение всех параметров установлены. Поэтому вариант оформления такого меню может быть, например, сле- дующим: k = menu( ‘ Що змінити ? ', ' Параметр1 ', ' Параметр2 ', ... ‘ Параметр3 ’, ‘ Параметр4 ’, ‘ Параметр5 ’,‘ Ничого не змінювати ’), что приведет к появлению окна, представленного на рис. 2.4. Легко заметить недостаток такого оформления окна меню. Чтобы принять решение, значение какого именно параметра следует изменить и как, пользова- тель должен иметь перед глазами не только перечень параметров, которые можно 2.4. Создание Script-файлов 108 изменить, но и текущие значения этих параметров. Поэтому на каждой кнопке меню должна размещаться также информация о текущем значении соответст- вующего параметра. Это можно сделать, используя ранее упомянутую функцию sprintf, например, таким образом: x1=-1.89; x2=239.78; x3=-2.56e-3; x4=7.28e-15; x5=1.023e-32; 3>3> |