1

要素 1...n を持つベクトル v があり、v(1) = v_0 であることがわかっているとします。

v(i+1) = 1/(a*v(i) + b). 

これは、単一の for ループまたは再帰を使用して簡単に実装できます。再帰は、Matlab ではひどいアイデアであり、可能であれば、単一の foor ループはまだ最適ではありません。このような操作をベクトル化できますか?

この投稿をより便利にするために、ベクトル化する一般的な方法はありますか

v(i+1) = f(v(i)), 

f(x) は任意の関数ですか? のようなものはどうですか

v(i+1) = a(i)*v(i) + b(i)

ここで、a と b はベクトルです。

4

1 に答える 1

2

forMATLAB では、ジャストインタイム コンパイルにより、ループは以前ほど悪くはありません。疑わしい場合は、ループを記述して作業を続行してください。ベクトルが巨大でない限り、ループは少しも気になりません。ループがボトルネックである場合 (その場合にのみ)、戻って、愚かな MATLAB トリックを試して最適化します。

あなたの質問に対する具体的な回答では、いいえ、v(i+1) = f(v(i)) を表現する一般的な方法があるとは思いません。関数ハンドルを使用して簡単に記述できますが、パフォーマンスは、式をオープン コーディングするよりも劣ります。

于 2012-08-29T18:09:13.443 に答える