2012-01-31 15 views
1

私は変数に値を割り当てたい(光の速度はc、重力定数はGなど)が、最後のステップまでシンボリックに計算された式が必要です。Wolfram MathematicaのReleaseHoldAll?

これを最短でどのように行うことができますか?

置換は非常に長く、重複していますが、HoldFormは入れ子になっていると複数のRealeaseHoldが必要です。

他にもいくつかの機能がありますか?

+0

[Mathematica用の新しいStackExchangeサイト](http://mathematica.stackexchange.com/)があることを知りたいかもしれません。 2つのStackExchangeサイトで同じ質問を投稿するのは良いフォームとはみなされませんが、今後の質問を投稿することは自由です。 – Verbeia

答えて

3

定数の値をNと定義できます。例:

N[c] = 299792458; 

cの数値を定義します。私たちは通常、この機能を評価するとき、それはシンボル形式でcを残し

f[v_] := Sqrt[1-v^2/c^2] 

::私たちは、定数を使用する関数を定義することができ

In[11]:= f[200000000] 

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

しかし、我々はNを適用した場合、その後、cを数値的に評価されます: "ReleaseHoldAll" 機能、MapAll(ショートフォームについて

In[12]:= f[200000000] // N 

Out[12]= 0.744943 
+0

これは素晴らしいことです。そして、 '2/34.0'のような式にまだ存在していない場合、正確な値を保持しないように、Nの振る舞いを数字で動作させるようにすることは可能ですか? –

+0

@ SuzanCioc不正確な番号の存在に応じて値を変更したいと思う表現の例を教えてください。 '3c'は変わらないが、' 3.0c'は '8.99377 *^8'と評価されるだろうか? – WReach

2

例が役立ちます。私はあなたを理解している場合しかし、あなたは

expr=9 c + 10 gravity 

あなたが関与シンボルの新しい値でシンボリック式を評価するために

expr /. {c -> 299792458, gravity -> 9.8} 

を書くことができています。

式は常にシンボリックなままで、シンボル内のシンボルの値が異なる場合でもその式を評価できます。

+0

はい、これは私が今やっていることです。しかし、私はこれが他のやり方、例えば '/ N '関数で実現できることを期待していました。 –

1

私はこの質問に2つの部分があると思います。

(1)Mathematicaがすべての計算を象徴的に強制するかどうか。これは(ほとんど常に)間違っています。 Mathematicaは任意の精度の数値を扱うことができるので、物理定数の精度(それが$MachinePrecisionを超えるとき)を伝えて、問題を解決する最も効率的な方法を選択させたい。

(2)どのように中間ステップを記号形式で印刷するのですか?このため、HoldForm[expr]を使用して、あなたが示しているようそして

expr //. HoldForm[x_]:>ReleaseHold[HoldForm[x]] 

はあなたの評価結果を与える必要があります。

1

//@)関数を式のすべての部分にマップします。したがって、あなたが使用することができます。

ReleaseHold //@ expr 

exprは、任意のレベルで、HoldHoldFormなどを含むあなたの式です。

0

mathematicaで置換演算子を使うのに奇妙な属性があります。これは、それを適用するコンテキストと関係しています。上記の答えはおそらくうまくいくでしょうが、個人的に私はBlock [{variable = number}、code]コマンドを常に使用します。変数はブロックブラケット内で大域として機能しますが、評価が外に出れば変数は宣言されません。

はこのようにそれを使用する:

Block[{c = 299792458, gravity = 9.0 }, answer = 9 c + 10 gravity ] 

は出力が得られます。

answer/2 
:あなたは後にそれを使用できるように

2.69813*10^9 

もセットは、出力の値にグローバルに答えます

の結果:

1.34907*10^9