当我在纸上写出证据或推稿时,我经常会在我从一步到下一步时发出符号错误或删除条款。我想用Mathematica来避免这些愚蠢的错误。我不希望Mathematica解决表达式,我只是想用它来执行并显示一系列代数操作。对于(平凡的)例子
In[111]:= MultBothSides[Equal[a_, b_], c_] := Equal[c a, c b];
In[112]:= expression = 2 a == a b
Out[112]= 2 a == a b
In[113]:= MultBothSides[expression, 1/a]
Out[113]= 2 == b
有人能指出一个支持这种操作的软件包吗?
修改
感谢您的投入,但不是我想要的。符号操作并不是真正的问题。我真的在寻找能够明确推导出每个步骤的代数或数学证明的东西。我的目标是教学。
答案 0 :(得分:3)
Mathematica还提供了许多用于操作代数的高级函数。其中包括Expand
,Apart
和Together
以及Cancel
,但还有更多。
此外,对于将等同变换应用于等式两边的具体示例(即头部Equal
的表达式),您可以使用Thread
函数,该函数仅适用于就像你的MultBothSides
功能一样,但更具普遍性。
In[1]:= expression = 2 a == a b
Out[1]:= 2 a == a b
In[2]:= Thread[expression /a, Equal]
Out[2]:= 2 == b
In[3]:= Thread[expression - c, Equal]
Out[3]:= 2 a - c == a b - c
在所提出的任何一种解决方案中,应该相对容易地看出该步骤所包含的内容。如果你想要更明确的东西,你可以编写自己的函数:
In[4]:= ApplyToBothSides[f_, eq_Equal] := Map[f, eq]
In[5]:= ApplyToBothSides[4 * #&, expression]
Out[5]:= 8 a == 4 a b
这是MultBothSides
函数的推广,它利用了Map
处理任何头部表达式而不只是头部List
的事实。如果您正在尝试与不熟悉Mathematica的受众进行交流,使用这些名称可以帮助您更清晰地沟通。相反,如果你想使用Ira Baxter建议的替换规则,写出Replace或ReplaceAll而不是使用/.
语法糖可能会有所帮助。
In[6]:= ReplaceAll[expression, a -> (x + y)]
Out[6]:= 2 (x + y) == b (x + y)
如果您认为在输入中使用实际等式(而不是变量名expression
)更清楚,并且您正在使用笔记本界面,请使用您的突出显示单词expression
鼠标,调出上下文菜单,然后选择“就地评估”。
笔记本界面也是一个非常愉快的“文字编程”环境,因此您也可以解释任何不会立即明显的步骤。我相信无论媒介如何,在编写数学证明时这都是一种很好的做法。
答案 1 :(得分:2)
我认为你不需要包裹。你想要做的是根据推理规则操纵每个公式。在MMa中,您可以使用转换对公式建模推理规则。所以,如果你有一个公式 f ,你可以通过执行(我的MMa语法生锈了15年)来应用推理规则 I
f ./ I
生成序列中的下一个公式。
MMa当然会尝试简化您的公式,如果它们包含标准代数运算符和术语,例如常数和算术运算符。您可以通过将公式括在保留[...] 表单中来阻止MMa应用自己的“推理”规则。