Проверьте, если ответ от конкретной формы, например, формы A*%e^ (B*t)
Я хочу проверить, имеет ли какой-либо максимальный ввод определенную форму. Например, я хочу проверить, имеет ли ответ форму A*%e^(B*t)
где A и B являются конкретными действительными числами.
Если ученик Х дает ответ 3*%e^(5*t)
тогда это имеет такую форму. Если ученик Y дает ответ sin(t)
, или, может быть y=3*%e^(5*t)
тогда я могу дать этому студенту обратную связь, что его ответ еще не имеет правильной формы.
Мне было интересно, существует ли что-то подобное в максимумах.
1 ответ
В Maxima есть несколько функций сопоставления с образцом, которые работают с выражениями (не строками). Я думаю defmatch
подходит здесь, например:
(%i8) matchdeclare ([A, B], constantp);
(%o8) done
(%i9) defmatch (match_aexpbt, A*exp(B*t), t);
(%o9) match_aexpbt
(%i10) match_aexpbt (5*exp(3*u), u);
(%o10) [A = 5, B = 3, t = u]
(%i11) match_aexpbt (sqrt(2)*exp(%pi*z), z);
(%o11) [A = sqrt(2), B = %pi, t = z]
(%i12) match_aexpbt (y = 5*exp(3*u), u);
(%o12) false
(%i13) match_aexpbt (5*sin(2*u), u);
(%o13) false
(%i14) match_aexpbt ((1 + %i)*exp(exp(%pi)*v), v);
%pi
(%o14) [A = %i + 1, B = %e , t = v]
В этом случае я определил match_aexpbt
который соответствует выражениям, которые выглядят как A*exp(B*t)
где A
а также B
являются постоянными и t
переменная, которая предоставляется.
Смотрите документацию для defmatch
а также matchdeclare
а также defrule
, tellsimp
, а также tellsimpafter
, Функции сопоставления с образцом немного своеобразны, но на самом деле довольно полезны - я использовал их много раз.
Если вы заинтересованы в проверке ответов учеников, для этого были проекты на основе Maxima. Взгляните на веб-страницу "Связанные проекты" ( http://maxima.sourceforge.net/relatedprojects.html) и посмотрите, в частности, STACK ( http://stack.bham.ac.uk/).