检查答案是否来自特定表格,例如表格A *%e ^(B * t)

时间:2017-06-19 14:16:17

标签: maxima

我想检查一些最大输入是否是特定形式。例如,我想检查答案的格式是A*%e^(B*t),其中A和B是特定的实数。

如果学生X给出答案3*%e^(5*t),那么就是这种形式。如果学生Y给出答案sin(t),或者y=3*%e^(5*t),那么我可以给这个学生作为反馈,他的答案还没有正确的答案。

我想知道在maxima中是否存在类似的东西。

1 个答案:

答案 0 :(得分:4)

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),其中AB是常量,t是一个变量提供。

请参阅defmatchmatchdeclare以及defruletellsimptellsimpafter的文档。模式匹配函数有点特殊,但实际上非常有用 - 我已多次使用它们。

如果您有兴趣检查学生的答案,那么就有基于千里马的项目。查看“相关项目”网页(http://maxima.sourceforge.net/relatedprojects.html)并特别查看STACK(http://stack.bham.ac.uk/)。