トラブルシューティング
|
説明
|
|
単位パッケージでは、単位の変換や単位の使用に関して一貫性の有る機能を提供しています。これが複雑な処理であることから、パッケージをカスタマイズする必要が出てきます。標準的な意味を変更するとか、変換因子を変えるとか、または新しい単位を追加することなどです。
|
|
単位に関する標準的な説明の変更法
|
|
単位パッケージが不正な変換因子またはエラーを帰してきた時、その単位に対して望んでいた意味と対比できたかどうかを調べる必要があります。例えば、ラングリーという単位について考えてみます。
ラングリーに関する説明の意味全てを知りたい場合には、関数 GetUnits を用いると良いでしょう。
>
|
Units[GetUnits](name = langley);
|
| (2.1) |
ラングリーは、エネルギーおよび電力という二つの意味を有しています。
ラングリーの標準的な意味を決めるため、関数 GetUnit ( GetUnits ではないので注意)を説明オプションに加えます。
>
|
Units[GetUnit](langley, context);
|
| (2.2) |
標準的な意味はエネルギーです。
単位名は異なる次元と組み合わせて表すことができます。各次元に関係付けられている単位に関して、それぞれに固有のヘルプ・ページがあります。電力ラングレーについての情報を含む 1 つ以上のヘルプ・ページを表示させるためには、以下のようにしてヘルプを使えば良いでしょう。
>
|
help('Units'[convert(langley[energy], dimensions)]);
|
ページ surface energy density pageにおいて、電力ラングレーに関する資料はありません。関連のヘルプ・ページを表示するには、以下のようにすれば良いでしょう。
>
|
help('Units'[convert(langley[power], dimensions)]);
|
パワー langley を既定として設定するには AddUnit 関数を使います。
>
|
Units[AddUnit](langley, context=power, default):
|
|
|
単位の変換因子の変更法
|
|
単位に関する変換因子は思うようなものでは無いかも知れません。例えば、ヘルツ (hertz) はサイクル毎秒を意味しますが、SI 単位系に従い、時間の逆数 1/s として実現されています。このため、ヘルツを毎分あたりの回転数 (rpm; revolution per minute) に変換できるようにするには、オプション symbolic を使う必要があります。この変換は余分な因子 1/(2p) を含んでいます。
>
|
convert(16, units, Hz, rpm, symbolic);
|
| (3.1) |
この場合、hertz を回転毎秒 (revolution per second)、すなわち 2*Pi*radians/s として再定義する必要があります。これは既に存在している値を変更することから、オプション check = false を AddUnit に加えておく必要が生じます。
>
|
Units[AddUnit](hertz, context = SI, conversion = 2*Pi*radian/s, check=false);
convert(16, units, Hz, rpm, symbolic);
|
| (3.2) |
これが求める結果です。
科学的観測に基づいた値は,測定精度が向上することから、修正を受けます。例えば、摂氏 0 度における水銀柱 1 メートルは、現在、133.322 キロ・パスカルになっています。
>
|
convert(1, units, mHg[`0degC`], kPa);
|
| (3.3) |
以下によりその値を 133.322,47 パスカルに設定しています:
>
|
Units[AddUnit](meters_mercury, context=`0degC`, conversion=133.32247*kPa, check=false);
convert(1, units, mHg[`0degC`], kPa);
|
| (3.4) |
|
注記: 変更は自動的に伝播して行きません。例えば、マイルの定義を変更しても、マイル毎時 (miles_per_hour) が自動的に修正されることはありません。それぞれを個別に行う必要があるのです。
|
>
|
Units[AddUnit](mile, context=standard, conversion=1609*m, check=false);
Units[AddUnit](mile_per_hour, context=standard, conversion=1609*m/h, check=false);
convert(100, units, mph, km/h);
|
| (3.5) |
パッケージUnitsにおいては、変換係数を正確なものに保つために大変な注意が払われていますが、幾つかの間違いが存在する可能性が有ります。この種の問題は、先の例に示したように、関数 AddUnit を用いて解決することができます。
|
|
新しい単位の追加法
|
|
パッケージ Units は包括的なものです。それでも、追加の単位を加えたくなるかも知れません。
もし新しい単位が既存の単位をべき乗した積と同じ次元を有している場合には、適切な文脈 (context) と変換オプションと併せて、関数 AddUnit を用いるのが良いでしょう。他のオプションの書き加えをできるが、必要というわけではありません。
>
|
Units[AddUnit](movie,context=duration,conversion=1.5*h,spellings={movies});
convert(1,units,day,movies);
|
| (4.1) |
新しい単位が新規の次元に関連付けられている場合には、単位および次元の両方を関数 AddBaseUnit を用いて追加処理します。文脈および次元が要求されます。
>
|
Units[AddBaseUnit](rating,context=stars,dimension=quality);
|
|
|
初期化ファイルへの変更点の追加法
|
|
上記のような変更を加えて Maple を自分専用にカスタマイズしたい場合は、これらを Maple 初期化ファイルに加える必要があります。初期化ファイルに加えることのできるプログラムの例を以下に示します:
>
|
# change context of the langley
Units[AddUnit](langley, context=power, default):
# set hertz to 2 Pi radians per second
Units[AddUnit](hertz, context = SI, conversion = 2*Pi*radian/s, check=false):
# set a meter of mercury at 0 degrees C to 133,322.58 pascals
Units[AddUnit](meter_mercury, context=`0degC`, conversion=133.32212*kPa, check=false):
# define a mile to be exactly 1609 meters
Units[AddUnit](mile, context=standard, conversion=1609*m, check=false):
# define a mile per hour to be exactly 1609 meters per hour
Units[AddUnit](mile_per_hour, context=standard, conversion=1609*m/h, check=false):
|
|
|