"AlgebraicValue" (比較法)
詳細
- 代数解の比較法は,Solve,SolveValues,Fit,Reduce等の求解操作を行うことなく2つの式が等価であるなら両者が同等であるとみなす.
- 解答集と解答の値は,与えられたものと厳密に等しい値を保持するために,どちらもホールドされた式Hold[expr]として指定できる.値がホールドされている場合でも,代数関数(Solve並びにこれと同等の関数)以外の評価は,評価中に行われる.常に答をホールドすることが推奨される.
- "AlgebraicValue"の評価は,問題の中の変数を指定するための設定"OptionalResultName"を許容する:AssessmentFunction[key,<|"ComparisonMethod""AlgebraicValue","OptionalResultName"setting|>]
- 次は,setting のサポートされる値である.
-
var 送信された結果の変数 var を受け入れる False (デフォルト) ans として提供された答だけをマッチする True key から var を推測しようとする - "OptionalResultName"var を使うときは,以下の任意の形式が答 ans の正しい形として受け入れられる.
-
ans Hold[var=ans] Hold[var==ans] varans - 等式と不等式は解答集でサポートされている.同等である式はどれも正解であるとみなされる.
- 以下の表は,典型的な解答集について,"AlgebraicValue"とその他の比較法を比較したものである.
例題
すべて開く すべて閉じる例 (1)
代数問題のAssessmentFunctionを作成する:
solvetest = AssessmentFunction[{(-b - Sqrt[b^2 - 4 a c]/2 a), (-b + Sqrt[b^2 - 4 a c]/2 a)}, "AlgebraicValue"]solvetest[-(b/2 a) - (Sqrt[b^2 - 4 a c]/2 a)]スコープ (5)
geometryassess = AssessmentFunction[SolveValues[{x, y}∈InfiniteLine[{{0, 0}, {2, 1}}] && {x, y}∈Circle[], {x, y}], "AlgebraicValue"]geometryassess[{(2/Sqrt[5]), (1/Sqrt[5])}]heldSolutionCode = Hold[First@SolveValues[Norm[{x, y}] == 1 && y == x / 2, {x, y}]];このコードは代数解を求めるコードを含んでいるので正解にはならない:
geometryassess[heldSolutionCode]正解か否かの評価の前にコードが評価されて正解が出ている場合は,正解となる:
geometryassess[ReleaseHold@heldSolutionCode]solution = SolveValues[x + 3 a == 5, x]結果の名前として変数 x を含む答の別の形を許容する評価を作成する:
solvetest = AssessmentFunction[solution, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> x|>]solvetest[Hold[-3a + 5]]solvetest[Hold[x = 5 - 3a]]solvetest[Hold[x -> 5 - 3a]]solvetest[Hold[x == 5 - 3a]]solvetest[Hold[z == 5 - 3a]]許可されている代替形式が使用されている場合は,変数名が解答集から推測されることがある:
infered = AssessmentFunction[Hold[x = 5 - 3a], <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> True|>]infered[Hold[x -> 5 - 3a]]AssessmentFunction[Hold[x = 5 - 3a], <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> True|>][Hold[5 - 3a]]answerkey = Eliminate[{x == 2 + y, y == z}, y]equationtest = AssessmentFunction[answerkey, "AlgebraicValue"]equationtest[Hold[2 + z == x]]equationtest[Hold[2 + z - x == 0]]equationtest[Hold[Eliminate[{x == 2 + y, y == z}, y]]]af = AssessmentFunction[Hold[y - x > 8], "AlgebraicValue"]af[Hold[x + 5 < y - 3]]"AlgebraicForm"を使って,受容される答をより厳しく制限する:
AssessmentFunction[Hold[y - x > 8], "AlgebraicForm"][Hold[x + 5 < y - 3]]アプリケーション (3)
複数の正解がある代数問題についてのQuestionObject を作成する:
QuestionObject["Find a root of a x^2==b+1",
AssessmentFunction[
{(-Sqrt[1 + b]/Sqrt[a]), (Sqrt[1 + b]/Sqrt[a])}, "AlgebraicValue"
]]幾何の問題のQuestionObjectを作成する:
QuestionObject[Column[{
StringForm["Find a point of intersection {x,y} for a circle at the origin of radius one and the line ``", y == (1 / a) x],
Graphics[{Red, InfiniteLine[{0, 0}, {2, 1}],
Blue, Circle[]}, Rule[...]]
}], AssessmentFunction[SolveValues[{x, y}∈InfiniteLine[{{0, 0}, {a, 1}}] && {x, y}∈Circle[], {x, y}, Rule[...]], "AlgebraicValue"]]値を見付けるのに役立つプロットを含む多項式解法問題を作成する."OptionalResultName" を設定すると,受け入れられる解答形式に柔軟性が生まれる:
QuestionObject[Column[{StringForm["Find all the roots of the polynomial p(x) = ``", pol = Expand[(x - 1) (x - 2) (x - 3) (x - 4)]], OpenerView[{Style["Helper:", Blue, Smaller], Plot[...]}]}], AssessmentFunction[{{1, 2, 3, 4}}, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> HoldPattern@x, "ListAssessment" -> "AllElementsOrderless"|>]]特性と関係 (3)
代数とはみなされない操作の評価は,答がホールドされていても実行される:
AssessmentFunction[Hold[10x], "AlgebraicValue"][Hold[Echo[5x + 5x]]]"値がホールドされているときは,大域定義が評価中に無視される:
x = 0;
AssessmentFunction[Hold[10x], "AlgebraicValue"][Hold[0]]変数がホールドされていないと,大域的定義が"OptionalResultName"に対して指定された名前と衝突することもある:
z = 0;AssessmentFunction[10, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> z|>][Hold[z = 10]]HoldまたはHoldPatternで変数を包み込んで大域的定義を無視する:
AssessmentFunction[10, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> HoldPattern@z|>][Hold[z = 10]]AssessmentFunction[10, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> Hold@z|>][Hold[z = 10]]"AlgebraicValue"法では,Plusのように代数問題は解かない関数の評価が許容される:
AssessmentFunction[-1, "AlgebraicValue"][Hold[-3 + 2]]AssessmentFunction[-1, "AlgebraicValue"][Hold[SolveValues[x + 1 == 0, {x}][[1, 1]]]]"CalculusResult"は,代数を解く関数の評価を許容する:
AssessmentFunction[-1, "CalculusResult"][Hold[SolveValues[x + 1 == 0, {x}][[1, 1]]]]考えられる問題 (1)
複数の変数について,Solveを使って解答集を作成する:
sol = Solve[{x, y}∈InfiniteLine[{{0, 0}, {2, 1}}] && {x, y}∈Circle[], {x, y}]デフォルトの"ListAssessment"設定でAssessmentFunctionを作成すると,解答集の中の各リストが単一の答として扱われる:
wholelistassessment = AssessmentFunction[sol, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> True|>]wholelistassessment[{x -> -(2/Sqrt[5]), y -> -(1/Sqrt[5])}]"OptionalResultName"Trueと設定しても,変数名がない値は不正解になる:
wholelistassessment[{-(2/Sqrt[5]), -(1/Sqrt[5])}]代りに,"AllElementsOrderless"または"AllElementsOrdered"を"ListAssessment"設定として使って各部分値を個別に評価する:
elementassessment = AssessmentFunction[sol, <|"ComparisonMethod" -> "AlgebraicValue", "OptionalResultName" -> True, "ListAssessment" -> "AllElementsOrdered"|>]解答集の個別の要素と答が別々にマッチされ,"OptionalResultName"設定は予想通りに動作する:
elementassessment[{x -> -(2/Sqrt[5]), y == -(1/Sqrt[5])}]elementassessment[{Hold[-2Sqrt[5] / 5], -Hold[Sqrt[5] / 5]}]等号を含む解答を与える場合は,Holdを使って値の設定を防ぐ:
elementassessment[{Hold[x = -2Sqrt[5] / 5], Hold[y = -Sqrt[5] / 5]}]関連項目
AssessmentFunction QuestionObject Solve SolveValues Reduce
質問インターフェースタイプ: ShortAnswer MultipleShortAnswers