[英]MATLAB GUI Programming with ODE
I am new to programming and I have to create a matlab gui code with ordinary differential equations (ODE) then graph said equation. 我是编程新手,必须使用普通的微分方程(ODE)创建一个matlab gui代码,然后用图形表示该方程。 The problem I am having is the format where a function for the ode is defined in one .m file and called in another .m file, like so:
我遇到的问题是在一个.m文件中定义了ode函数的格式,并在另一个.m文件中调用了该格式,如下所示:
% First part
% This is the ode .m file
function dydt=project(t,y)
dydt=zeros(3,1);
y(1);
y(2);
y(3);
dydt(1) = (some math);
dydt(2) = (some math);
dydt(3) = (some math);
end
% Second part
% This is a call for the ode function defined in the above .m file
% This can be in another .m file or called from command window
[t,y]=ode45('project',[0 10],[9.8 6591 61.3]);
My code requires that I create a gui which will initialize the ode function as soon as the gui program starts (first part) and will then take in the initial conditions and calculate the call to the function as soon as a button is pressed (second part). 我的代码要求我创建一个gui,它将在gui程序启动时(第一部分)立即初始化ode函数,然后将接受初始条件并在按下按钮后立即计算对该函数的调用(第二部分) )。
My questions are: Do I have to call a .m file or is there a way to code the above ode function into the gui code? 我的问题是:是否必须调用.m文件,或者是否可以将上述ode函数编码为gui代码? How do I go about entering the second part into the gui code?
如何将第二部分输入gui代码?
Thanks for all those who contribute. 感谢所有贡献者。
Edit: The code below is the GUIDE code for the gui used feel free to test it out and confirm the errors. 编辑:下面的代码是用于GUI的GUIDE代码,请随意进行测试并确认错误。
function varargout = reaction_kinetics(varargin)
% REACTION_KINETICS MATLAB code for reaction_kinetics.fig
%REACTION_KINETICS, by itself, creates a new REACTION_KINETICS or raises the existing
% singleton*.
%
%H = REACTION_KINETICS returns the handle to a new REACTION_KINETICS or the handle to
% the existing singleton*.
%
%REACTION_KINETICS('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in REACTION_KINETICS.M with the given input arguments.
%
%REACTION_KINETICS('Property','Value',...) creates a new REACTION_KINETICS or raises
%the existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before reaction_kinetics_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to reaction_kinetics_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help reaction_kinetics
% Last Modified by GUIDE v2.5 16-Apr-2013 18:44:46
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @reaction_kinetics_OpeningFcn, ...
'gui_OutputFcn', @reaction_kinetics_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before reaction_kinetics is made visible.
function reaction_kinetics_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to reaction_kinetics (see VARARGIN)
% Perform first set of ODE's
function dydt=project(t,y)
dydt=zeros(3,1);
glc=y(1);
gsh=y(2);
gsg=y(3);
dydt(1)= (-5400*((924*glc)-(gsh/5600)))/((22*300)+(glc*300)+924*22*(1+(glc/22)+(gsh/30)));
dydt(2)=(5400*((924*glc)-(gsh/5600)))/((22*300)+(glc*300)+924*22*(1+(glc/22)+(gsh/30)))-(150*gsh/(150+gsh))-(1100*(gsh^3)/((3000^3)+(gsh^3)))-((2*4500*.01*gsh)/((1330+gsh)*(0.09+0.01)))+((2*8925*gsg*50)/((107+gsg)*(10.4+50)))-0.002*gsh;
dydt(3)=(4500*.01*gsh)/((1330+gsh)*(0.09+0.01))- ((8925*gsg*50)/((107+gsg)*(10.4+50)))-((40*gsg)/(1250+gsg))-((4025*gsg)/(7100+gsg))-0.1*gsg;
end
handles.project=project;
handles.current_data=handles.project;
% Choose default command line output for reaction_kinetics
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes reaction_kinetics wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = reaction_kinetics_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in popupmenu2.
function popupmenu2_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu2
val=get(hObject,'Value');
str=get(hObject,'String');
switch str{val}
case 'GSH Half Life' % User selects GSH Half Life
handles.current_data=handles.plot(t,y);
case 'GSH v Glc' % User selects GSH v Glc
handles.current_data=handles.plot(y(2),y(1));
case 'GSH v GSSG' % User selects GSH v GSSG
handles.current_data=handles.plot(y(2),y(3));
end
guidata(hObject,handles);
% --- Executes during object creation, after setting all properties.
function popupmenu2_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in plot_button.
function plot_button_Callback(hObject, eventdata, handles)
% hObject handle to plot_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Plot using the popup menu
plot(handles.current_data);
function gsh_value_Callback(hObject, eventdata, handles)
% hObject handle to gsh_value (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of gsh_value as text
% str2double(get(hObject,'String')) returns contents of gsh_value as a double
% Convert string to numeric value for gsh_value
gsh_ivalue = str2double(get(hObject,'string'));
if isnan(gsh_ivalue)
errordlg('You must enter a numeric value','Bad Input','modal')
uicontrol(hObject)
return
end
% --- Executes during object creation, after setting all properties.
function gsh_value_CreateFcn(hObject, eventdata, handles)
% hObject handle to gsh_value (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function gssg_value_Callback(hObject, eventdata, handles)
% hObject handle to gssg_value (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of gssg_value as text
% str2double(get(hObject,'String')) returns contents of gssg_value as a double
gssg_ivalue = str2double(get(hObject,'string'));
if isnan(gssg_ivalue)
errordlg('You must enter a numeric value','Bad Input','modal')
uicontrol(hObject)
return
end
% --- Executes during object creation, after setting all properties.
function gssg_value_CreateFcn(hObject, eventdata, handles)
% hObject handle to gssg_value (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function glc_value_Callback(hObject, eventdata, handles)
% hObject handle to glc_value (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of glc_value as text
% str2double(get(hObject,'String')) returns contents of glc_value as a double
glc_ivalue = str2double(get(hObject,'string'));
if isnan(glc_ivalue)
errordlg('You must enter a numeric value','Bad Input','modal')
uicontrol(hObject)
return
end
% --- Executes during object creation, after setting all properties.
function glc_value_CreateFcn(hObject, eventdata, handles)
% hObject handle to glc_value (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in calculate_button.
function calculate_button_Callback(hObject, eventdata, handles)
% hObject handle to calculate_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Calculate the ode
[t,y]=ode45('project',[0 10],[glc_ivalue gsh_ivalue gssg_ivalue]);
The Matlab GUI is event driven, which means that doing stuff implies setting the callback of a graphic object like an uicontrol
with the style pushbutton
(for example) to implement or call your custom code. Matlab GUI是事件驱动的,这意味着执行操作意味着使用样式
pushbutton
(例如)来设置图形对象(如uicontrol
的回调,以实现或调用您的自定义代码。 This means: every time you'll click on the button, your custom code will be run. 这意味着:每次您单击按钮时,将运行您的自定义代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.