如何使用这两个函数和脚本

时间:2012-11-22 17:58:13

标签: matlab

我是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回调时出错

1 个答案:

答案 0 :(得分:0)

听起来你的问题是你在回调函数中没有访问变量'rule'。在编写GUI时有时这样做很棘手。

使用GUI时实现全局访问变量的最常用方法之一是在首次定义变量后使用setappdata函数。我对您的程序描述感到困惑,但无论您在哪里首先定义此“规则”结构,都可以添加以下内容:

% rule = struct(); % Define your rule struct first
setappdata(0,  'myRules',  rule);  

然后你可以通过调用getappdata来检索这个变量,而不必以某种方式将它作为参数传递给你的回调函数:

rule = getappdata(0,'myRules');

请注意,这不是唯一的解决方案,可能不是您的计划的最佳解决方案,但如果不完全了解您的程序逻辑,则很难提供更具体的建议。