[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

# 22. Numerical

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 22.1 Introduction to fast Fourier transform

`fft`パッケージは高速Fourier変換の（数式計算ではなく）数値計算に関する関数を含みます。

·

Categories: Fourier transform ·Numerical methods ·Share packages ·Package fft

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 22.2 Functions and Variables for fast Fourier transform

関数: polartorect (r, t)

  形式 `r %e^(%i t)`の複素値を形式 `a + b %i`に変換します。 ここで、rは大きさで tは位相です。 rと tは、同じサイズの１次元配列です。 配列のサイズは2のべき乗である必要はありません。

  関数から戻ると、入力配列の元の値は実部 `a`と虚部 `b`に置き換えられます。 出力は以下のように計算されます。

      a = r cos(t)
      b = r sin(t)

  `polartorect`は `recttopolar`の逆関数です。

  `load(fft)`はこの関数をロードします。 `fft`も参照してください。

  ·

  Categories: Package fft ·Complex variables

関数: recttopolar (a, b)

  形式 `a + b %i`の複素値を形式 `r %e^(%i t)`に変換します。 ここで、aは実部で bは虚部です。 aと bは同じサイズの１次元配列です。 配列のサイズは2のべき乗である必要はありません。

  関数から戻ると、入力配列の元の値は大きさ `r`と偏角 `t`に置き換えられます。 出力は以下のように計算されます。

      r = sqrt(a^2 + b^2)
      t = atan2(b, a)

  計算された偏角は `-%pi`から `%pi`の範囲の中にあります。

  `recttopolar`は `polartorect`の逆関数です。

  `load(fft)`はこの関数をロードします。 `fft`も参照してください。

  ·

  Categories: Package fft ·Complex variables

関数: inverse_fft (y)

  複素逆高速Fourier変換を計算します。 yは変換されるデータを含むリストもしくは配列です。 要素の数は2のべき乗でなければいけません。 要素は、数リテラル（整数、有理数、浮動小数点、多倍長浮動小数点）、シンボル定数、 もしくは、 `a`と `b`が数リテラルもしくはシンボル定数である式 `a + b*%i`でなければいけません。

  `inverse_fft`は yと同じタイプの新しいオブジェクトを返します。 yは変更されません。 結果はいつも浮動小数点か `a`と `b`が浮動小数点であるところの式 `a + b*%i`として計算されます。

  逆離散Fourier変換は以下のように定義されます。 `x`を逆変換の出力とします。 `j`が0から `n - 1`まで変わる中、

      x[j] = sum(y[k] exp(+2 %i %pi j k / n), k, 0, n - 1)

  `load(fft)`はこの関数をロードします。

  `fft` (正変換), `recttopolar`, `polartorect`も参照してください。

  例:

  実数データ。

      (%i1) load (fft) $
      (%i2) fpprintprec : 4 $
      (%i3) L : [1, 2, 3, 4, -1, -2, -3, -4] $
      (%i4) L1 : inverse_fft (L);
      (%o4) [0.0, 14.49 %i - .8284, 0.0, 2.485 %i + 4.828, 0.0,
                             4.828 - 2.485 %i, 0.0, - 14.49 %i - .8284]
      (%i5) L2 : fft (L1);
      (%o5) [1.0, 2.0 - 2.168L-19 %i, 3.0 - 7.525L-20 %i,
      4.0 - 4.256L-19 %i, - 1.0, 2.168L-19 %i - 2.0,
      7.525L-20 %i - 3.0, 4.256L-19 %i - 4.0]
      (%i6) lmax (abs (L2 - L));
      (%o6)                       3.545L-16

  複素数データ。

      (%i1) load (fft) $
      (%i2) fpprintprec : 4 $
      (%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $
      (%i4) L1 : inverse_fft (L);
      (%o4) [4.0, 2.711L-19 %i + 4.0, 2.0 %i - 2.0,
      - 2.828 %i - 2.828, 0.0, 5.421L-20 %i + 4.0, - 2.0 %i - 2.0,
      2.828 %i + 2.828]
      (%i5) L2 : fft (L1);
      (%o5) [4.066E-20 %i + 1.0, 1.0 %i + 1.0, 1.0 - 1.0 %i,
      1.55L-19 %i - 1.0, - 4.066E-20 %i - 1.0, 1.0 - 1.0 %i,
      1.0 %i + 1.0, 1.0 - 7.368L-20 %i]
      (%i6) lmax (abs (L2 - L));
      (%o6)                       6.841L-17

  ·

  Categories: Package fft

関数: fft (x)

  複素高速 Fourier変換を計算します。 xは変換されるデータを含むリストもしくは配列です。 要素の数は2のべき乗でなければいけません。 要素は、数リテラル（整数、有理数、浮動小数点、多倍長浮動小数点）、シンボル定数、 もしくは `a`と `b`が数リテラルもしくはシンボル定数である式 `a + b*%i`でなければいけません。

  `fft`は xと同じタイプの新しいオブジェクトを返します。 xは変更されません。 結果はいつも浮動小数点か、 `a`と `b`が浮動小数点であるところの式 `a + b*%i`として計算されます。

  離散Fourier変換は以下のように定義されます。 `y`を変換の出力とします。 `k`が0から `n - 1`まで変わる中、

      y[k] = (1/n) sum(x[j] exp(-2 %i %pi j k / n), j, 0, n - 1)

  データ xが実数の時、 実係数 `a`と `b`は以下のように計算することができます。

      x[j] = sum(a[k]*cos(2*%pi*j*k/n)+b[k]*sin(2*%pi*j*k/n), k, 0, n/2)

  ここで、

      a[0] = realpart (y[0])
      b[0] = 0

  そして `k`が1からn/2 - 1まで変わる中、

      a[k] = realpart (y[k] + y[n - k])
      b[k] = imagpart (y[n - k] - y[k])

  そして、

      a[n/2] = realpart (y[n/2])
      b[n/2] = 0

  `load(fft)`はこの関数をロードします。

  `inverse_fft` (逆変換), `recttopolar`, `polartorect`も参照してください。

  例:

  実数データ。

      (%i1) load (fft) $
      (%i2) fpprintprec : 4 $
      (%i3) L : [1, 2, 3, 4, -1, -2, -3, -4] $
      (%i4) L1 : fft (L);
      (%o4) [0.0, - 1.811 %i - .1036, 0.0, .6036 - .3107 %i, 0.0,
                               .3107 %i + .6036, 0.0, 1.811 %i - .1036]
      (%i5) L2 : inverse_fft (L1);
      (%o5) [1.0, 2.168L-19 %i + 2.0, 7.525L-20 %i + 3.0,
      4.256L-19 %i + 4.0, - 1.0, - 2.168L-19 %i - 2.0,
      - 7.525L-20 %i - 3.0, - 4.256L-19 %i - 4.0]
      (%i6) lmax (abs (L2 - L));
      (%o6)                       3.545L-16

  複素数データ。

      (%i1) load (fft) $
      (%i2) fpprintprec : 4 $
      (%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $
      (%i4) L1 : fft (L);
      (%o4) [0.5, .3536 %i + .3536, - 0.25 %i - 0.25,
      0.5 - 6.776L-21 %i, 0.0, - .3536 %i - .3536, 0.25 %i - 0.25,
      0.5 - 3.388L-20 %i]
      (%i5) L2 : inverse_fft (L1);
      (%o5) [1.0 - 4.066E-20 %i, 1.0 %i + 1.0, 1.0 - 1.0 %i,
      - 1.008L-19 %i - 1.0, 4.066E-20 %i - 1.0, 1.0 - 1.0 %i,
      1.0 %i + 1.0, 1.947L-20 %i + 1.0]
      (%i6) lmax (abs (L2 - L));
      (%o6)                       6.83L-17

  サインとコサイン係数の計算。

      (%i1) load (fft) $
      (%i2) fpprintprec : 4 $
      (%i3) L : [1, 2, 3, 4, 5, 6, 7, 8] $
      (%i4) n : length (L) $
      (%i5) x : make_array (any, n) $
      (%i6) fillarray (x, L) $
      (%i7) y : fft (x) $
      (%i8) a : make_array (any, n/2 + 1) $
      (%i9) b : make_array (any, n/2 + 1) $
      (%i10) a[0] : realpart (y[0]) $
      (%i11) b[0] : 0 $
      (%i12) for k : 1 thru n/2 - 1 do
         (a[k] : realpart (y[k] + y[n - k]),
          b[k] : imagpart (y[n - k] - y[k]));
      (%o12)                        done
      (%i13) a[n/2] : y[n/2] $
      (%i14) b[n/2] : 0 $
      (%i15) listarray (a);
      (%o15)          [4.5, - 1.0, - 1.0, - 1.0, - 0.5]
      (%i16) listarray (b);
      (%o16)           [0, - 2.414, - 1.0, - .4142, 0]
      (%i17) f(j) := sum (a[k]*cos(2*%pi*j*k/n) + b[k]*sin(2*%pi*j*k/n),
                          k, 0, n/2) $
      (%i18) makelist (float (f (j)), j, 0, n - 1);
      (%o18)      [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]

  ·

  Categories: Package fft

オプション変数: fortindent

  デフォルト値: 0

  `fortindent`は `fortran`コマンドが表示する式の左マージンインデントを制御します。 0は標準のプリントアウト(すなわち6スペース)を与え、 正の値は式を更に右に印字するようにします。

  ·

  Categories: Translation and compilation

関数: fortran (expr)

  Fortran文として exprを印字します。 出力行はスペースでインデントされます。 もし行が長過ぎるなら、 `fortran`は継続行を印字します。 `fortran`は指数演算子 `^`を `**`として印字し、 複素数 `a + b %i`を形式 `(a,b)`で印字します。

  exprは等式も取り、もしそうなら `fortran`は、 等式の右辺を左辺に割り当てる割り当て文を印字します。 特にもし exprの右辺が行列名なら、 `fortran`は行列の要素それぞれに対する割り当て文を印字します。

  もし exprが `fortran`が認識する何かでないなら、 クレームすることなく式を `grind`フォーマットで印字します。 `fortran`はリスト、配列、関数について知りません。

  `fortindent`は `fortran`コマンドが表示する式の左マージンインデントを制御します。 0は標準のプリントアウト(すなわち6スペース)を与え、 正の値は式を更に右に印字するようにします。

  `fortspaces`が `true`の時、 `fortran`は印字行それぞれを80カラムまでスペースで埋めます。

  `fortran`は引数を評価します; 引数のクォートは評価を無効にします。 `fortran`はいつも `done`を返します。

  例:

      (%i1) expr: (a + b)^12$
      (%i2) fortran (expr);
            (b+a)**12
      (%o2)                         done
      (%i3) fortran ('x=expr);
            x = (b+a)**12
      (%o3)                         done
      (%i4) fortran ('x=expand (expr));
            x = b**12+12*a*b**11+66*a**2*b**10+220*a**3*b**9+495*a**4*b**8+792
           1   *a**5*b**7+924*a**6*b**6+792*a**7*b**5+495*a**8*b**4+220*a**9*b
           2   **3+66*a**10*b**2+12*a**11*b+a**12
      (%o4)                         done
      (%i5) fortran ('x=7+5*%i);
            x = (7,5)
      (%o5)                         done
      (%i6) fortran ('x=[1,2,3,4]);
            x = [1,2,3,4]
      (%o6)                         done
      (%i7) f(x) := x^2$
      (%i8) fortran (f);
            f
      (%o8)                         done

  ·

  Categories: Translation and compilation

オプション変数: fortspaces

  デフォルト値: `false`

  `fortspaces`が `true`の時、 `fortran`は印字行それぞれを80カラムまでスペースで埋めます。

  ·

  Categories: Translation and compilation

関数: horner (expr, x)
関数: horner (expr)

  Horner規則に従って、もし指定されないなら xを主変数として使い、 exprの再配列された表現を返します。 `x`は exprの標準有理式形の主変数が使われる場合には省略できます。

  もし `expr`が数値的に評価されるものなら、 `horner`は時々、安定性が改善されます。 また、もし Maximaが Fortranで走らせるプログラムを生成するのに使われるなら、 役に立ちます。 `stringout`も参照してください。

      (%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155;
                                 2
      (%o1)            1.0E-155 x  - 5.5 x + 5.2E+155
      (%i2) expr2: horner (%, x), keepfloat: true;
      (%o2)            (1.0E-155 x - 5.5) x + 5.2E+155
      (%i3) ev (expr, x=1e155);
      Maxima encountered a Lisp error:

       floating point overflow

      Automatically continuing.
      To reenable the Lisp debugger set *debugger-hook* to nil.
      (%i4) ev (expr2, x=1e155);
      (%o4)                       7.0E+154

  ·

  Categories: Numerical methods

関数: find_root (expr, x, a, b, [abserr, relerr])
関数: find_root (f, a, b, [abserr, relerr])
関数: bf_find_root (expr, x, a, b, [abserr, relerr])
関数: bf_find_root (f, a, b, [abserr, relerr])
オプション変数: find_root_error
オプション変数: find_root_abs
オプション変数: find_root_rel

  式 exprもしくは関数 fの根を閉区間 [a, b]上で見つけます。 式 exprは等式でも問題ありません。 その場合、 `find_root`は `lhs(expr) - rhs(expr)`の根を探します。

  Maximaが exprもしくは fを [a, b]上で評価できて exprもしくは fは連続という仮定の下、 `find_root`が根を見つけるか、あるいはもし複数の根があるなら根の１つを見つけることが保証されます。

  `find_root`は始め、２分木探索を適用します。 もし対象の関数が十分滑らかなら `find_root`は代わりに線形内挿を適用します。

  `f_find_root`は `find_root`の多倍長浮動小数点版です。 関数は多倍長浮動小数点数値を使って計算され、多倍長浮動小数点の結果が返されます。 他の点では `bf_find_root`は `find_root`と同一であり、以下の記述は `bf_find_root`に同様に適用されます。

  `find_root`の精度は `abserr`と `relerr`に支配されます。 それらは `fine_root`へのオプションのキーワード引数です。 これらのキーワード引数は形式 `key=val`を取ります。 キーワード引数は

  abserr

    根での関数値の望まれる絶対エラー。デフォルトは `find_root_abs`です。

  relerr

    根の望まれる相対エラー。デフォルトは `find_root_rel`です。

  懸案の関数が `abserr`以下の何かに評価されるか、 近似値 x_0, x_1の差が `relerr * max(abs(x_0), abs(x_1))`以下になるなら `find_root`は停止します。

  `find_root_abs`と `find_root_rel`のデフォルト値はともに零です。

  `find_root`は探索区間の端で対象の関数が異なる符号を持つことを期待します。 関数の両方の終端での評価値が同じ符号を持つ時、 `find_root`の振る舞いは `find_root_error`に支配されます。 `find_root_error`が `true`の時、 `find_root`はエラーメッセージを出力します。 そうでないなら `find_root`は `find_root_error`の値を返します。 `find_root_error`のデフォルト値は `true`です。

  もし fが探索アルゴリズムの中のどのステップでも数以外の何かに評価されるなら、 `find_root`は部分的に評価された `find_root`式を返します。

  aと bの順序は無視されます; 根が探索される区間は [min(a, b), max(a, b)]です。

  例:

      (%i1) f(x) := sin(x) - x/2;
                                              x
      (%o1)                  f(x) := sin(x) - -
                                              2
      (%i2) find_root (sin(x) - x/2, x, 0.1, %pi);
      (%o2)                   1.895494267033981
      (%i3) find_root (sin(x) = x/2, x, 0.1, %pi);
      (%o3)                   1.895494267033981
      (%i4) find_root (f(x), x, 0.1, %pi);
      (%o4)                   1.895494267033981
      (%i5) find_root (f, 0.1, %pi);
      (%o5)                   1.895494267033981
      (%i6) find_root (exp(x) = y, x, 0, 100);
                                  x
      (%o6)           find_root(%e  = y, x, 0.0, 100.0)
      (%i7) find_root (exp(x) = y, x, 0, 100), y = 10;
      (%o7)                   2.302585092994046
      (%i8) log (10.0);
      (%o8)                   2.302585092994046
      (%i9) fpprec:32;
      (%o9)                           32
      (%i10) bf_find_root (exp(x) = y, x, 0, 100), y = 10;
      (%o10)                  2.3025850929940456840179914546844b0
      (%i11) log(10b0);
      (%o11)                  2.3025850929940456840179914546844b0

  ·

  Categories: Algebraic equations ·Numerical methods

関数: newton (expr, x, x_0, eps)

  exprを xの１変数関数と考えて、 Newton法による `expr = 0`の近似解を返します。 探索は `x = x_0`で始まり、 (xの現在値で評価された exprを使った) `abs(expr) < eps`が成り立つまで続きます。

  終了テスト `abs(expr) < eps`が `true`か `false`に評価される限り、 `newton`は未定義変数が exprの中に現れることを許します。

  このように exprは数に評価される必要はありません。

  `load(newton1)`はこの関数をロードします。

  `realroots`, `allroots`, `find_root`, `mnewton`も参照してください。

  例:

      (%i1) load (newton1);
      (%o1) /usr/share/maxima/5.10.0cvs/share/numeric/newton1.mac
      (%i2) newton (cos (u), u, 1, 1/100);
      (%o2)                   1.570675277161251
      (%i3) ev (cos (u), u = %);
      (%o3)                 1.2104963335033528E-4
      (%i4) assume (a > 0);
      (%o4)                        [a > 0]
      (%i5) newton (x^2 - a^2, x, a/2, a^2/100);
      (%o5)                  1.00030487804878 a
      (%i6) ev (x^2 - a^2, x = %);
                                                 2
      (%o6)                6.098490481853958E-4 a

  ·

  Categories: Algebraic equations ·Numerical methods

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 22.3 Introduction to Fourier series

`fourie`パッケージは Fourier級数のシンボル計算のための関数を含みます。

`fourie`パッケージの中には Fourier積分係数を計算する関数や式の操作のためのいくつかの関数があります。

·

Categories: Fourier transform ·Share packages ·Package fourie

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 22.4 Functions and Variables for Fourier series

関数: equalp (x, y)

  もし `equal (x, y)`なら `true`を返し、 そうでないなら `false`を返します。 (この場合 `equal (x, y)`がするようなエラーメッセージを与えません。)

  ·

  Categories: Package fourie

関数: remfun (f, expr)
関数: remfun (f, expr, x)

  `remfun (f, expr)`は exprの中の `f (arg)`すべてを argで置き換えます。

  `remfun (f, expr, x)`は exprの中の `f (arg)`を argが変数 xを含むときだけ argで置き換えます。

  ·

  Categories: Package fourie

関数: funp (f, expr)
関数: funp (f, expr, x)

  もし exprが関数 fを含むなら `funp (f, expr)`は `true`を返します。

  もし exprが関数 fを含み、変数 xが fのインスタンスの１つの引数のどこかにあるなら、 `funp (f, expr, x)`は `true`を返します。

  ·

  Categories: Package fourie

関数: absint (f, x, halfplane)
関数: absint (f, x)
関数: absint (f, x, a, b)

  `absint (f, x, halfplane)`は、 与えられた半平面 (`pos`, `neg`, または`both`)での fの xに関する不定積分を返します。 fは形式 `abs (x)`, `abs (sin (x))`, `abs (a) * exp (-abs (b) * abs (x))`の式を含むことができます。

  `absint (f, x)`は `absint (f, x, pos)`と同値です。

  `absint (f, x, a, b)`は xに関する fの aからbまでの定積分を返します。

  fは絶対値を含むことができます。

  ·

  Categories: Package fourie ·Integral calculus

関数: fourier (f, x, p)

  区間 `[-p, p]`上で定義された `f(x)`の Fourier係数のリストを返します。

  ·

  Categories: Package fourie

関数: foursimp (l)

  もし `sinnpiflag`が `true`なら `sin (n %pi)`を0に整理します。 もし `cosnpiflag`が `true`なら `cos (n %pi)`を `(-1)^n`に整理します。

  ·

  Categories: Package fourie ·Trigonometric functions ·Simplification functions

オプション変数: sinnpiflag

  デフォルト値: `true`

  `foursimp`を参照してください。

  ·

  Categories: Package fourie

オプション変数: cosnpiflag

  デフォルト値: `true`

  `foursimp`を参照してください。

  ·

  Categories: Package fourie

関数: fourexpand (l, x, p, limit)

  Fourier係数 lのリストから limit項までのFourier級数を構成して返します。 (limitは`inf`も取り得ます。) xと pは `fourier`におけるものと同じ意味を持ちます。

  ·

  Categories: Package fourie

関数: fourcos (f, x, p)

  `[0, p]`上で定義された `f(x)`の Fourierコサイン係数を返します。

  ·

  Categories: Package fourie

関数: foursin (f, x, p)

  `[0, p]`上で定義された `f(x)`の Fourierサイン係数を返します。

  ·

  Categories: Package fourie

関数: totalfourier (f, x, p)

  `fourexpand (foursimp (fourier (f, x, p)), x, p, 'inf)`を返します。

  ·

  Categories: Package fourie

関数: fourint (f, x)

  `[minf, inf]`上で定義された `f(x)`の Fourier積分係数のリストを構成して返します。

  ·

  Categories: Package fourie

関数: fourintcos (f, x)

  `[0, inf]`上の `f(x)`の Fourierコサイン積分係数を返します。

  ·

  Categories: Package fourie

関数: fourintsin (f, x)

  `[0, inf]`上の `f(x)`の Fourierサイン積分係数を返します。

  ·

  Categories: Package fourie

[ << ] | [ >> ] |  |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

この文書は市川 雄二によって2012年1月月5日にtexi2html 1.82を用いて生成されました。