2016-04-18 15 views
2

私はむしろ混乱しているので、これを可能な限り明確にすることを望みます。議論を促進するための簡単な例をまとめました。既存のワークスペース関数を使用したMatlab str2func

a = @(c) 1 + c; 
fcn = str2func('@(x) x+a(x)'); 

これはfcnが呼び出されたときに「str2funcのは」ノーワークスペース変数aを保つんので、エラーが返されます。これはdocumentationで強調表示されています。この問題の回避策はありますか?

注:文字列へのハードコーディングaは受け入れ可能な答えではありません。

+0

なぜ最初に 'str2func'を使用していますか?あなたの例では必ずしも必要ではありません。 – David

+0

@David私はそれをよく知っています。これは、問題/疑問を示す簡単な例です。私が何をしようとしているかにかかわらず、ワークスペース内の既存の変数/関数から関数を構築する方法はありますか? – ThatsRightJack

+0

完全な問題を尋ねれば、全体的なソリューションが向上する可能性があります。あなたは 'a {1} = @(x)1 + x'' a {2} = @(x)x。^ 2'、f = @(x)x + a {i}(x ) '? – David

答えて

2

fcnでカスタム関数ハンドルを評価できるようにするには、あなたが入力引数として渡すことができますが:

a = @(c) 1 + c; 
fcn = str2func('@(x,a) x+a(x)'); 

>> fcn(3,a) 
ans = 
    7 

あなたはfcnは引数を1つしか持たせたい場合は、次の2つのステップでそれを定義する必要があります。

a = @(c) 1 + c; 
tmp = str2func('@(x,a) x+a(x)'); 
fcn = @(x)tmp(x,a); 
関連する問題