2017-02-12 10 views
-1

私はMatLabを初めて使用し、自分の関数の結果を使用するのが難しいです。MatLab - 関数を使用した後の変数へのアクセス

私のプログラムは.matファイルをオブジェクトとしてロードし、次に.matの各変数に対して解析を実行します。実際の解析は、forループで呼び出される関数によって行われます。解析の結果は、関数によって配列に格納されます。次のように:

function main() 
    object = matfile('data.mat') 
    vars = (fieldnames(object)) 
    resultarray = zeros(length(vars)) 
    for index = 1:length(vars) 
     var = vars(index) 
     x = object.var 
     resultarray = analysis(x, index) 
    end 
end 

function resultarray = analysis(x, index) 
    %does stuff to x 
    resultarray(index) = x 
    disp(resultarray(index)) 
end 

問題は - 私の変数は見えません!作業領域は空です。 disp()関数は、私が割り当てた値を出力するので、関数が動作していることを知っていますが、プログラムの終了後にはどのようにresultarrayにアクセスしますか?私はmain()の始めにグローバルとして宣言しようとしましたが、これは何もしないようです。私の配列をmain()に戻す必要があります。プログラムを終了した後、実際に関数の出力を使用できるようにするには、どうすれば保存するのですか?

ご協力いただきありがとうございます。

編集 - 私はmain()のスコープが異なることを知っていますが、私がそれを取り除くと、 "関数定義はこの文脈では許されません"と言われています。何らかの理由で、スクリプトと同じファイルでスクリプトが使用するいくつかの関数を持つことができないように見えます。

+0

Worskpaceが異なるスコープを持っています'main'関数よりも優れています。そのため、変数が表示されません。 'main()'関数を削除してください。 – codeaviator

+0

これを行うと、プログラムは実行されません。明らかに、スクリプトの後にmatlabファイルの関数定義が続くことはできません。だから私は本当に頼んでいるのは、変数を関数ワークスペースから永続的なフォームにする方法です。 – Nate

+0

関数からの戻り値として戻します。 – beaker

答えて

0

あなたはこの構文で関数としてmainを保持したい場合は、次のようにあなたのコードを編集する必要がありますが(mainからresultarrayを返す):

function resultarray = main() 
    object = matfile('data.mat') 
    vars = (fieldnames(object)) 
    resultarray = zeros(length(vars)) 
    for index = 1:length(vars) 
     var = vars(index) 
     x = object.var 
     resultarray = analysis(x, index) 
    end 
end 

function resultarray = analysis(x, index) 
    %does stuff to x 
    resultarray(index) = x 
    disp(resultarray(index)) 
end 

問題は、ワークスペースがより異なるスコープを持っているということですあなたが定義した関数です。

そうでないあなたは、というスクリプトを作成するのがmain.mを言わせすることができます

object = matfile('data.mat') 
vars = (fieldnames(object)) 
resultarray = zeros(length(vars)) 
for index = 1:length(vars) 
    var = vars(index) 
    x = object.var 
    resultarray = analysis(x, index) 
end 

と別のファイルを作成するには、次のコードが含まれる、analysis.mと呼ばれる:

function resultarray = analysis(x, index) 
    %does stuff to x 
    resultarray(index) = x 
end 
関連する問題