valarray変数の使い方

特徴

1.数値計算用に定義された配列です。
2.valarray変数では、最初に配列数を決めずに使え、
  適宜resize()関数で変更できます。
3.通常配列の計算は、for文を用いますが、
  以下の例のように必要ありません。 

例1
通常の配列では
for(i=0; i<10000; i++)
{
   b[i] = a[i] + 2;

}

ですが、

valarrayでは、

   b = a + 2;

です。

例2
通常の配列では
for(i=0; i<1000; i++)
{
   b[i] = sin(a[i]);
}
ですが、

valarrayでは、

   b = sin(a);

です。

4.必要なヘッダー
  <valarray.h>

5.宣言の仕方
  例
  valarray<int>       a;
  valarray<double>    b;
  valarray<long double> c;

6.使用方法

  valarray<T>  a, b, y;
  double      c;
  int        i, sz;
  (Tは、double、int等を意味する。)

テンプレート・クラスvalarrayのメンバー関数(メソッド)

メンバー関数

使い方

意味

size()

y=a.size()

aの配列の大きさ

resize(int)

y=a.resize(sz)

aの配列の大きさをszに変更

sum()

y=a.sum()

aの全要素の合計

min()

y=a.min()

aの要素の最小値

max()

y=a.max()

aの要素の最大値

演算操作

演算

使い方

意味(すべてのiに対して)

+

y=a+b
y=a+c

y[i]=a[i]+b[i]
y[i]=a[i]+c

-

y=a-b
y=a-c

y[i]=a[i]-b[i]
y[i]=a[i]-c

*

y=a*b
y=a*c

y[i]=a[i]*b[i]
y[i]=a[i]*c

/

y=a/b
y=a/c
y=c/a

y[i]=a[i]/b[i]
y[i]=a[i]/c
y[i]=c/a[i]

abs

y=abs(a)

y[i]=abs(a[i])

exp

y=exp(a)

y[i]=exp(a[i])

log

y=log(a)

y[i]=log(a[i])        ここでのlogの底はe

log10

y=log10(a)

y[i]=log10(a[i])      ここでのlogの底は10

pow

y=pow(a, b)
y=pow(a, c)
y=pow(c, a)

y[i]=pow(a[i], b[i])    つまり y[i]=a[i]b[i]
y[i]=pow(a[i], c)      つまり y[i]=a[i]c
y[i]=pow(c, a[i])      つまり y[i]=ca[i]

sqrt

y=sqrt(a)

y[i]=sqrt(a[i])       平方根

cos

y=cos(a)

y[i]=cos(a[i])

sin

y=sin(a)

y[i]=sin(a[i])

tan

y=tan(a)

y[i]=tan(a[i])

acos

y=acos(a)

y[i]=acos(a[i])      つまり、y[i]=cos-1(a[i])、y[i]はラジアン

asin

y=asin(a)

y[i]=asin(a[i])      つまり、y[i]=sin-1(a[i])、y[i]はラジアン

atan

y=atan(a)

y[i]=atan(a[i])      つまり、y[i]=tan-1(a[i])、y[i]はラジアン

atan2

y=atan2(a, b)  
y=atan2(a, c)
y=atan2(c, a)

y[i]=atan2(a[i], b[i])=atan(a[i]/b[i])
y[i]=atan2(a[i], c)=atan(a[i]/c)
y[i]=atan2(c, a[i])=atan(c/a[i])

cosh

y=cosh(a)

y[i]=cosh(a[i])

sinh

y=sinh(a)

y[i]=sinh(a[i])

tanh

y=tanh(a)

y[i]=tanh(a[i])

7.関数の引数に用いる場合

  例
  ヘッダーファイル
  public:
  void __fastcall setValue(valarray<double>&);    // 参照型(引数のvalarrayのアドレスを渡す)
  valarray<double> __fastcall getValue();

  private:
  valarray<double> iValue;

  cppファイル
  void __fastcall setValue(valarray<double>& aValue)
  {
     iValue.resize(aValue.size());
     iValue = aValue;
     return;
  }


  valarray<double> __fastcall getValue()
  {
     return iValue;
  }