第 2 章 Maxima のデータとその操作
2.1 数値
2.1.1 Maxima で扱える数値について
Maximaで扱える数値には,整数,有理数,浮動小数点と複素数があります. その他に代数的整数
もありますが,代数的整数の場合はその最小多項式を用いる為,多項式の節で説明します.
整数値の入力はC等と同じ入力になります.Cとの違いはメモリ制約を除けば桁数に限界はあり
ません.有理数は128/8989 の様に,演算子/の両辺に整数を置いたもので表現されます.この有理
数に関しても整数と同様にメモリの制約を除くと分母,分子の桁数に上限はありません.
尚,整数と有理数の演算を行うと,基本的に有理数になります.但し,分母を消去出来る様な計算 を整数や有理数で行うと,結果は整数になります. 尚,整数には実際は通常の整数のfixnum型と可 変桁の整数のbignum型の二種類があります. 整数の場合,この二種類の違いを認識する必要は特 にありません.
Maximaの浮動小数点にはfloat型とbigfloat型の二種類があります.float型は16桁の倍精度で 1.2や1.3e-4の様に入力が出来ます.bigfloat型は任意精度の実数で大域変数fpprecで指定した桁 数の実数です.このfpprecの値を大きくすると精度も当然高くなります. ここで計算精度がそれな りに必要でも,結果の表示には少ししか必要がない場合,大域変数fpprintprecに大域変数fpprecと は別の表示の桁数を設定すれば,大域変数fpprintprecに設定した桁数でbigfloat型の数値が表示さ れます.float型からbigfloat型への変換はbigfloat函数で行います.
浮動小数点と整数や有理数の演算は,型の変更を実行しない限り浮動小数点となります.又,bigfloat 型とfloat型を混在して計算する場合はエラーになります. その為に変換函数による処理が必要に なります.
複素数は実部と%iをかけた虚部との和で指定されます.例えば,方程式x2−4x+ 13 = 0 の根 はMaximaでは2+3*%iと2-3*%iで表現されます. ここで複素数の実部はrealpart函数,虚部は
imagpart函数で取り出せます.複素数は整数,有理数,浮動小数点の自然な拡張となっている為,実
部と虚部は,これらの数で表現されています.
2.1.2 数値に関連する大域変数
数値に関連する大域変数
¶ ³
変数名 初期値 取り得る値 概要
domain real [real,complex] 多項式の係数環を指定
float2bf false [true,false] float→bigfloatの際の警告の有無を指定
fpprec 16 正整数 bigfloat型の桁数を指定
fpprintprec 0 正整数 bigfloat型の表示桁数を指定
m1pbranch false [ture,false] -1の原始n乗根自動変換の有無を指定
radexpand true [true,false] 根号の外に出すかどうかを指定
µ ´
大域変数domainは函数等の動作に影響を与えます.domainはデフォルトでrealが設定されてい
ます.これはMaximaが主に実数上で処理を行う事を意味しています. これに対して値をcomplex
にすると,Maximaで処理する世界は複素数の世界となる事を意味します.
更に,domainをcomplex,大域変数のm1pbranchをtrueにした場合,-1のn乗根は原始n乗根に 自動的に変換されます.
大域変数float2bfは,falseの場合にbfloat函数で浮動小数点数をbigfloat型の数値に変換する時 点で計算精度が落るとの警告メッセージを表示させます.
大域変数fpprecはbigfloat型数値の桁数を定めます.即ち,fpprecを正整数nに設定するとbigfloat 型はn桁になります.
大域変数radeexpandは式√
a2b の様に根号の外に出せる因子が式に含まれる場合,trueであれ ば,その様な因子を根号の外に自動的に出させる大域変数です.
2.1.3 Maxima の定数
Maximaの定数
¶ ³
%e 自然底e
%gamma Eulerの定数
%phi 1+2√5
%pi 円周率π
false Bool代数の定数.偽(LISPのnil) true Bool代数の定数.真(LISPのt) inf 正の実無限大.
minf 負の実無限大.
infinity 複素無限大,任意の偏角で無限大
zeroa 0+.limit函数で利用 zerob 0−.limit函数で利用
µ ´
Maximaには幾つかの定数があり,大雑把に3種類に分類出来ます.
最初の一つは%piの様な通常の定数,もうひとつは,tやnilといった真偽値,最後にMaximaが用 いるinfの様な定数です.更に,zeroaやzerobはlimit函数だけで用いる定数です.
(%i55) limit(1/x,x,zeroa);
(%o55) inf
(%i56) limit(1/x,x,zerob);
(%o56) minf
但し,limit(1/(x-1),x,1,’plus)の意味でlimit(1/(x-1),x,1+’zeroa)の様な使い方は出来ません.
尚,infやminfといった極限に関連する数を含む式の評価はlimit函数で行えます. この場合
2.1.4 数値に関連する函数
数値に関連する述語函数
¶ ³
函数名 trueとなる条件
numberp 整数,有理数,浮動小数や可変長実数
bfloatp bigfloat型の数値
floatnump 浮動小数点数
integerp 整数
evenp 偶数
oddp 奇数
constantp 定数の場合
µ ´
これらの述語函数は全て引数が一つです.
maxとmin
¶ ³
max(⟨実数値1⟩,⟨実数値2⟩,· · ·) ⟨実数値1⟩,⟨実数値2⟩,· · ·)の最大値 min(⟨実数値1⟩,⟨実数値2⟩,· · ·) ⟨実数値1⟩,⟨実数値2⟩,· · ·)の最小値
µ ´
Maximaは与えられた実数列の最大値をmax函数,最小値をmin函数で求めます.
数値に関連する函数
¶ ³
函数名 変換前 変換後
bfloat 全ての数 → bigfloat型
isqrt 整数 → 与えられた整数の平方根を越えない整数
fix 実数 → 与えられた実数を越えない最大の整数
entier 実数 → 与えられた実数を越えない最大の整数
random 数値 → 0から与えられた数値-1迄の間の乱数
cabs 式 → 与式の複素数としての絶対値
realpart 式 → 与式の実部
imagpart 式 → 与式の虚部
cargs 式 → 与式の偏角
sqrt 式 → 与式の平方根
µ ´
最初のbfloatは全ての数と数値函数をbigfloat型に変換します.
isqrt函数は引数⟨整数⟩の絶対値の平方根を越えない整数値を返します.
(%i50) isqrt(-3);
(%o50) 1
(%i51) isqrt(-4);
(%o51) 2
(%i52) isqrt(10);
(%o52) 3
(%i53) isqrt(-10);
(%o53) 3
尚,isqrt函数は引数が整数で無ければ,入力式をそのまま返却します.
fix函数とentirer函数は⟨数値⟩が実数の場合,⟨数値⟩を越えない最大の整数nを返す函数で, 両者の違いは全くありません.
(%i42) fix(10);
(%o42) 10
(%i43) fix(-10);
(%o43) - 10
(%i44) fix(10.5);
(%o44) 10
(%i45) fix(-10.5);
(%o45) - 11
(%i46) entier(10);
(%o46) 10
(%i47) entier(-10);
(%o47) - 10
(%i48) entier(10.5);
(%o48) 10
(%i49) entier(-10.5);
(%o49) - 11
尚,この例の様に,絶対値で越えない数を返すのではないので注意が必要です.
random函数は,引数として⟨数値⟩を取り,0から⟨数値⟩ −1の間の整数乱数を返す函数です.
cabs函数,realpart函数とimagpart函数は各々複素数の絶対値,実部と虚部を返す函数です.一般 の式に対しては,展開した式の%iを含まない部分式を実部,%iを含む式を虚部とします.
carg函数は与えられた複素数の偏角 θをπ≥θ >−πの範囲で返す函数です.
sqrtは⟨式⟩が実数の場合はその平方根を返します.尚,Maxima内部では⟨式⟩ˆ (1/2)で表現さ れています.
LISP由来の数値函数
¶ ³
?round ⟨数値⟩の最も近い整数
?truncate ⟨数値⟩の小数点以下を切り捨て
µ ´
これらの数値函数はLISPの函数をそのまま利用します.その為,先頭に?が付きます.
?round函数は⟨数値⟩を最も近い整数に丸めます.ここで,引数はfloat型であって,bigfloat型で はありません.
?truncate函数はfloat型の⟨数値⟩を引数とし,小数点以下を切り捨てます.