電子書籍の厳選無料作品が豊富!

最近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

A 回答 (2件)

最近はScilabを使っていないので、もっとエレガントな方法があるかもしれませんが



bool2s()を使えば可能です。
bool2s(AB<=CD)*%pi
で真偽に応じて%piと0の配列が得られます。
あとは、AB-CDに加えるだけです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/13 23:36

>もっと、いろいろなコマンドを覚えないとダメですね。



bool2s(AB<=CD)
はなかなか気がつかないと思います。実はScilabを使っていた時には全然知らない命令だったし、たとえ命令を見ても使い方は分からなかったとと思います。行列式を扱える他の言語で似た命令があったので、Scilabでもあるはずだと今回調べて初めて気がつきました。

このような行列計算が使えるプログラム言語は、質問者さんが書いている通り、できるだけループを使わないのが速くて見通しのきくプログラムになるコツだと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/16 19:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!