ミニゲーム: 数学ラボ

概要

数学ラボは math.jsMathJax を動的に読み込み、分数中心の厳密計算と高精度の数値計算を 同時に扱える研究用ワークシートです。行列・単位・複素数を含む式を解析しながら、解析学・統計学・数値解析向けの 拡張関数を多数備えています。計算を実行すると 12 XP、グラフ描画で 8 XP を獲得でき、累計処理数からスコアが算出されます。

画面構成

入力と実行の流れ

  1. 初期状態では関数表記入力欄が表示され、Shift+Enter で計算を実行します。モードを切り替えると入力欄が自動で同期し、プレビューも即時更新されます。
  2. 計算実行時は式を math.js で構文解析し、厳密結果と BigNumber ベースの近似結果をそれぞれ算出します。履歴・変数リスト・ans が同時に更新されます。
  3. 結果カードのコピー機能は現在表示中のモードに応じたテキストをクリップボードへ送ります。
  4. リセットすると両方の入力欄と結果が初期化され、プレースホルダー表示に戻ります。

角度・単位・キーパッドの補助機能

ラジアン/度のトグルは三角・逆三角・双曲線関数にフックしており、行列や配列を含む入力にも適用されます。 キーパッドの挿入処理は現在の入力モードに合わせて ASCII ↔ 記号変換を行うため、記号モードでも括弧や関数名が崩れません。 右下の「ユニット変換テンプレ」からは代表的な単位変換式を選択して即座に挿入できます。

グラフ描画の仕様

履歴とスコープ管理

数学ラボは math.js のスコープを共有しており、代入式を評価すると変数カードに即座に反映されます。履歴は表示モードに合わせて内容を整形し、ans だけはクリア操作でも保持されます。必要に応じて「変数をクリア」で ans 以外を初期化し、ステータスバーに通知を出します。

ステータスとショートカット

ステータスバーは notifyStatusKey によって時刻付きメッセージを表示し、入力欄へフォーカスした場合はプレイ中ショートカット (P/R) を自動で無効化します。Shift+Enter 実行に加え、角度・結果モードの切り替えやグラフ描画時にも通知が更新されます。

スコアと経験値

計算 1 回につき 12 XP、グラフ描画 1 回につき 8 XP が awardXp に通知され、スコアは「計算×2 + グラフ×3」で集計されます。ミニゲーム起動時に start() が呼ばれ、準備完了メッセージを出した時点から計測が始まります。

数学ラボ専用関数リファレンス

math.js 本体の機能に加え、以下の拡張関数を上書き・追加しています。引数は math.js の構文に従い、行列や配列へもマップ処理されます。

基数・情報処理

baseDecode(value, base)
文字列や配列を 2〜30 進から 10 進実数へ変換します。無効な桁はエラーになります。
baseEncode(value, base, precision?)
実数を指定した基数へ変換し、小数部は最大 24 桁・既定 12 桁まで出力します。
baseConvert(value, fromBase, toBase, precision?)
任意基数表記を読み取り、別の基数へ表現します。入力・出力ともに文字列として扱います。

解析・特殊関数

ln(value)
math.js の log が利用可能なコンテキストを優先し、存在しない場合は BigNumber 側をフォールバックに使用します。
integral(expr, variable, lower?, upper?, options?)
下限・上限が揃っていれば適応型シンプソン法で数値積分し、未指定の場合はシンボリック積分で原始関数を返します。
taylorSeries(expr, variable, order, center)
導関数を繰り返し評価して最大 32 次までのテイラー展開を文字列として生成します。
numericIntegrate(expr, variable, lower, upper, options?)
積分区間を与えて適応型シンプソン法を直接呼び出し、高精度な数値積分を行います。
tetra(base, height)
実数引数に限定したテトレーション(反復冪)を評価します。負の高さは逆数で処理します。
slog(base, value)
底が 1 から離れた正数であることを前提に、反復対数(スーパーログ)を計算します。
solveEq(expr, variable, guess, options?)
ニュートン法で 1 変数の根を探索します。初期値や許容誤差は options で指定可能です。
solveSystem(equations, variables, initialGuess?, options?)
ニュートン法を拡張した連立方程式ソルバで、ヤコビアンを自動生成して解を改善します。
solveLinear(matrix, vector)
行列とベクトルを受け取り、ガウス消去法で線形方程式を解きます。
minimize(expr, variable, guess, options?) / maximize(...)
ニュートン法ベースの 1 変数最適化を行い、勾配とヘッセ行列を評価して極値を探索します。
gamma, beta, digamma, polygamma, harmonic, zeta, logGamma, lambertW
ガンマ関数系・ゼータ関数・調和数・Lambert W などの特殊関数を実数域で実装し、配列や行列にも要素ごと適用されます。

統計・確率

normalPdf, normalCdf, normalInv
正規分布の密度・累積・逆累積を評価し、平均と標準偏差の検証を行います。
poissonPmf, poissonCdf
ポアソン分布の確率質量・累積分布を実装し、平均の正値チェックを行います。
binomialPmf, binomialCdf
二項分布の確率質量・累積分布を多倍長演算で評価します。
logit, sigmoid
ロジット変換とシグモイド関数を数値検証付きで提供します。
erfc
エラー関数の補数を math.js の erf と減算関数を組み合わせて算出します。

数値安定性とフォールバック

数学ラボでは分数モードが原因で発生する型変換エラーを検出し、必要に応じて BigNumber 設定へフォールバックするラッパーを自動適用しています。特に sqrt・指数関数・三角関数・逆三角関数などは全て保護されています。 また factorialcombinationspermutations は BigInt を用いた正確な計算に切り替え、負数・非整数入力には詳細なエラーメッセージを返します。