数学記号 から JavaScript /  Python / C# への変換表

自分用のメモとして、Math4DevsのテーブルにPythonとC#を追加したものを作成した。

https://math4devs.com

__前提条件__
- Pythonでの行列操作はnumpyライブラリを使用
- C#での行列操作はSystem.Numerics名前空間を使用
- スカラー値や1次元配列などは`a` `b`、集合は`A` `B`と表記する


# 基本演算子
JS, Python, C#ともに同じ記法
※日本で一般的に用いられない $a : b$ (Colon for division) は省いた
| 記号 | 名前 | JavaScript | Python | C# |
|:---:|:---:|:---|:---|:---|
| $a + b$ | 加算記号<br>Plus sign | `a + b` | `a + b` | `a + b` |
| $a - b$ | 減算記号<br>Minus sign | `a - b` | `a - b` | `a - b` |
| $a \times b$ | 乗算記号<br>Multiplication sign | `a * b` | `a * b` | `a * b` |
| $a \cdot b$ | 乗算の中点<br>Middle dot for multiplication | `a * b` | `a * b` | `a * b` |
| $a / b$ | 除算の斜線<br>Division slash | `a / b` | `a / b` | `a / b` |
| $\frac{a}{b}$ | 括線<br>Horizontal bar for division | `a / b` | `a / b` | `a / b` |



