首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wolfram Mathematica中的ReleaseHoldAll?

Wolfram Mathematica中的ReleaseHoldAll?
EN

Stack Overflow用户
提问于 2012-01-31 19:46:38
回答 5查看 166关注 0票数 1

我想给变量赋值(比如c代表光速,G代表引力常数),但直到最后一步,公式都是用符号计算的。

如何以最短的方式做到这一点呢?

Replace非常冗长且重复,而如果嵌套,HoldForm可能需要多个RealeaseHold。

还有没有其他的函数呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-02 14:00:20

我们可以为常量定义N值。例如:

代码语言:javascript
复制
N[c] = 299792458;

这为c定义了一个数值。我们可以定义一个使用常量的函数:

代码语言:javascript
复制
f[v_] := Sqrt[1-v^2/c^2]

当我们正常地计算这个函数时,它以符号形式离开了c

代码语言:javascript
复制
In[11]:= f[200000000]

Out[11]= Sqrt[1 - 40000000000000000/c^2]

但是如果我们应用N,那么c的计算结果是数值的:

代码语言:javascript
复制
In[12]:= f[200000000] // N

Out[12]= 0.744943
票数 3
EN

Stack Overflow用户

发布于 2012-01-31 19:52:46

举个例子会有所帮助。但如果我理解你的话,你就会

代码语言:javascript
复制
expr=9 c + 10 gravity

然后你就可以写

代码语言:javascript
复制
expr /. {c -> 299792458, gravity -> 9.8}

使用所涉及符号的新值计算符号表达式。

表达式可以始终保持符号化,您可以简单地为其中的符号计算不同的值。

票数 2
EN

Stack Overflow用户

发布于 2012-01-31 23:26:57

我认为这个问题有两个部分。

(1)我们是否应该强制Mathematica以符号方式进行所有计算。这(几乎总是)是错误的。Mathematica可以做任意精度的数字,所以我们应该告诉它我们的物理常量的精度(当它们超过$MachinePrecision时),让它选择最有效的方法来解决问题。

(2)如何以符号形式打印中间步骤。为此,请使用HoldForm[expr],然后

代码语言:javascript
复制
expr //. HoldForm[x_]:>ReleaseHold[HoldForm[x]]

应该会给出您指定的评估结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9078989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档