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

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

我想知道在最大值中是否存在这样的东西。

最佳答案

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 的文档。模式匹配函数有点特殊,但实际上非常有用——我已经多次使用它们。
如果您有兴趣检查学生的答案,那么已经有基于 Maxima 的项目。看看 related projects 网页,特别是 STACK

关于maxima - 检查答案是否来自特定形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44632994/

10-16 23:42