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 ファイルからルールを呼び出すにはどうすればよいですか?

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 の使用時に変数へのグローバル アクセスを実現する最も一般的な方法の 1 つは、最初に変数を定義した後で setappdata 関数を使用することです。私はあなたのプログラムの説明に混乱していますが、最初にこの「ルール」構造を定義する場所ならどこでも、これを追加できます:

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

getappdata を呼び出して、コールバック関数に引数として渡さなくても、この変数を取得できます。

rule = getappdata(0,'myRules');

これが唯一の解決策ではなく、プログラムに最適ではない可能性があることに注意してください。ただし、プログラムのロジックを完全に理解していないと、より具体的なアドバイスを提供することは困難です。

于 2012-11-22T20:06:33.227 に答える