Учебное пособие для студентов высших учебных заведений
Скачать 5.41 Mb.
|
k = menu( ' Що змінювати ? ', ... sprintf (' Параметр1 x1 = %g', x1),... sprintf (' Параметр2 x2 = %g', x2),... sprintf (' Параметр3 x3 = %g', x3),... sprintf (' Параметр4 x4 = %g', x4),... sprintf (' Параметр5 x5 = %g', x5),... ' Нічого не змінювати ') Результат приведен на рис. 2.5. Рис. 2.4 Рис. 2.5 Меню позволяет выбрать параметр, который нужно изменить, однако не обеспечивает самого изменения выбранного параметра. Это изменение должно быть осуществлено с помощью ввода нового значения с клавиатуры, скажем, так: x = input( [sprintf ('Текущее значение x =%g',x), ‘Новое значение x = ‘]). Если ввести команды » x = 3.02e-2; » x=input( [sprintf('Текущее значение x = %g',x), ' Новое значение x = '] то в командном окне появится надпись: Текущее значение x = 0. 0302 Новое значение x = Выполнение программы приостановится. ПК будет ожидать ввода инфор- мации с клавиатуры. Если теперь набрать на клавиатуре "0.073" и нажать клави- шу Текущее значение x = 0. 0302 Новое значение x = 0. 073 x = 0. 0730 Чтобы предотвратить повторный вывод на экран введенного значения, не- обходимо строку с функцией input завершить символом “ ; ”. 2.4. Создание Script-файлов 109 Теперь следует организовать выбор разных видов такого типа операторов в соответствии с отдельными выбранными параметрами. Для этого можно использовать оператор условного перехода, например, так: if k==1, x1 = input( [sprintf( 'Текущее значение x1 = %g', x1) ... ' Новое значение x1= ']); elseif k==2, x2 = input( [sprintf('Текущее значение x2 = %g', x2) ... ' Новое значение x2= ']); elseif k==3, x3 = input( [sprintf('Текущее значение x3 = %g', x3) ... ' Новое значение x3= ']); elseif k==4 x4 = input( [sprintf('Текущее значение x4 = %g', x4) ... ' Новое значение x4= ']); elseif k==5 x5 = input( [sprintf('Текущее значение x5 = %g', x5) ... ' Новое значение x5= ']); end Чтобы можно было проконтролировать правильность ввода новых значе- ний, обеспечить возможность их корректировки и последовательного изменения всех желаемых параметров, нужно, чтобы после ввода нового значения любого параметра на экране снова возникало то же меню, но уже со скорректированными значениями. При этом конец работы с меню должен наступить только при усло- вии выбора последней альтернативы меню " Нічого не змінювати ", соответст- вующей значению k, равному 6. Поэтому предыдущие операторы следует заключить в цикл: k=1; while k<6 k = menu( ' Що змінювати ? ', ... sprintf (' Параметр1 x1 = %g', x1),... sprintf (' Параметр2 x2 = %g', x2),... sprintf (' Параметр3 x3 = %g', x3),... sprintf (' Параметр4 x4 = %g', x4),... sprintf (' Параметр5 x5 = %g', x5), ' Нічого не змінювати '); if k==1, x1 = input( [sprintf('Текущее значение x1 = %g', x1) ... ' Новое значение x1= ']); elseif k==2, x2 = input( [sprintf('Текущее значение x2 = %g', x2) ... ' Новое значение x2= ']); elseif k==3, x3 = input( [sprintf('Текущее значение x3 = %g', x3) ... ' Новое значение x3= ']); elseif k==4 x4 = input( [sprintf('Текущее значение x4 = %g', x4) ... ' Новое значение x4= ']); elseif k==5 x5 = input( [sprintf('Текущее значение x5 = %g', x5) ... ' Новое значение x5= ']); end end Так организуется возможность достаточно удобного изменения значений параметров в диалоговом режиме. 2.4. Создание Script-файлов 110 Если входных параметров, значение которых нужно изменять, довольно много, следует объединить их в компактные группы (желательно по какому-то общему свойству, отличающему определенную группу от других) и аналогичным образом обеспечить диалоговое изменение, используя отдельное меню для каж- дой группы. Очевидно, при этом необходимо предварительно обеспечить выбор одной из этих групп параметров через дополнительное меню. 2.4.5. Типовая структура и оформление Script-файла При написании текста программы в виде Script-файла необходимо прини- мать во внимание следующее. 1. Удобно оформлять весь процесс диалогового изменения параметров в ви- де отдельного Script-файла, к примеру, с именем "ScrFil_Menu", где под сокраще- нием "ScrFil" понимается имя основного (собирательного) Script-файла. 2. Так как уже в самом начале работы с программой в меню выбора изме- няемого параметра, должны сразу выводиться некоторые значения параметров, перед главным циклом программы, обеспечивающим возвращение к началу вы- числений, необходимо поместить часть программы, которая задает первоначаль- ные значения всех параметров. Кроме того, в начале работы программы очень удобно вывести на экран краткую информацию о назначении программы, более детальную информацию об исследуемой математической модели с указанием места в ней и содержания всех исходных параметров, а также исходные ("вши- тые") значения всех параметров этой модели. Это желательно также оформить в виде отдельного Script-файла, например, с именем "ScrFil_Zastavka". 3. При завершении работы программы обычно возникает потребность не- сколько упорядочить рабочее пространство, например, очистить его от введенных глобальных переменных (оставаясь в рабочем пространстве, они препятствуют корректной работе другой программы, которая может иметь другие глобальные переменные, или переменные с теми же именами, но иными по типу, смыслу и значениею), закрыть открытые программой графические окна (фигуры) и т.д. Эту завершающую часть тоже можно оформить как отдельный Script-файл, например, назвав его "ScrFil_Kin". В целом типовая схема оформления Script-файла отдельной программы мо- жет быть представлена в таком виде: % <Обозначение Script-файла (ScrFil.m)> % <Текст комментария с описанием назначения программы> 2.5. Графическое оформление результатов 111 < Пустая строка > % Автор < Фамилия И. О., дата создания, организация> ScrFil_Zastavka k = menu(' Що делать ? ','Продолжить работу ', ' Закончить работу '); if k==1, while k==1 ScrFil_Menu ScrFile_Yadro k = menu(' Что делать ? ',' Продолжить работу ', ' Закончить работу '); end end ScrFil_Kin 2.5. Графическое оформление результатов 2.5.1. Общие требования к представлению графической информации Вычислительная программа, создаваемая инженером-разработчиком, пред- назначена, в большинстве случаев, для исследования поведения разрабатываемого устройства при разных условиях его эксплуатации, при различных значениях его конструктивных параметров или для расчета определенных параметров его пове- дения. Информация, получаемая в результате выполнения вычислительной инже- нерной программы, как правило, имеет форму некоторого ряда чисел, каждое из которых отвечает определенному значению некоторого параметра (аргумента). Такую информацию удобнее всего обобщать и представлять в графической фор- ме. Требования к оформлению инженерной графической информации отлича- ются от требований к обычным графикам в математике. На основе полученной графической информации пользователь-инженер должен иметь возможность при- нять какое-то решение о выборе значений некоторых конструктивных парамет- ров, которые характеризуют исследуемый процесс или техническое устройство, с целью, чтобы прогнозируемое поведение технического устройства удовлетворяло определенным заданным условиям. Поэтому инженерные графики должны быть, как говорят, “читабельными”, т. е. иметь такой вид, чтобы из них легко было “от- считывать” значения функции при любых значениях аргумента (и наоборот) с от- носительной погрешностью в несколько процентов. Это становится возможным, если координатная сетка графиков отвечает определенным целым числам какого- либо десятичного разряда. Как уже раньше отмечалось, графики, построенные системой MatLAB, полнлстью отвечают этим требованиям. Кроме этого, инженерная графическая информация должна сопровождаться достаточно подробным описанием, поясняющим, какой объект и по какой мате- матической модели исследован, должны быть приведены числовые значения па- раметров исследуемого объекта и математической модели. Не окажется лишним и указание имени программы, с помощью которой получена эта графическая ин- 2.5. Графическое оформление результатов 112 формация, а также сведений об авторе программы и исследователе, чтобы пользо- вателю было понятно, к кому и куда надо обращаться для наведения справок о полученной информации. Задачей инженерной программы часто является сравнение нескольких функций, полученных при разных сочетаниях конструктивных параметров либо параметров внешних воздействий. Такое сравнение удобнее и нагляднее прово- дить, если упомянутые функции представлены в виде графиков. При этом нужно обратить внимание на следующее: - если нужно сравнивать графики функций одного аргумента, диапазоны изменения которых не слишком отличаются один от другого (не более чем на порядок, т. е. не более чем в десять раз), сравнение удобнее все- го осуществлять по графикам этих функций, построенных в одном графи- ческом поле (т. е. в общих координатных осях); в этом случае следует выводить графики с помощью одной функции plot; - если при тех же условиях диапазоны изменения функций значительно раз- личаются, можно предложить два подхода: а)если все сравниваемыефункции являются значениями величин одинаковой физической природы и эти значения все положительны, графики следует выводить также в одно графическое поле, но в лога- рифмическом масштабе (т. е. использовать процедуру semilogy); б) когда все функции имеют разную физическую природу, но аргу- мент в них общий и изменяется в одном диапазоне, графики нужно строить в одном графическом окне (фигуре), но в разных графиче- ских полях (пользуясь для этого несколькими отдельными обраще- ниями к функции plot в разных подокнах графического окна, которое обеспечивается применением процедуры subplot); при этом удобно размещать отдельные графики один под одним таким образом, чтобы одинаковые значения аргумента во всех графиках располагались на одной вертикали; - кроме упомянутых ранее надписей в каждом графическом поле, закон- ченное графическое оформление любого графического окна (фигуры) обязательно должно содержать дополнительную текстовую информацию такого содержания: краткое сообщение об объекте исследования; математическая модель, положенная в основу осуществленных в про- грамме вычислений с указанием имен параметров и переменных; информация об использованных значениях параметров; информация о полученных значениях некоторых вычисленных инте- гральных параметров; информация об имени М-файла использованной программы, исполни- теля работы и дате проведения вычислительного эксперимента; информация об авторе использованной программы и организации, где он работает. 2.5. Графическое оформление результатов 113 Последнее требование ставит перед необходимостью выделять (с помощью той же процедуры subplot) в каждой фигуре место для вывода указанной тексто- вой информации. 2.5.2. Разбивка графического окна на подокна Как следует из сказанного, при создании законченного графического инже- нерного документа в системе MatLAB необходимо использовать процедуру subplot. Общее назначение и применение функции subplot описаны в разд. 1.5.3. Рассмотрим, как обеспечить желательную разбивку всего графического окна на отдельные поля графиков и текстовое подокно. Пусть требуется разбить все поле графического окна так, чтобы верхняя треть окна образовала поле вывода текста, а нижние две трети образовали единое поле вывода графиков. Это можно осуществить таким образом: перед выводом текстовой информации в графическое окно надо устано- вить команду subplot(3,1,1), которая показывает, что весь графический экран, разделен на три одинаковые части по вертикали, а для последую- щего вывода будет использованная верхняя из этих трех частей (рис. 2.6); subplot1 subplot2 subplot3 Графическое подокно Текстовое подокно Рис. 2.6 выводу графиков в графическое окно должна предшествовать команда subplot(3,1,[2 3]), в соответствии с которой графическое окно разделяет- ся, как и ранее, на три части по вертикали, но теперь для вывода графи- ческой информации будет использовано пространство, объединяющее второе и третье из созданных подокон (полей) (обратите внимание, что 2.5. Графическое оформление результатов 114 подокна объединяются таким же образом, как элементы вектора в вектор-строку). Если требуется создать три отдельных поля графиков один под другим на трех четвертях экрана по горизонтали, а текстовую информацию разместить в по- следней четверти по горизонтали, то это можно сделать (рис. 2.7) так: - разделить все пространство фигуры на 12 частей - на 3 части по вертикали и на 4 части по горизонтали; при этом подокна будут расположены так, как показано на рис. 2.7; - чтобы организовать вывода графиков в первое графическое подокно, надо предварительно ввести команду subplot(3,4,[1 2 3]), которая объединит подокна sp1, sp2 и sp3 в единое графическое подокно; - аналогично, выводу графиков во второе графическое подокно должно предшествовать обращение к команде subplot(3,4,[5 6 7]), а выводу графи- ков в третье графическое подокно - subplot(3,4,[9 10 11]); Рис. 2.7 Текстовое подокно sp12 sp10 sp11 sp9 sp8 sp5 sp6 sp7 sp4 sp3 sp1 sp2 Графическое подокно 3 Графическое подокно 2 Графическое подокно 1 - наконец, к оформлению текста можно приступить после обращения subplot(3,4,[4 8 12]). 2.5.3. Вывод текста в графическое окно (подокно) Если поочередно сформировать подокна, к примеру, в соответствии с по- следней схемой, не осуществляя никаких операций по выводу графиков или тек- ста: » subplot(3,4,[5 6 7]) » subplot(3,4,1:3) » subplot(3,4,9:11) » subplot(3,4,[4 8 12]), в окне фигуры появится изображение, представленное на рис. 2.8. Из него видно, что: 2.5. Графическое оформление результатов 115 - после обращения к процедуре subplot в соответствующем подокне появля- ется изображение осей координат с обозначением делений по осям; - начальный диапазон изменений координат по обеим осям подокна всегда устанавливается по умолчанию от 0 до 1; - поле выведения графиков занимает не все пространство соответствующе- го подокна - остается некоторое место вокруг поля графика для вывода за- головка графика, надписей по осям координат и др. Поэтому для вывода текста в одно из подокон нужно сначала очистить это подокно от изображения осей координат и надписей на них. Это делается с помо- щью команды axis(‘off'). Рис. 2.8 Так, если эту команду ввести после предидущих команд, в окне фигуры ис- чезнет изображение координатных осей последнего подокна (рис. 2.9). Теперь можно начинать выведение текста в это подокно. Основной функцией, обеспечивающей выведение текста в графическое ок- но, является функция text. Обобщенная форма обращения к ней имеет вид: h = text (x, y, ‘<текст>’,’FontName',’<название шрифта>’,... ’FontSize',<размер шрифта в пикселах>). Она осуществляет вывод указанного текста указанным шрифтом указанного размера, начиная из точки подокна с координатами x и y соответствующего по- ля графика подокна. При этом координаты x и y измеряются в единицах величин, откладываемых вдоль соответствующих осей графика подокна. Так как, как мы убедились, диапазон изменения этих координат равняется [0...1], то для того, что- бы поместить начало текста в точку внутри поля графика, необходимо, чтобы его 2.5. Графическое оформление результатов 116 координаты x и y были в этом диапазоне. Однако можно использовать и не- сколько более широкий диапазон, учитывая то, что поле подокна больше поля его графика. Рис. 2.9 Рассмотрим пример текстового оформления на следующем фрагменте про- граммы: subplot(3,4,1:3); subplot(3,4,5:7); subplot(3,4,9:11); subplot(3,4,[4;8;12]); axis('off'); % Процедура вывода данных в текстовое поле графического окна D1 =[2 1 300 1 50]; D2 = [ 0.1 0.02 -0.03 0 1 4 -1.5 2 0.1 -0.15 0 0]; D5 = [0.001 0.01 15 16]; sprogram = 'vsp1'; sname = 'Лазарев Ю.Ф.'; h1=text(-0.2,1,'Исходные параметры:','FontSize',12); h1=text(0,0.95,'Гиротахометров','FontSize',10); h1=text(0.2,0.9,sprintf(' = %g ',D1(3)),'FontSize',10); h1=text(-0.2,0.85,sprintf(' = %g ',D1(4)),'FontSize',10); h1=text(0.6,0.85,sprintf(' = %g ',D1(5)),'FontSize',10); h1=text(-0.2,0.8,sprintf(' = %g ',D1(1)),'FontSize',10); h1=text(0.6,0.8,sprintf('J2 = %g ',D1(2)),'FontSize',10); h1=text(0,0.75,'Внешних воздействий','FontSize',10); h1=text(-0.2,0.7,sprintf('pst0 = %g ',D2(1)),'FontSize',10); 6> |