0

我是 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 文件中调用规则?

这是图形用户界面代码:

% --- 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=rule(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 回调时出错

4

1 回答 1

0

听起来您的问题是您无权访问回调函数中的变量“规则”。有时在编写 GUI 时这样做会很棘手。

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

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

然后,您可以检索此变量,而无需通过调用 getappdata 以某种方式将其作为参数传递给您的回调函数:

rule = getappdata(0,'myRules');

请注意,这不是唯一的解决方案,并且可能不是您的程序的最佳解决方案,但是如果不完全了解程序的逻辑,就很难给出更具体的建议。

于 2012-11-22T20:06:33.227 回答