我想给变量赋值(比如c代表光速,G代表引力常数),但直到最后一步,公式都是用符号计算的。
如何以最短的方式做到这一点呢?
Replace非常冗长且重复,而如果嵌套,HoldForm可能需要多个RealeaseHold。
还有没有其他的函数呢?
发布于 2012-02-02 14:00:20
我们可以为常量定义N值。例如:
N[c] = 299792458;这为c定义了一个数值。我们可以定义一个使用常量的函数:
f[v_] := Sqrt[1-v^2/c^2]当我们正常地计算这个函数时,它以符号形式离开了c:
In[11]:= f[200000000]
Out[11]= Sqrt[1 - 40000000000000000/c^2]但是如果我们应用N,那么c的计算结果是数值的:
In[12]:= f[200000000] // N
Out[12]= 0.744943发布于 2012-01-31 19:52:46
举个例子会有所帮助。但如果我理解你的话,你就会
expr=9 c + 10 gravity然后你就可以写
expr /. {c -> 299792458, gravity -> 9.8}使用所涉及符号的新值计算符号表达式。
表达式可以始终保持符号化,您可以简单地为其中的符号计算不同的值。
发布于 2012-01-31 23:26:57
我认为这个问题有两个部分。
(1)我们是否应该强制Mathematica以符号方式进行所有计算。这(几乎总是)是错误的。Mathematica可以做任意精度的数字,所以我们应该告诉它我们的物理常量的精度(当它们超过$MachinePrecision时),让它选择最有效的方法来解决问题。
(2)如何以符号形式打印中间步骤。为此,请使用HoldForm[expr],然后
expr //. HoldForm[x_]:>ReleaseHold[HoldForm[x]]应该会给出您指定的评估结果。
https://stackoverflow.com/questions/9078989
复制相似问题