valarrayとは
valarrayとは、その名の通り値を扱う配列の様なものなのですが、vectorなどとは異なり、行列式・行列・数列などの一連の数値の扱いと、その演算に特化したクラスであるといえます。 まず始めに、基本的な使い方を見ることでその概要をつかんでみようと思います。
このように、普通の配列同様に扱えます。 しかしクラスであるためにsize()関数が存在します。 valarrayにはこのほかにも様々なメンバ関数が存在します。
valarrayに対する四則演算
普通の配列とは異なり、valarrayでは、valarrayに対して直接四則演算を行うことができます。
このサンプルのように、valarrayに対して直接加減乗除を行うと、その要素一つ一つに同じ値を加減乗除したのと同じ結果が得られます。 これがvalarrayの最大の特徴といえるでしょう。
valarray同士の四則演算
さらに、valarrayに対する四則演算の他にも、valarray同士の演算が行える特徴的な機能があります。
このサンプルでは、valarray同士の加減乗除および、複合代入演算を行っています。 参考までに、valarray同士の要素数は同じである必要があります。 異なる要素数の場合、演算の結果は未定義です。
valarrayのメンバ
valarrayはクラスなので、当然メンバ関数が存在します。 次のコードはその関数を利用したサンプルです。
このようにvalarrayのサイズを求める関数や、valarrayに格納されている数値の合計、最大値、最小値を求める関数、valarray内の数値の並びをシフトする関数など、便利なメンバ関数が用意されています。
valarrayのリサイズ
途中でvalarrayのサイズを変えたい場合はresize()関数を使います。
このように、リサイズする際に、拡張された部分を満たす値を設定することができます。 この例では拡張の際に20という数値で満たしています。 また、拡張だけでなく縮小する事もできます。
valarrayに対する三角関数の利用
valarrayに対して、四則演算だけでなく、三角関数などの超越関数を利用した演算も行うことができます。
この結果を見てわかるように、valarrayに対していとも簡単に三角関数による演算が行えます。 三角関数の他にも逆三角関数・双曲線関数ももちろん利用できます。
valarrayに対するその他の超越関数の演算
三角関数・逆三角関数の他の超越関数として対数関数・指数関数など以下の関数も利用できます。
このように、expやlogなどの超越関数もdouble型やint型に対する演算と同様に使用することができます。
valarrayに対する独自定義の演算
今までのサンプルで紹介したような定義された演算の他にも、独自にvalarrayに対する演算を定義することができます。
このサンプルのように、valarrayのapply()関数に演算を定義した独自のコールバック関数を指定すれば、valarrayに対する演算を定義できます。 この例では加算と減算という単純な演算だけを行わせましたが、複雑な演算を行いたい場合には有用な方法といえます。