2017-11-30 15 views
0

Matlab2017でプログラムを最適化したいと思います。 を使用せずに一部の機能を繰り返す場合はn-timesとしてください。 たとえば、次のコードでは、を削除する必要があります。Matlabコードの最適化

for i=1:5 
    N(i)=diff(f(x),x,i); 
end 

このコードを最適化するのに手伝ってください。私のプログラムでこのようなコードがたくさん必要なので、 。 forループを取り除くために

+0

詳細を教えてください! –

+0

@ P.Bn上記のコードでは、forループを使わずにsin(x)の導関数を5まで計算したいと考えています。 – Armaa

+0

@ P.Bn他に必要な情報はありますか? – Armaa

答えて

0

、一つはarrayfun使用することができます。

arrayfun(@(i) diff(f(x), i), [1:5]', 'UniformOutput', false) 

二つの発言:

  • あなたがdiffを使用する方法は間違いなく、エラーがスローされます。なぜ3つの入力を使用するのか分かりません。ここで、3番目の入力は、デリバティブを適用する次元を示します。 help diffを参照してください。
  • 関数diff(f(x), i)の出力サイズがスカラーではないため、オプションUniformOutputfalseに設定する必要があります。
+0

' arrayfun'はループのラッパーです。ほとんどの場合、 'for'ループと比較して同等またはそれ以下です。最新のバージョンではパフォーマンスは向上しているようですが、forループを上回るほどではありません。これは決して最適化ではありません。 –

+0

Sardar Usamaあなたは正しいです。これはあなたのコードでforループを取り除くための単なる方法ですが、通常はそれが速くなるわけではありません。 )(私のコードは必要な行数を最適化していましたが、0--))。つまり、与えられた情報では、実行時間に関してどのようにコードを最適化できるかは言えません。 – EdG

+0

質問が不明瞭な場合は、元の投稿の下にコメントしてください。 B(i = 1:5の場合、N(i)= diff(f(x)、x、i); end'が最適化される可能性があります。 –