2016-03-23 23 views
2

私はOctaveを使用していますが、答えを得る機会を増やすために、私はMatlabのものを試してみます。複数の入力と出力を持つfplot関数

私はどうすればfplot B(X、1)でしょう

function [ a, b ] = myfunc(x, y) 
    a = 1; 
    b = 2; 
endfunction; 

のように、複数の値を返す関数がありますか?私は実際にそれを直接プロットする表現を得ることを意味しました。今のところ、私は最初にbを抽出してプロットしなければならないという結論に達しました。実際にはまだコードを書いていませんでしたが、それが避けられれば嬉しいです。

行う可能性が

x = 0 : 0.1 : 4; 
[ a, b ] = myfunc(x, 1); 
plot(x, b); 

ですがfplotは、1つのまたは2つのラインでは、このような何かを行うことができれば、私は思っていました。

+0

http://stackoverflow.com/q/36098404/97160と似ています。関数が複数の変数を返す場合は、それらを「受け取る」必要があります。他の方法はありません。あなたができないことは、興味のないもの、つまり '[〜、b] = myfunc(x、y)'を無視することです。もちろん、最初に出現した場合は 'a = myfunc(x、y)'と書くことができます。その場合は 'b'が受信されません。さらに良いことに、別の変数ではなくベクトルまたはセル配列を返すように関数を変更することができます。つまり、Octaveでhbadertsのように呼び出すことができます。 – Amro

+0

@Amro - 実際に投稿したリンクは私の質問に適用されます。私は実際にベクトルを返す関数を最初に書いていますが、私の場合はいくつかの値を返すように変更する必要がありました。おそらく私はこれを修正することができますが、今のところ私は特定の場合(詳細はここに属さない)、それを行う方法がわかりません。私はちょっと微妙に変わってしまい、必要に応じて別の質問を投稿します。とにかく、答え/コメントを 'fplot'と組み合わせる方法は私には分かりません。これは質問の重要な部分です。 –

+0

正直なところ、それは価値がありません。コードを2つの別々のステートメントに入れておいてください。それはより簡単で読みやすく、すべてを1行にする必要はありません!不要な出力を無視するには '〜'を使ってください。 – Amro

答えて

3

Octaveのnthargoutを使用して、特定の戻り値を受け取ることができます。 anonymous functionと組み合わせてfplotに渡すことができます。

fplot(@(x) nthargout(2, @myfunc, x, 1), [0 1]) 
+0

+1前に 'nthargout'を見たことがないからです。しかし、単に 'edit nthargout'の実装を見てみると、今説明したこと、つまりすべての出力引数を受け取り、要求されたものを返すことがわかります。出力をキャプチャするには明示的な変数 '[out1、out2、..、outN] = f()'を使うか、カンマ区切りリスト '[out {:}] = fを使ってセル配列を使うと便利です) 'を実行して、任意の数の出力で動作するようにします。 – Amro

+0

驚くばかり!私は試して、それは働いた。 –

関連する問題