tel*_*f14 14 wolfram-mathematica equations equation-solving
我最近重新发现了Roman Maeder的一个小包,它告诉Mathematica自动在算术和类似函数上进行线程,例如x == y.链接到Maeder的包裹.
首先,为了演示,这是Maeder给出的一个例子:
In[1]:= Needs["EqualThread`"]
Run Code Online (Sandbox Code Playgroud)
现在继续使用线程行为来解决x'手动'的以下等式:
In[7]:= a == b Log[2 x]
In[8]:= %/b
Out[8]:= a/b == Log[2 x]
Run Code Online (Sandbox Code Playgroud)
取指数:
In[9]:= Exp[%]
Out[9]= E^(a/b) == 2 x
Run Code Online (Sandbox Code Playgroud)
除以2:
In[10]:= %/2
Out[10]= (E^(a/b))/2 == x
Run Code Online (Sandbox Code Playgroud)
问:从设计角度来看,有人可以解释为什么Mathematica默认设置为这样吗?自动线程似乎是Mathematica初学者所期望的行为类型 - 至少对我来说 - 也许某人可以提供一个或两个会导致整个系统出现问题的例子.(并随意指出任何mathematica无知...)
Dr.*_*ius 11
在考虑算术运算时似乎很自然.但情况并非总是如此.
当我写作
Boole[a==b]
Run Code Online (Sandbox Code Playgroud)
我不想要
Boole[a] == Boole[b]
Run Code Online (Sandbox Code Playgroud)
这就是Maeder的包装.
编辑
在下面回答你的评论:
我注意到在第5.2节中添加了Boole [],而Maeder的包是为第3版创作的.我想我的问题的核心仍然围绕着"设计"问题.我的意思是,如何解决你指出的问题?对我来说,最明确的方法是宣布你正在使用的变量,不是吗? - 让我感到困惑的是你通常只能通过假设(全局或作为简化等选项)来实现这一点.其他人认为拥有一整套数字属性会更自然吗?(在这方面,常量属性是一个挑逗)
我的回答绝不是对Maeder的包的批评,这很好,但是声明它不应该是在Mma中对待Equal []的主流方式.
Equal []是一个函数,起初并不是特别容易掌握:
我理解的Maeder包的意图与你的一致,就是给表达式lhs == rhs赋予人类在进行数学运算时使用的相同含义和操作规则.
在数学中,等式是等价关系,在集合中强加偏序,而等式是表达式与这种特定关系相关的断言.
将这些差异与其他Mma"函数"进行比较.Sin [x]在Mma中,在通常的数学中是相同的(好吧,差不多),大多数Mma野兽也是如此.然而,有一些Mma构造不能保持与数学概念完全同构:Equal,SameQ,Equivalent等.它们是从数学世界到编程世界的桥梁.它们不是严格的数学概念,而是修改了编程概念来保存它们.
对不起,如果我在哲学方面有所了解.
HTH!
我想这部分是因为行为不能延伸到不平等.而且因为在评估等值时,行为应该是有意义的:
会好的:
In[85]:= Thread[Power[a == b, 2], Equal]
Out[85]= a^2 == b^2
In[86]:= Thread[Power[a == b, c == d], Equal]
Out[86]= a^c == b^d
Run Code Online (Sandbox Code Playgroud)
但:
In[87]:= Thread[Power[a == b, c == d] /. {c -> 2, d -> 2}, Equal]
Out[87]= a^True == b^True
Run Code Online (Sandbox Code Playgroud)