Canvas 数式問題 - eiichiromomma/CVMLAB GitHub Wiki

(Canvas) 数式問題

Quiz (小テスト)の種類の中に数式問題があり,事前に数式で定義した正答パターンを生成して受講者(というか開く度)ごとにランダム出題してくれる機能。

  • ヘルパー関数一覧
  • 出題ごとに変化する変数の定義(精度,生成範囲)が可能
  • 正答の計算途中での内部変数の定義が可能(出題がしやすい)
  • 正答に至るまでは複数の数式の定義が可能(最後の数式の出力値が正答となる)
  • 正答の有効桁,ぶれの許容範囲の設定が可能

あたりが特徴で

  • [新・旧]ヘルパー関数なのに $e$ だけ()なしで適用される(eという変数を定義していると変数は無視されて2.718...が漏れ無く代入される)
  • [新・旧]1問題1解答のため,連鎖式に解答させる問題は出題できない
  • [新・旧]複素数には未対応。複数選択でやってはという応答, ○○なら1,××なら-1みたいな解答指示にしたらという提案, 要望(2023年)
  • [旧]一旦入力した数式は編集不可で消すしかない
  • [旧]数式の順番入れ替えはできないので序盤の計算を修正するにはその下全て入力し直しになる
  • [新・旧]日本語訳がプア(英語表示がオススメ)
  • [旧]状態変更に対する応答がプアで謎エラーが起きるときがある(Webサービスなので仕方ないが)

が欠点。

1. 新クイズ

「ビルド」で問題作成に入り,旧クイズより近代的UIで作成していく.数式問題については解答の精度が大事なので,予め推奨する有効桁数を示しておく. 実際の講義では5桁の有効数字で計算して3桁で解答する電験方式を推奨している.

という問題を例とする.

「問題」

旧クイズと異なり`で囲われた文字が変数として使われ,問題文が生成されたときに数値に置き換わる.

で灰色になっている箇所がテキスト入力で,白背景のままな部分が数式機能で入力している箇所.変数となる箇所はテキスト入力でなければならない.

「解答」

問題文の内容に従って順次変数が追加される.これらはCanvasの特徴として空欄を許容しないことが多いので0でも値は入れておく. 各変数にランダム生成する範囲とその小数点以下の値を決定する項目で,全体の計算は基本的に実数と考えておけば良い.

「数式の定義」

旧クイズ同様に普通に計算を記述する.ここの中だけで変数を新たに定義しても問題ない. 旧クイズと違ってやり直しがいくらでも効くので,この一点のためだけでも新クイズを使った方が良い.

G1=1/R1
G2=1/R2
G3=1/R3
G4=1/R4
Delta=(G1+G2+G3)*(G3+G4)-G3*G3
VA=((I1+E1/R2)*(G3+G4)+(E2/R4 - I2)*G3)/Delta
VB=((G1+G2+G3)*(E2/R4 - I2)+G3*(I1+E1/R2))/Delta
(VA-VB)/R3

こんな感じ.正解は最後の計算となる.注意点は旧クイズ同様にeはヘルパー関数扱いでハマる.

「可能な解を生成する」

項目 概要
解答の数 解答のテーブルを生成する.受講者の半分程度でも十分ではあるが,ビルドのたびに選択し直すならデフォルト値でよい.
小数点以下 これが最初の注意書きに該当する.例えばミリオーダーで小数点以下が更に欲しい場合は問題文で解答の単位に[mA]のようにSI接頭辞を示したうえで「数式の定義」の最後で1000倍しておく等の工夫が必要
誤差の範囲 絶対値かパーセント.絶対値だと一々考えるのが面倒で,実数計算ならパーセントの方が面倒ごとが少ない.整数解なら0で誤差なしで良い.

各種条件を定めたら「生成」で完成.正解パターンが大量に出てくるので,どれかで検算しておく.回路ならngspiceなり使うとより確実.

「完了」

旧クイズ同様にこれを押さないと変更が廃棄されるので注意.

「設定」タブの「複数回の試行を許可する」

一発勝負のテストでない限りは許可した方が良い. できるまでやらせるなら「保存スコア」は「最高」,「試行許可回数」は「無制限」にしておく.

「最後の試行でビルドする」が最も重要で,「最後の試行でのビルドを有効にする」にチェックが入っていると数値は固定されるので解き方を学んでもらいたいときの推奨.ただし,出鱈目を入力して正解を見て,ということもできてしまうので,性悪説で運用するなら「受講者が結果を見られないように非表示にする」とかとの組合せを使う.

課題の場合は逆にチェックを外しておけば,挑戦する度に生成したテーブルから別の組み合わせを使うようになる.(上のやりかたが無効になる) ただし,授業内の課題もこの状態にすると,全問正解するまでのハードルが上がり収集が付かなくなる可能性が上がるので注意.

不完全なlist

実装がポンコツ.見えないlist型は存在しているらしく,変数へのlist代入は可能だが,要素への代入や解答にはできない. 要素または数値を返す処理になっら使える. list型の解答を許容してくれれば複素数も解答にできるのだが.

関数 書式 機能 動作確認できた
at at(list,index) listのindex番目(0始まり)の要素を返す
count count(list) 要素数(lengthとの違い不明)
first first(list) 0番目の要素
last last(list) 最後の要素
length length(list) 要素数
max max(list) 最大の要素
mean mean(list) 要素の平均
median median(list) 中央値
min min(list) 最小の要素
range range(list) 要素は2個でその差
reverse reverse(list) 一覧を反転させるが出力は解にはできない(代入は可)
sort sort(list) 並び換えのはずだが動かない
sum sum(list) 合計

2. 旧クイズ

問題・変数定義

ここに図や説明文等を入れる。編集は通常のCanvasのエディタなので説明は省略するが,[val]という[]で変数名を括ったものを入れると自動で下の変数定義に反映される。数式が既に定義されている場合等によくエラーが発生するので,都度「再計算」ボタンを押した方が良い。 画面ではR1,R2,R3,R4を1〜10で小数点以下なしで生成している。

数式の定義

ここで入力した数式が順次数式結果のペアとして一覧表示される。この一覧の一番下の結果が正答として扱われる。精度はその下の小数点以下の桁数で設定可能。 この際に例のようにGp=1/R2+1/R3+1/R4とすると,内部変数Gpが勝手に生成されて,次の式Rp=1/Gpで参照されRpを生成している。最後に10*R1/(R1+Rp)として定義した変数のR1と生成された変数Rpを使って計算している。正解の行(最後の行)については等号が不要。

全般的な考えられる解

これまでの定義で何パターン変数と解答のセットを生成するかの定義なので,繰り返し挑戦した際や周囲の学生とで同じ問題が出ても構わないのであれば少なめの数字を設定する。誤差については出題内容にも依るが1%くらいが妥当なところ。