АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология
|
Global hTxt1,hTxt2,hTxt3,hTxt4,hTxt5,hTxt6,hTxt7
%-----------------------------------------------
hFig1 = figure
hAxes = axes('Parent',hFig1,'Color', [ 1 1 1],'Units',...
'points', 'Position', [ 20 60 230 230 ],'FontSize', 10);
%-----------------------------------------------
hEd1 = uicontrol(hFig1,'Style','edit','BackgroundColor',[1 1 1],...
'Position',[435 400 190 30],'HorizontalAlignment','left');
hEd2 = uicontrol(hFig1,'Style','edit','BackgroundColor',[1 1 1],...
'Position',[435 320 190 30],'HorizontalAlignment','left');
hEd3 = uicontrol(hFig1,'Style','edit','BackgroundColor',[1 1 1],...
'Position',[435 230 190 30],'HorizontalAlignment','left');
hEd4 = uicontrol(hFig1,'Style','edit','BackgroundColor',[1 1 1],...
'Position',[435 150 190 30],'HorizontalAlignment','left')
hList = uicontrol(hFig1,'Style','listbox','Position',[485 15 140 90],...
'String',{'sin','cos','MyFunct1','MyFunct2','f3' },...
'HorizontalAlignment', 'left');
hBut1 = uicontrol(hFig1,'Style','pushbutton','Position',[60 25 140 40],...
'String', 'GO');
hBut2 = uicontrol(hFig1,'Style','pushbutton','Position',[240 25 140 40],...
'String', 'CLEAR')
hTxt1 = uicontrol(hFig1,'Style','text','BackgroundColor',[0.7 0.7 0.7],...
'Position', [90 475 240 20],'String','Euler solution');
hTxt2 = uicontrol(hFig1,'Style','text','BackgroundColor',[0.7 0.7 0.7],...
'Position', [435 440 60 20],'String','X initial');
hTxt3 = uicontrol(hFig1,'Style','text','BackgroundColor',[0.7 0.7 0.7],...
'Position', [435 360 60 20],'String','Y initial');
hTxt4 = uicontrol(hFig1,'Style','text','BackgroundColor',[0.7 0.7 0.7],...
'Position', [435 260 60 20],'String','X final');
hTxt5 = uicontrol(hFig1,'Style','text','BackgroundColor',[0.7 0.7 0.7],...
'Position', [435 180 60 20],'String','N');
hTxt6 = uicontrol(hFig1,'Style','text','BackgroundColor',[0 0 0],...
'Position', [430 5 1 900]);
hTxt7 = uicontrol(hFig1,'Style','text','BackgroundColor',[0.7 0.7 0.7],...
'Position', [435 140 240 20],'String','Choose function');
В результате получается вот такое графическое окно:
Это окно предназначено для численного решения дифференциального уравнения
y'(x) = F(x); Xinitial < x < X final; Yinitial = y(Xinitial);
где функция F(x) выбирается из списка, расположенного в правом нижнем углу графического окна. Остальные параметры задаются с клавиатуры в редактируемых полях. Кнопка GO предназначена для начала расчётов по методу Эйлера и показа результата в виде графика на поверхности объекта Axes. Кнопка CLEAR позволяет очистить объект Axes от содержимого.
Как мы видим из рисунка предусмотрены расчёты со стандартными функциями sin(x) и cos(x), а также с собственными функциями MyFunct1(x), MyFunct2(x) и f3(x). Последние должны быть записаны в M-файлы MyFunct1.m, MyFunct2.m, f3.m.
Число N, которое вводится перед расчётами с клавиатуры, определяет шаг интегрирования, который равен
(Xfinal - Xinitial) / N.
Чтобы запустить программы пасчётов, нужно не только записать алгоритм решения на M-языке и сохранить текст в M-файле, но и связать эти программы с командными кнопками.
#$+Callback функции.
Функции, которые связывают с графическими элементами управления, называют callback-функциями (их не вызывают наши M-функции; они вызываются средой MATLAB у нас "за спиной", отсюда и происхождение их названия).
Чтобы связать наши кнопки с callback-функциями, которые будут вызываться средой MATLAB при "нажатии" на эти кнопки, при создании кнопок функцией uicontrol нужно прописать свойство 'Callback', указав ему в качестве значения имя M-функции. Это значит, что в ранее представленном файле сценария Proj1Script.m нужно изменить строки, касающиеся создания кнопок. Вот этот изменённый код, позволяющий связать кнопки с их callback-функциями:
hBut1 = uicontrol(hFig1,'Style','pushbutton','Position', …
[60 25 140 40],'String', 'GO','Callback','MyGO');
hBut2 = uicontrol(hFig1,'Style','pushbutton','Position', …
[240 25 140 40],'String', 'CLEAR','Callback','MyCLEAR');
Если функция, которая будет вызываться при нажати на кнопку GO будет записана в файле MyGO.m, то в качестве значения свойства 'Callback' обязательно нужно написать значение в виде 'MyGO', и нельзя писать 'MyGO.m' (возникнет ошибочная ситуация).
Поправив файл Proj1Script.m, перейдём теперь к написанию функций MyGO и MyCLEAR. Начнём с более простой функции MyCLEAR. Вот текст этой функции:
Дата добавления: 2015-01-18 | Просмотры: 639 | Нарушение авторских прав
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|