• ベストアンサー

Scilabでfor文を使用しないで記述する方法

最近Scilabの勉強を始めました。 Scilabではfor文を使用することはあまり薦められないとのことのようですので、下記処理を何らかのコマンドを使用して実現しようと思うのですが、どうしてもわかりません。 お詳しい方、ご教授願えないでしょうか。 for i=1:10000; if AB(i)>CD(i) Y(i)=AB(i)-CD(i); //AB>CDの時はそのまま差を計算 else Y(i)=(AB(i)+%pi)-CD(i); //AB<=CDの時はABにπプラスして差を計算 end end

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

最近はScilabを使っていないので、もっとエレガントな方法があるかもしれませんが bool2s()を使えば可能です。 bool2s(AB<=CD)*%pi で真偽に応じて%piと0の配列が得られます。 あとは、AB-CDに加えるだけです。

bastardhalibut
質問者

お礼

早速試してみました。 for文の時よりすごく早く計算が終わりました。 もっと、いろいろなコマンドを覚えないとダメですね。 ありがとうございました。

その他の回答 (1)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

>もっと、いろいろなコマンドを覚えないとダメですね。 bool2s(AB<=CD) はなかなか気がつかないと思います。実はScilabを使っていた時には全然知らない命令だったし、たとえ命令を見ても使い方は分からなかったとと思います。行列式を扱える他の言語で似た命令があったので、Scilabでもあるはずだと今回調べて初めて気がつきました。 このような行列計算が使えるプログラム言語は、質問者さんが書いている通り、できるだけループを使わないのが速くて見通しのきくプログラムになるコツだと思います。

bastardhalibut
質問者

お礼

今回、初めてbool2s(AB<=CD)を見ましたが、すぐには理解できませんでした。 まだまだわからないことだらけです。