我是MATLAB的新手,没有太多的编程经验,所以我很困难。
我需要创建一个文件,其中我有两个函数(由于我有GUI)和一个脚本。我需要使用我在回调中脚本中声明的变量。
我的程序是一个专家系统。首先,我将规则声明为结构数组,然后执行算法。我不明白如何调用我的规则应该在我的函数文件中的脚本文件中。
更新
我明白这一点,但是我已经阅读了很多东西,但我仍然无法理解这一点。我有规则的文件,看起来像那样:
rule(1).condition1='First condition';
rule(1).cond1ask=1;
rule(1).condition2='Second condition';
rule(1).cond2ask=1;
rule(1).conclusion='Conclusion';
rule(1).endmarker=1;
该文件包含±50个此类声明。然后我有一个非常简单的GUI,它应该在我按下按钮时运行算法。问题是:如何将文件与GUI功能和我的算法以及我的文件与规则相结合?如何从GUI文件中调用规则?
这是GUI代码:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
global rule
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a1=rule(1).condition(1);
a1
然后我从我的脚本文件运行GUI文件,虽然界面加载正常,但当我按下按钮时我收到错误消息:
索引矩阵参考不正确。
ES_21112012中的错误> pushbutton1_Callback(第83行) A1 =规则(1).condition(1);
gui_mainfcn出错(第96行) feval(varargin {:});
ES_21112012错误(第43行) gui_mainfcn(gui_State,varargin {:});
错误 @(hObject,EVENTDATA)ES_21112012( 'pushbutton1_Callback',hObject,EVENTDATA,guidata(hObject))
评估uicontrol回调时出错
答案 0 :(得分:0)
听起来你的问题是你在回调函数中没有访问变量'rule'。在编写GUI时有时这样做很棘手。
使用GUI时实现全局访问变量的最常用方法之一是在首次定义变量后使用setappdata函数。我对您的程序描述感到困惑,但无论您在哪里首先定义此“规则”结构,都可以添加以下内容:
% rule = struct(); % Define your rule struct first
setappdata(0, 'myRules', rule);
然后你可以通过调用getappdata来检索这个变量,而不必以某种方式将它作为参数传递给你的回调函数:
rule = getappdata(0,'myRules');
请注意,这不是唯一的解决方案,可能不是您的计划的最佳解决方案,但如果不完全了解您的程序逻辑,则很难提供更具体的建议。