# 比較演算子
等価と厳密等価の使い分けに注意する
- JavaScript：[`==`は型変換してから値を比較、`===`は型と値を比較](https://developer.mozilla.org/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness)
- Python：[`==`は型と値を比較、`is`は参照を比較](https://note.nkmk.me/python-eq-is/)
- C#：[`==`は型と値を比較（値型）もしくは参照を比較（参照型）、`ReferenceEquals`は参照を比較](https://atmarkit.itmedia.co.jp/ait/articles/1802/28/news028.html)

| 記号 | 名前 | JavaScript | Python | C# |
|:---:|:---:|:---|:---|:---|
| $a = b$ | 等号<br>Equals | `a == b`<br>`a = b` | `a == b`<br>`a = b` | `a == b`<br>`a = b` |
| $a < b$ | より小さい<br>Strict inequality less-than | `a < b` | `a < b` | `a < b` |
| $a > b$ | より大きい<br>Strict inequality greater-than | `a > b` | `a > b` | `a > b` |
| $a \leq b$ | 以下<br>Unstrict inequality less-than sign | `a <= b` | `a <= b` | `a <= b` |
| $a \geq b$ | 以上<br>Unstrict inequality greater-than sign | `a >= b` | `a >= b` | `a >= b` |
| $a \equiv b$ | 恒等記号<br>Identity sign | `a === b` | `is a b` | `ReferenceEquals(a, b)` |
| $a \neq b$ | 不等号<br>Inequality sign | `a != b` | `a != b` | `a != b` |



# 総和・総乗
| 記号 | 名前 | JavaScript | Python | C# |
|:---:|:---:|:---|:---|:---|
| $\sum_{i=1}^n i$ | 総和記号<br>Summation symbol | `array.reduce((a,b)=>a+b)` | `sum(array)` | `array.Sum()` |
| $\prod_{i=1}^n i$ | 総乗記号<br>Product symbol | `array.reduce((a,b)=>a*b)` | `math.prod(array)` | `array.Aggregate((a,b)=>a*b)` |



# 集合演算
| 記号 | 名前 | JavaScript | Python | C# |
|:---:|:---:|:---|:---|:---|
| $A \subset B$ | 部分集合記号<br>Set subset of | `A.isSubsetOf(B)` | `A.issubset(B)` | `A.IsSubsetOf(B)` |
| $A \supset B$ | 上位集合記号<br>Set superset of | `A.isSupersetOf(B)` | `A.issuperset(B)` | `A.IsSupersetOf(B)` |
| $A \cap B$ | 積集合記号<br>Intersection | `A.intersection(B)` | `A & B` | `A.Intersect(B)` |
| $A \cup B$ | 和集合記号<br>Union | `A.union(B)` | `A \| B` | `A.Union(B)` |
| $a \in A$ | 所属記号<br>Membership sign | `A.has(a)` | `a in A` | `A.Contains(a)` |
| $\\{x,y,z\\}$ | 集合の中括弧<br>Curly brackets for set notation | `new Set([x,y,z])` | `{x,y,z}` | `new HashSet<T>{x,y,z}` |
| $\emptyset$ | 空集合記号<br>Empty set sign | `new Set()` | `set()` | `new HashSet<T>()` |



# 論理演算子
| 記号 | 名前 | JavaScript | Python | C# |
|:---:|:---:|:---|:---|:---|
| $(\exists x)f(x)$ | 存在記号<br>Existential quantifier | `array.some(x=>f(x))` | `any(f(x) for x in array)` | `array.Any(x=>f(x))` |
| $a \lor b$ | 論理和記号<br>Logical disjunction | `a \|\| b` | `a or b` | `a \|\| b` |
| $(\forall x)f(x)$ | 全称記号<br>Universal quantifier | `array.every(x=>f(x))` | `all(f(x) for x in array)` | `array.All(x=>f(x))` |



# 行列表記
| 記号 | 名前 | JavaScript | Python | C# |
|:---:|:---:|:---|:---|:---|
| $\|x\|$ | 行列ノルム<br>Matrix notation | | `numpy.linalg.norm()` | `Matrix.Norm()` |
| $\begin{pmatrix}a & b \\\ c & d\end{pmatrix}$ | 行列の丸括弧<br>Matrix round bracket notation | `[[a,b],[c,d]]` | `numpy.array([[a,b],[c,d]])` | `new Matrix({{a,b},{c,d}})` |
| $\begin{bmatrix}a & b \\\ c & d\end{bmatrix}$ | 行列の角括弧<br>Matrix square bracket notation | `[[a,b],[c,d]]` | `numpy.array([[a,b],[c,d]])` | `new Matrix({{a,b},{c,d}})` |



# その他
<table>
<thead>
  <tr>
    <th style="text-align:center;">記号</th>
    <th style="text-align:center;">名前</th>
    <th style="text-align:center;">JavaScript</th>
    <th style="text-align:center;">Python</th>
    <th style="text-align:center;">C#</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td style="text-align:center;">$\sqrt{x}$</td>
    <td style="text-align:center;">平方根記号<br>Radical symbol</td>
    <td><code>Math.sqrt(x)</code></td>
    <td><code>math.sqrt(x)</code></td>
    <td><code>Math.Sqrt(x)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\sqrt[n]{a}$</td>
    <td style="text-align:center;">n乗根記号<br>Radical symbol for nth root</td>
    <td><code>Math.pow(a, 1/n)</code></td>
    <td><code>a ** (1/n)</code></td>
    <td><code>Math.Pow(a, 1.0/n)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$x^y$</td>
    <td style="text-align:center;">べき乗<br>Superscript notation</td>
    <td><code>a ** b</code></td>
    <td><code>a ** b</code></td>
    <td><code>Math.Pow(a, b)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$x$</td>
    <td style="text-align:center;">変数記号<br>Use of the letter x for an independent variable</td>
    <td><code>let x = 0</code></td>
    <td><code>x = 0</code></td>
    <td><code>var x = 0</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$n\%$</td>
    <td style="text-align:center;">パーセント記号<br>Percent sign</td>
    <td><code>n / 100</code></td>
    <td><code>n / 100</code></td>
    <td><code>n / 100.0</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\infty$</td>
    <td style="text-align:center;">無限大記号<br>Infinity sign</td>
    <td><code>Infinity</code></td>
    <td><code>float('inf')</code></td>
    <td><code>double.PositiveInfinity</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\frac{dy}{dx}$</td>
    <td style="text-align:center;">微分記号<br>Differential sign</td>
    <td><code>(y2-y1)/(x2-x1)</code></td>
    <td><code>scipy.derivative</code></td>
    <td><code>(y2-y1)/(x2-x1)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\int_a^b f(x)dx$</td>
    <td style="text-align:center;">積分記号<br>Integral sign</td>
    <td><pre>function integrate(f, a, b, dx) {
  let sum = 0
  for(let x = a; x <= b; x += dx) {
    sum += f(x) * dx
  }
  return sum
}</pre></td>
    <td><code>scipy.integrate</code></td>
    <td><pre>double Integrate(Func<double,double> f, 
  double a, double b, double dx) {
  double sum = 0;
  for(double x = a; x <= b; x += dx) {
    sum += f(x) * dx;
  }
  return sum;
}</pre></td>
  </tr>
  <tr>
    <td style="text-align:center;">$x'$</td>
    <td style="text-align:center;">導関数記号<br>Prime symbol for derivative</td>
    <td><pre>function derivative(f, x, dx) {
  return (f(x + dx) - f(x)) / dx
}</pre></td>
    <td><code>scipy.derivative</code></td>
    <td><pre>double Derivative(Func<double,double> f, 
  double x, double dx) {
  return (f(x + dx) - f(x)) / dx;
}</pre></td>
  </tr>
  <tr>
    <td style="text-align:center;">$∝$</td>
    <td style="text-align:center;">比例記号<br>Proportionality sign</td>
    <td><code> </code></td>
    <td><code> </code></td>
    <td><code> </code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\frac{\partial f}{\partial x}$</td>
    <td style="text-align:center;">偏微分記号<br>Partial differential sign</td>
    <td><pre>function partialDerivative(f, x, y, dx) {
  return (f(x + dx, y) - f(x, y)) / dx
}</pre></td>
    <td><code>scipy.gradient</code></td>
    <td><pre>double PartialDerivative(
  Func<double,double,double> f, 
  double x, double y, double dx) {
  return (f(x + dx, y) - f(x, y)) / dx;
}</pre></td>
  </tr>
  <tr>
    <td style="text-align:center;">$[x]$</td>
    <td style="text-align:center;">整数部分<br>Integral part</td>
    <td><code>Math.floor(x)</code></td>
    <td><code>math.floor(x)</code></td>
    <td><code>Math.Floor(x)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$n!$</td>
    <td style="text-align:center;">階乗記号<br>Factorial</td>
    <td><pre>function factorial(n) {
  if (n == 0) return 1
  return n * factorial(n - 1)
}</pre></td>
    <td><code>math.factorial(n)</code></td>
    <td><pre>int Factorial(int n) {
  if (n == 0) return 1;
  return n * Factorial(n - 1);
}</pre></td>
  </tr>
  <tr>
    <td style="text-align:center;">$|x|$</td>
    <td style="text-align:center;">絶対値記号<br>Absolute value notation</td>
    <td><code>Math.abs(x)</code></td>
    <td><code>abs(x)</code></td>
    <td><code>Math.Abs(x)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\lfloor x \rfloor$</td>
    <td style="text-align:center;">床関数<br>Greatest integer ≤ x</td>
    <td><code>Math.floor(x)</code></td>
    <td><code>math.floor(x)</code></td>
    <td><code>Math.Floor(x)</code></td>
  </tr>
  <tr>
    <td style="text-align:center;">$\lceil x \rceil$</td>
    <td style="text-align:center;">天井関数<br>Smallest integer ≥ x</td>
    <td><code>Math.ceil(x)</code></td>
    <td><code>math.ceil(x)</code></td>
    <td><code>Math.Ceiling(x)</code></td>
  </tr>
</tbody>
<!-- 横幅を確保するためのダミー行 -->
<tfoot>
<tr><th colspan=14>$\hspace{55em}$</th></tr>
</tfoot>
</table>