単位を使った記号計算
単位を使った記号計算
Wolframシステムは数だけでなく記号式を扱うこともできるため,さまざまな数式に使うことができる.Wolframシステムの単位系はこの記号的コードベースを利用しており,Quantity式を使って微積分を簡単にしている.
Quantity式に使う記号的数式操作の例
(1/2)a t ^ 2 + v t + x0 /. {a -> Quantity[Subscript[a, d], "Meters" / "Seconds" ^ 2], t -> Quantity[Subscript[t, d], "Seconds"], v -> Quantity[Subscript[v, d], "Meters" / "Seconds"], x0 -> Quantity[Subscript[x0, d], "Meters"]}方程式が次元について矛盾がないかどうかをテストする最も簡単な方法は,両辺を引き,数量の値を代入し,それが有効なQuantityオブジェクトに評価されるかどうかをチェックするというものである:
s == v * tSubtract @@ %% /. {t -> Quantity[Subscript[t, d], "Seconds"], v -> Quantity[Subscript[v, d], "Meters" / "Seconds"], s -> Quantity[Subscript[s, d], "Meters"]}Head[%]s - v t /. {t -> Quantity[Subscript[t, d], "Seconds" ^ 2], v -> Quantity[Subscript[v, d], "Meters" / "Seconds"], s -> Quantity[Subscript[s, d], "Meters"]}Head[%]Quantity[s, "Meters"] - v Quantity[t, "Seconds"]% /. q_Quantity :> QuantityMagnitude[q]Solve[Quantity[m, "Meters"] == Quantity[y, "Yards"], m]Solve[Quantity[2.2 * 10 ^ 12, "Joules"] == (1/2)Quantity[6.8 * 10 ^ 4, "Kilograms"] * v ^ 2, v]未知の変数をQuantityとして入力することによって,特定の単位を指定することができる:
Solve[Quantity[2.2 * 10 ^ 12, "Joules"] == (1/2)Quantity[6.8 * 10 ^ 4, "Kilograms"] * Quantity[v, "Miles" / "Hours"] ^ 2, v]曖昧であったり次元が矛盾していたりしてSolveが未知の変数の単位を判別することができない場合は,未評価で返す:
Solve[Quantity[13, "Feet"] == x + 1, x]IntegrateはQuantityを認識しており,被積分関数と積分変数の単位を正しく組み合せる.積分変数がQuantityオブジェクトの場合,積分を実行するための積分変数としてQuantityMagnitudeが使われ,そのQuantityUnitは結果において被積分関数の単位と組み合される.一般に入力は以下のいずれかの形式で記述するのがよい.
1. 被積分関数と積分変数すべてがQuantityオブジェクトである.
2. Quantityオブジェクトは定積分の限界にのみ現れる.
上記以外の形式で入力することもできるが,Integrateがすべての式に対して矛盾のない単位の割当てを決めることができない場合,計算は失敗する.定積分における積分変数の想定次元は,変数と極限がどのように表されるかによって異なる.{x,Quantity[a,"unit1"],Quantity[b,"unit2"]}のような指定の場合,x は"unit1"および"unit2"と同じ次元を持つことが想定される.{Quantity[x,"unit"],a,b}のような指定の場合は,通常 x 自体が次元であると想定される.後者の場合,a と b は unit と同じ次元の数量でなければならない.
Integrate[Quantity[5, "Meters" / "Seconds" ^ 2] * t, {t, Quantity[0, "Seconds"], Quantity[10, "Seconds"]}]Integrate[Quantity[5, "Meters" / "Seconds" ^ 2] * Quantity[t, "Seconds"], {Quantity[t, "Seconds"], Quantity[0, "Seconds"], Quantity[10, "Seconds"]}]Integrate[Quantity[5, "Meters" / "Seconds" ^ 2] * t, {Quantity[t, "Seconds"], Quantity[0, "Seconds"], Quantity[10, "Seconds"]}]Integrate[Quantity[a, "Meters" / "Seconds" ^ 2] * t, {t, Quantity[ti, "Seconds"], Quantity[tf, "Seconds"]}]線形電荷密度関数を積分する.被積分関数全体がQuantityであるため,単位の組合せが簡単にできる:
Integrate[ Quantity[a x ^ 2 + b x, "Coulombs" / "Meters"], {Quantity[x, "Meters"], Quantity[xi, "Meters"], Quantity[xf, "Meters"]}]積分変数が数量であると宣言されておらず,被積分関数の数量オブジェクトが定数である場合,Integrateは被積分関数の分離形式を維持する:
Integrate[ Quantity[a, "Coulombs" / "Meters" ^ 3]x ^ 2 + Quantity[b, "Coulombs" / "Meters" ^ 2]x, x]Integrate[ Quantity[a, "Coulombs" / "Meters" ^ 3]x ^ 2 + Quantity[b, "Coulombs" / "Meters" ^ 2]x, Quantity[x, "Meters"]]Integrate[a Quantity[t, "Meters"], Quantity[t, "Seconds"]]D[Quantity[(1 / 2) * a * (t - ti) ^ 2 + v0 * (t - ti) + x0, "Meters"], Quantity[t, "Seconds"]]D[Quantity[(1 / 2) * a * (t - ti) ^ 2 + v0 * (t - ti) + x0, "Meters"], {Quantity[t, "Seconds"], 2}]Dは自動的に単位を追跡する:
D[Quantity[a * (t - ti) + v0, "Meters" / "Seconds"], Quantity[t, "Hours"]]いくつかのQuantityオブジェクトを含む式を微分する:
D[x ^ 3 * Quantity[a / 3, "Coulombs" / "Meters" ^ 3] +
x ^ 2 * Quantity[b / 2, "Coulombs" / "Meters" ^ 2], x]D[a Sin[Quantity[ω, "Seconds" ^ -1] * t] + b Cos[Quantity[ω, "Seconds" ^ -1] * t], Quantity[ω, "Seconds" ^ -1]]%//ExpandQuantity変数に関する傾きを計算する:
D[{Quantity[e[t, x], "Joules"], Quantity[p[t, x], "Kilograms" * "Meters" / "Seconds"]}, {{Quantity[t, "Seconds"], Quantity[x, "Meters"]}}]関連するガイド
-
▪
- 単位