LinearAlgeblaは、3×3行列の足し算・引き算・掛け算をクイズ形式で解きまくれる
線形代数トレーニングアプリです。
スワイプで問題を切り替え、マス目に答えを直接入力。
「パターンとして覚える」のではなく、「手が勝手に動く」感覚に近づくことを目標にしています。
教科書や講義で行列の計算方法はわかっても、 いざ紙とペンで3×3を計算しようとすると、時間がかかったり、 「どこに何を掛ければ良いか」を毎回思い出してしまうことがあります。
LinearAlgeblaでは、ランダムに生成された3×3行列どうしの 足し算・引き算・掛け算をテンポよく解かせることで、 行列積のパターンを身体に染み込ませることを狙っています。 問題の難易度は、要素の範囲(−3〜3, −5〜5, −9〜9など)や 零行列・単位行列を含むかどうかで調整可能です。
スマートフォン単体で完結する構成です。 フロントエンドはJetpack Composeで行列のマス目UIを描画し、 内部で問題生成ロジックと採点ロジックを持つシンプルな構造になっています。 学習履歴はローカルのデータベース(Room)に保存し、 オフラインでもトレーニングを継続できます。
行列要素は一様乱数で生成しますが、「ただランダムにする」だけでは 計算が面倒すぎたり、逆に簡単すぎる問題ばかりになります。 そのため、難易度ごとに以下のルールを設けています。
Kotlinの2次元配列でも実装できますが、本アプリでは
「3×3に特化した軽量行列クラス」を別途定義しています。
行列積は
C[i,j] = Σ A[i,k] B[k,j] を愚直に実装しますが、
3×3固定であることを活かし、ループではなくインライン展開することで
計算コストとGC負荷を抑えています。
UIは、紙のノートに書くときのレイアウトに近づけることを意識しました。 3×3のマスをグリッドで並べ、タップすると小さなテンキーが下からスライドしてきて、 即座に数字を入力できます。 正解すると淡い緑、誤答は赤でハイライトし、 その場でどこの要素を間違えたかが直感的にわかります。
単に正解/不正解だけを記録するのではなく、 「行列積で第2行第3列ばかり間違える」「−と+の扱いで符号ミスが多い」など、 もう一段細かい粒度で誤答を記録します。 これにより、「感覚的に弱い位置」が見えてきて、 復習問題を自動生成する際に使うことができます。
自分で1日数十問を解いてみて、「紙より速いか」「頭に残るか」を検証しました。 特に行列積では、行や列をなぞる視線の動きと、 指でマスに入力する動きが一致するかどうかを意識しました。
現在は3×3の足し算・引き算・掛け算に絞っていますが、 線形代数としては「行列式」「逆行列」「固有値・固有ベクトル」など、 さらに練習したいテーマがたくさんあります。 どこまでをアプリの範囲とし、どこから先を紙の演習に任せるかの線引きが課題です。
実際にスマホ上で行列クイズを解いている様子を収録したデモ動画です。 問題生成から採点、履歴への記録までの流れを確認できます。
LinearAlgeblaは今のところ、「手計算を速く・正確にする」ことにフォーカスしています。 将来的には、この計算力をベースに、 「この行列を掛けると何が変わるのか」「固有値が何を意味しているのか」 といった直感につなげるコンテンツも追加していきたいと考えています。
機能拡張・学習ログ・UIの3つの軸で進めます。
数学の問題はどうしても「紙とペン」でやるもの、というイメージが強いですが、 実際にアプリ化してみると、「一問解くまでの心理的コスト」を下げる効果が大きいと感じました。 ちょっとした空き時間に、3問だけ、5問だけ解いてみる。 そうやって積み重ねた計算経験が、あとから証明や応用問題を読むときの 「あれ、この計算やったことあるな」という感覚につながっていきます。