方程线程:为什么是默认行为?
我最近重新发现了 Roman Maeder 的一个小包,它告诉 Mathematica 自动对 x == y 等表达式进行算术和类似函数的线程处理。 Maeder 包的链接。
首先,为了演示,下面是 Maeder 给出的一个示例:
In[1]:= Needs["EqualThread`"]
现在继续使用线程行为“手动”求解 x 的以下方程:
In[7]:= a == b Log[2 x]
In[8]:= %/b
Out[8]:= a/b == Log[2 x]
现在求幂:
In[9]:= Exp[%]
Out[9]= E^(a/b) == 2 x
并除以 2:
In[10]:= %/2
Out[10]= (E^(a/b))/2 == x
Q:从设计角度来看,有人可以解释为什么 Mathematica 设置为这种方式吗默认? 自动线程似乎是 Mathematica 初学者所期望的行为类型(至少对我来说),也许有人可以提供一两个示例,这些示例会导致整个系统出现问题。 (并随时指出任何数学无知......)
I recently rediscovered a small package by Roman Maeder that tells Mathematica to automatically thread arithmetic and similar functions over expressions such as x == y. Link to Maeder's package.
First, to demonstrate, here's an example given by Maeder:
In[1]:= Needs["EqualThread`"]
Now proceed to use the threading behavior to solve the following equation for x 'by hand':
In[7]:= a == b Log[2 x]
In[8]:= %/b
Out[8]:= a/b == Log[2 x]
Now exponentiate:
In[9]:= Exp[%]
Out[9]= E^(a/b) == 2 x
And divide through by 2:
In[10]:= %/2
Out[10]= (E^(a/b))/2 == x
Q: From a design perspective, can someone explain why Mathematica is set to behave this way by default? Automatically threading seems like the type of behavior a Mathematica beginner would expect---to me, at least---perhaps someone can offer an example or two that would cause problems with the system as a whole. (And feel free to point out any mathematica ignorance...)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
考虑算术运算时似乎很自然。但情况并非总是如此。
当我写作时
,我不想
这就是 Maeder 包的作用。
编辑
在下面回答您的评论:
我的回答绝不是对 Maeder 的包的批评,这很好,而是声明它不应该是对待 Equal[ ] 在MMA。
Equal[ ] 是一个函数,一开始不太容易掌握:
Maeder 包的目的(我理解与您的非常一致)是为表达式 lhs == rhs 赋予人类在做数学时使用的相同含义和操作规则。
在数学中,等式是一种等价关系,在集合中强加偏序,而方程是一种断言,即表达式通过这种特定关系相关。
将这些差异与其他 Mma“功能”进行比较。 Sin[x] 在 Mma 中,在通常的数学中是同样的东西(嗯,几乎),并且对于大多数 Mma 野兽来说也是如此。然而,有一些 Mma 结构并不具有与数学概念完全相同的同构性:Equal、SameQ、Equivalent 等。它们是从数学世界到编程世界的桥梁。它们不是严格的数学概念,而是经过修改的编程概念来容纳它们。
抱歉,如果我有一点哲学方面的知识。
哈!
Seems natural when thinking of arithmetic operations. But that is not always the case.
When I write
I don't want
And that is what Maeder's package does.
Edit
Answering your comment below:
My answer is by no means a critic to Maeder's package, which is nice, but a statement that it should not be the mainstream way to treat Equal[ ] in Mma.
Equal[ ] is a function, and not particularly easy to grasp at first:
The intent of Maeder's package, which I understand is well aligned with yours, is to give to the expression lhs == rhs the same meaning and manipulation rules humans use when doing math.
In math, equality is an equivalence relation, imposing a partial order in a set, and an equation is an assertion that the expressions are related by this particular relation.
Compare these differences with other Mma "functions". Sin[x] is in Mma, and in usual math the same thing (well, almost), and the same can be said of most Mma beasts. There are a few Mma constructs, however, that do not hold that exact isomorphism to math concepts: Equal, SameQ, Equivalent, etc. They are the bridge from the math world to the programming world. They are not strict math concepts, but modified programming concepts to hold them.
Sorry if I got a little on the philosophical side.
HTH!
我想部分原因是这种行为不能扩展到不平等。还因为当评估平等时,这种行为应该有意义:
会很好:
但是:
I guess it is partly because the behavior can not be extended over to inequalities. And also because the behavior should make sense both when equalities become evaluated:
Would be nice:
but: