Рис.1.63. Редактор свойств

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

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

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

% --- Executes on button press in pushbutton1. CALCULATE

function pushbutton1_Callback(hObject, eventdata, handles)

 [VectorArg]=VvodArg(hObject, eventdata, handles);

[VectorRes]=ReshitZadachu(VectorArg);

VivodRes(VectorRes,hObject, eventdata, handles);

Для этого в файле интерфейса щелкнем кнопку Calculate, открыв Property Inspector, и найдем Tag этой кнопки. Пусть, например, он оказался pushbutton1. Тогда в М-файле найдем абзац, озаглавленный

function pushbutton1_Callback(hObject, eventdata, handles)

В этом абзаце (то есть ниже строки его заголовка) укажем что должно произойти после ее нажатия.

function[VectorArg]=VvodArg(hObject, eventdata, handles)

x=str2double(get(handles.edit1,'String'));

y=str2double(get(handles.edit2,'String'));

z=str2double(get(handles.edit3,'String'));

VectorArg=[x, y, z];

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

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

function[VectorRes]=ReshitZadachu(VectorArg)

x=VectorArg(1);

y=VectorArg(2);

z=VectorArg(3);

f1=x^2+y+z;

f2=x+y^2+z;

f3=x+y+z^2;

VectorRes=[f1, f2, f3];

После этого должна быть вызвана функция для вывода в соответствующие окошки интерфейса значений из вектора результатов.

function[]=VivodRes(VectorRes,hObject, eventdata, handles)

f1=VectorRes(1);

f2=VectorRes(2);

f3=VectorRes(3);

S=sprintf('%g',f1);

set(handles.edit4,'String',S);

S=sprintf('%g',f2);

set(handles.edit5,'String',S);

S=sprintf('%g',f3);

set(handles.edit6,'String',S);

Упомянутые функции должны быть описаны. Рекомендуется описывать функции выше того места программы, где они вызываются.

Команда x=str2double(get(handles.edit1,'String')); означает что в переменную x будет записано число, возвращаемое функцией str2double которая преобразует строку цифр в число.

 Аргумент этой функции это возвращаемое значение функции get(handles.edit1,'String')); которая обращается к элементу интерфейса handles.edit1 где handles означает обращение к визуальному интерфейсу, edit1 это обозначение конкретного элемента интерфейса.

Команда S=sprintf('%g',f1); означает что в переменную S будет записана строка символов оператором sprintf('%g',f1); который обращается к аргументу f1 и '%g' указывает что аргумент является вещественным числом.

Команда set(handles.edit4,'String',S); означает что в элемент интерфейса edit4 (окошко вывода текста) будет выведена строка символов содержащаяся в переменной S.

Построение графика. Для построения графика предназначена кнопка интерфейса Plot. Логика построения графика такова

% --- Executes on button press in pushbutton2. PLOT

function pushbutton2_Callback(hObject, eventdata, handles)

 [VectorArg]=VvodArg(hObject, eventdata, handles);

PostrGraf(VectorArg,hObject, eventdata, handles);

Пользователь вводит в окошки ввода значения переменных NumFun (номер функции 1, 2 или 3), NumArg (номер аргумента), MinArg (минимальное значение аргумента, с него начинаются подписи к горизонтальной оси), MaxArg (максимальное значение аргумента, до него идут подписи к горизонтальной оси), StepArg (шаг изменения аргумента). Затем пользователь нажимает кнопку Plot и происходит построение графика в соответствии с введенными данными.

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

function[]=PostrGraf(VectorArg,hObject, eventdata, handles)

NumFun=str2double(get(handles.edit7,'String'));

NumArg=str2double(get(handles.edit11,'String'));

MinArg=str2double(get(handles.edit12,'String'));

StepArg=str2double(get(handles.edit13,'String'));

MaxArg=str2double(get(handles.edit14,'String'));

NumberSteps=round((MaxArg-MinArg)/StepArg);

horis(1)=MinArg;

VectorArg(NumArg)=horis(1);

[VectorRes]=ReshitZadachu(VectorArg);

vert(1)=VectorRes(NumFun);

for i=2:NumberSteps+1

   horis(i)=horis(i-1)+StepArg;

   VectorArg(NumArg)=horis(i);

   [VectorRes]=ReshitZadachu(VectorArg);

   vert(i)=VectorRes(NumFun);

end

plot(horis,vert,'o-');

set(gca,'XGrid','on');

set(gca,'Ygrid','on');   

При этом команда round округляет до целого значения результат деления. NumberSteps=round((MaxArg-MinArg)/StepArg); после этого для каждого элемента массива горизонтальных координат horis точек графика и для каждого элемента массива вертикальных координат vert точек графика определяются значения. Когда все готово (рис.1.64), то команда plot строит график и затем на график накладывается координатная сетка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: