• 検索結果がありません。

第 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をかけた虚部との和で指定されます.例えば,方程式x24x+ 13 = 0 の根 はMaximaでは2+3*%iと2-3*%iで表現されます. ここで複素数の実部はrealpart函数,虚部は

imagpart函数で取り出せます.複素数は整数,有理数,浮動小数点の自然な拡張となっている為,実

部と虚部は,これらの数で表現されています.

2.1.2 数値に関連する大域変数

数値に関連する大域変数

³

変数名 初期値 取り得る値 概要

domain real [real,complex] 多項式の係数環を指定

float2bf false [true,false] floatbigfloatの際の警告の有無を指定

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+25

%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型の数値を引数とし,小数点以下を切り捨てます.