LaTex - 変数に対して代数演算を実行する

LaTex - 変数に対して代数演算を実行する

次のような文書があるとします。

\documentclass{article}

\newcommand\mass{30}
\newcommand\acc{9.8}

\newcommand\force{\the\numexpr \mass * \acc \relax} % F=m*a

\begin{document}
  \section{Exerted force}
    F = \force N
\end{document}

3 つの「変数」、 、および が作成されますmassaccこれらforceは最初の 2 つの積です。

この特定の例 ( mass = 30acc = 9.8) はF = 270.8N、意図したとおりに を出力します。

乗算は\numexprコマンドによって実行されます。これは、 と が両方とも通常の数値である場合に機能しますmassaccまたは が変数 (つまり ) の場合、massドキュメントacc\newcommand\mass{m}ビルドに失敗します。 は\numexpr数値に対してのみ演算を実行できます。

mass = 30gおよびのときにacc = gが出力されるような、変数に対して代数演算を実行する方法はありますかF = 30g^2? これは物理的には意味をなさないことは承知していますが、要点は明らかだと思います。

他にもいくつか例を挙げます。

  • mass = macc = 9.8->F = m*9.8またはF = 9.8*m
  • mass = macc = g->F = m*gまたはF = g*m
  • mass = xacc = x->F = x^2

編集: @PhelypeOleinikが親切に指摘したように\numexpr整数したがって、9.8 * 30 = 294 ですが、30 * 9 = 270 に .8 が追加されるため、結果は 270.8 になります。

答え1

sagetexリクエストしたパッケージを使用したコードは次のとおりです。

\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
m = 30.0
a = 9.8
Force = m*a
var('g')
mass = 30*g
\end{sagesilent}
\section{Exerted force}
    F = $\sage{Force.n(digits=5)}$ N \\\\
If the mass is $\sage{mass}$ then it's square is $\sage{mass^2}$.
\begin{sagesilent}
var('m')
acc = 9.8
\end{sagesilent}

$F = \sage{m*acc.n(digits=2)}$\\
\begin{sagesilent}
var('a')
m=a
\end{sagesilent}
If the mass, $m$, is equal to the acceleration, $a$ then 
$F = \sage{m*a}$.

Sage even works with square roots:
\begin{sagesilent}
var('g')
m=sqrt(3)
\end{sagesilent}
$F = \sage{m*g}$ which, if you want decimals, is about     $F=\sage{m.n(digits=4)*g}$
\end{document}

Cocalc (上記のコメントで言及) で実行された出力は次のようになります。 ここに画像の説明を入力してください

Sage では、x はデフォルトで変数です。その他の変数は、var('g') のようにコード内で定義する必要があります。環境はsagesilentメモ用紙のようなものです。計算を実行する Python コマンドと Sage コマンドで構成されています。\sage{}結果を取得するには、format を使用します。数値であるため、数式モード (ドル記号で囲む) で実行されます。Sage は多くの桁数を返す傾向があります。.n(digits=5)答えは 5 桁の有効数字に強制されます。

答え2

このpythontexパッケージを使用して LaTeX ドキュメントに Python を埋め込み、次のように Pythonsympyパッケージを使用して記号計算を行うことができます。

\documentclass{article}

\usepackage{pythontex}

\begin{pycode}
from sympy import *

m = sqrt(3)
a = symbols('g')
f = m * a
\end{pycode}

\begin{document}
  \section{Exerted force}
    F = $\pyc{print(latex(f))}$
\end{document}

pythontexこれには、LaTeX、python3、 LaTeX のパッケージ、およびpython のパッケージがインストールされている必要がありますsympy。また、python に関する知識があればなお良いでしょう。

コードの簡単な説明:

\usepackage{pythontex}必要なパッケージをインポートします。

\begin{pycode}Python コードのブロックを開始します。

次の Python コード ブロックを見てみましょう。

from sympy import *

m = sqrt(3)
a = symbols('g')
f = m * a

これはsympyライブラリをインポートし、m3 の平方根に等しく設定し、 をa変数 に格納しますg。次に、mとを掛け合わせa、結果を に格納します。3の平方根を取るために使用される関数は、数学ライブラリの関数ではなく、ライブラリの関数であるfことに注意してください。つまり、sqrt()sympymその通り等しくsqrt(3)、近似値ではありません。

$\pyc{latex(f)}$次に、latex(f)返されるものを出力します。 f の値は に等しくなりますsqrt(3) * g。これを関数に渡すと、latex()LaTeX 表記法を使用して出力されるため、数式モードに入るにはドル記号が必要です。

latexこれは、最初に を呼び出し、pythontex次に をもう一度呼び出すことで構築できますlatex

最終的に、ドキュメントは次のようになります。

結果

sympyおよびに関するリソースpythontex:

関連情報