| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| 22.1 Introduction to fast Fourier transform | ||
| 22.2 Functions and Variables for fast Fourier transform | ||
| 22.3 Introduction to Fourier series | ||
| 22.4 Functions and Variables for Fourier series |
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
fftパッケージは高速Fourier変換の(数式計算ではなく)数値計算に関する関数を含みます。
Categories: Fourier transform ·Numerical methods ·Share packages ·Package fft
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
形式 r %e^(%i t)の複素値を形式 a + b %iに変換します。
ここで、rは大きさで tは位相です。
rと tは、同じサイズの1次元配列です。
配列のサイズは2のべき乗である必要はありません。
関数から戻ると、入力配列の元の値は実部 aと虚部 bに置き換えられます。
出力は以下のように計算されます。
a = r cos(t) b = r sin(t) |
polartorectは recttopolarの逆関数です。
load(fft)はこの関数をロードします。
fftも参照してください。
Categories: Package fft ·Complex variables
形式 a + b %iの複素値を形式 r %e^(%i t)に変換します。
ここで、aは実部で bは虚部です。
aと bは同じサイズの1次元配列です。
配列のサイズは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
複素逆高速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
複素高速 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
デフォルト値: 0
fortindentは
fortranコマンドが表示する式の左マージンインデントを制御します。
0は標準のプリントアウト(すなわち6スペース)を与え、
正の値は式を更に右に印字するようにします。
Categories: Translation and compilation
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
デフォルト値: false
fortspacesが trueの時、
fortranは印字行それぞれを80カラムまでスペースで埋めます。
Categories: Translation and compilation
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
式 exprもしくは関数 fの根を閉区間
[a, b]上で見つけます。
式 exprは等式でも問題ありません。
その場合、 find_rootは
lhs(expr) - rhs(expr)の根を探します。
Maximaが exprもしくは fを [a, b]上で評価できて
exprもしくは fは連続という仮定の下、
find_rootが根を見つけるか、あるいはもし複数の根があるなら根の1つを見つけることが保証されます。
find_rootは始め、2分木探索を適用します。
もし対象の関数が十分滑らかなら find_rootは代わりに線形内挿を適用します。
f_find_rootは find_rootの多倍長浮動小数点版です。
関数は多倍長浮動小数点数値を使って計算され、多倍長浮動小数点の結果が返されます。
他の点では bf_find_rootは find_rootと同一であり、以下の記述は
bf_find_rootに同様に適用されます。
find_rootの精度は abserrと relerrに支配されます。
それらは fine_rootへのオプションのキーワード引数です。
これらのキーワード引数は形式 key=valを取ります。
キーワード引数は
根での関数値の望まれる絶対エラー。デフォルトは find_root_absです。
根の望まれる相対エラー。デフォルトは 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
exprを xの1変数関数と考えて、
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
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
fourieパッケージは Fourier級数のシンボル計算のための関数を含みます。
fourieパッケージの中には
Fourier積分係数を計算する関数や式の操作のためのいくつかの関数があります。
Categories: Fourier transform ·Share packages ·Package fourie
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
もし equal (x, y)なら trueを返し、
そうでないなら falseを返します。
(この場合 equal (x, y)がするようなエラーメッセージを与えません。)
Categories: Package fourie
remfun (f, expr)は
exprの中の f (arg)すべてを argで置き換えます。
remfun (f, expr, x)は
exprの中の f (arg)を
argが変数 xを含むときだけ
argで置き換えます。
Categories: Package fourie
もし exprが関数 fを含むなら
funp (f, expr)は trueを返します。
もし exprが関数 fを含み、変数
xが fのインスタンスの1つの引数のどこかにあるなら、
funp (f, expr, x)は trueを返します。
Categories: Package fourie
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
区間 [-p, p]上で定義された f(x)の
Fourier係数のリストを返します。
Categories: Package fourie
もし sinnpiflagが trueなら sin (n %pi)を0に整理します。
もし cosnpiflagが trueなら cos (n %pi)を
(-1)^nに整理します。
Categories: Package fourie ·Trigonometric functions ·Simplification functions
デフォルト値: true
foursimpを参照してください。
Categories: Package fourie
デフォルト値: true
foursimpを参照してください。
Categories: Package fourie
Fourier係数 lのリストから
limit項までのFourier級数を構成して返します。
(limitは infも取り得ます。)
xと pは fourierにおけるものと同じ意味を持ちます。
Categories: Package fourie
[0, p]上で定義された
f(x)の Fourierコサイン係数を返します。
Categories: Package fourie
[0, p]上で定義された
f(x)の Fourierサイン係数を返します。
Categories: Package fourie
fourexpand (foursimp (fourier (f, x, p)),
x, p, 'inf)を返します。
Categories: Package fourie
[minf, inf]上で定義された
f(x)の Fourier積分係数のリストを構成して返します。
Categories: Package fourie
[0, inf]上の f(x)の Fourierコサイン積分係数を返します。
Categories: Package fourie
[0, inf]上の f(x)の Fourierサイン積分係数を返します。
Categories: Package fourie
| [ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は市川 雄二によって2012年1月月5日にtexi2html 1.82を用いて生成されました。