TikZで使える数学の関数


# TikZで使うことができる数学関数

TikZのライブラリー，tikzmathを使用する。

## 関数

##### 定数関数

`pi` 円周率

`e` 自然対数の底

##### 三角関数

引数はデフォルトでは，度数で記述。

`sin()`

<img width=300 src="https://texclip.marutank.net/render.php/texclip20230704014740.png?s=%5Cbegin%7Btikzpicture%7D%0A%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C0)%20--(2*pi%2B0.25%2C0)%20node%5Bright%5D%20%7B%24x%24%7D%3B%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C-1.2)%20--(0%2C1.2)%20node%5Babove%5D%20%7B%24y%24%7D%3B%0A%0A%5Cdraw%5Bvery%20thick%2Cred%2Csamples%3D100%2Cdomain%3D0%3A2*pi%5D%20plot(%5Cx%2C%7Bsin(%5Cx%20r)%7D)%3B%0A%0A%5Cend%7Btikzpicture%7D%0A&f=c&r=600&m=p&b=f&k=f">

```tex
\begin{tikzpicture}

\draw[very thick,-latex](0,0) --(2*pi+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-1.2) --(0,1.2) node[above] {$y$};

\draw[very thick,red,samples=100,domain=0:2*pi] plot(\x,{sin(\x r)});

\end{tikzpicture}
```

点の座標に関数が含まれている場合は，`( ,{sin( )})`のように，中カッコに入れる必要があります。

`cos()`

<img width=300 src="https://texclip.marutank.net/render.php/texclip20230704015212.png?s=%5Cbegin%7Btikzpicture%7D%0A%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C0)%20--(2*pi%2B0.25%2C0)%20node%5Bright%5D%20%7B%24x%24%7D%3B%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C-1.2)%20--(0%2C1.2)%20node%5Babove%5D%20%7B%24y%24%7D%3B%0A%0A%5Cdraw%5Bvery%20thick%2Cred%2Csamples%3D100%2Cdomain%3D0%3A2*pi%5D%20plot(%5Cx%2C%7Bcos(%5Cx%20r)%7D)%3B%0A%0A%5Cend%7Btikzpicture%7D&f=c&r=600&m=p&b=f&k=f">



`tan()`

<img width=300 src="https://texclip.marutank.net/render.php/texclip20230704015508.png?s=%5Cbegin%7Btikzpicture%7D%0A%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C0)%20--(2*pi%2B0.25%2C0)%20node%5Bright%5D%20%7B%24x%24%7D%3B%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C-3)%20--(0%2C3)%20node%5Babove%5D%20%7B%24y%24%7D%3B%0A%0A%5Cbegin%7Bscope%7D%0A%5Cclip%20(0%2C-3)%20rectangle%20(2*pi%2C3)%3B%0A%0A%5Cdraw%5Bvery%20thick%2Cred%2Csamples%3D100%2Cdomain%3D0%3A2*pi%5D%20plot(%5Cx%2C%7Btan(%5Cx%20r)%7D)%3B%0A%5Cend%7Bscope%7D%0A%0A%5Cend%7Btikzpicture%7D&f=c&r=600&m=p&b=f&k=f">




```
sin(30)
```

が返す値は，
>✕　sin(30ラジアン)
>○　sin(30度)

となります。

引数にラジアンを使用する場合は，

`sin(\x r)`

`r`を記入します。

```
sin(3 r)
```

>　sin(3ラジアン)

と解釈されます。

注意 `sin(\x+\y r)`とした場合，`\y`のみがラジアンと解釈されてしまいます。

例えば，

```
sin(3 + 3 + 3 r)
```

とするとどうなるでしょうか。この場合，最後の3だけラジアンと解釈されます。

すべての3をラジアンを解釈させるためには，

```
sin(3 r + 3 r + 3 r)
```

と，引数の項毎に`r`を付けなければいけません。積や分数だけからできている項の場合は，たとえば，

```
sin(3 * 3 r)
```

のように，`r`は1つで十分です。


カッコを使う

```
sin(3 r + 3 r + 3 r)
```

のかわりに，

```
sin((3 + 3 + 3) r)
```

とすること，すべての項に`r`が係ります。


##### 引数の限界

三角関数の引数として取れる値には限界がある。

>度数法　16383
>ラジアン　およそ285

三角関数は周期関数だから，数値計算の際には定期的に $2\pi$ の整数倍ずつ引数を調整することが必要になる。



逆三角関数
`asin()`

<img width=300 src="https://texclip.marutank.net/render.php/texclip20230704015627.png?s=%5Cbegin%7Btikzpicture%7D%0A%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(-1%2C0)%20--(1%2B0.25%2C0)%20node%5Bright%5D%20%7B%24x%24%7D%3B%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C-pi%2F2)%20--(0%2Cpi%2F2)%20node%5Babove%5D%20%7B%24y%24%7D%3B%0A%0A%5Cdraw%5Bvery%20thick%2Cred%2Csamples%3D100%2Cdomain%3D-1%3A1%5D%20plot(%5Cx%2C%7Brad(asin(%5Cx))%7D)%3B%0A%0A%5Cend%7Btikzpicture%7D%0A&f=c&r=600&m=p&b=f&k=f">





`acos()`

<img width=300 src="https://texclip.marutank.net/render.php/texclip20230704015731.png?s=%5Cbegin%7Btikzpicture%7D%0A%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(-1%2C0)%20--(1%2B0.25%2C0)%20node%5Bright%5D%20%7B%24x%24%7D%3B%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C0)%20--(0%2Cpi)%20node%5Babove%5D%20%7B%24y%24%7D%3B%0A%0A%5Cdraw%5Bvery%20thick%2Cred%2Csamples%3D100%2Cdomain%3D-1%3A1%5D%20plot(%5Cx%2C%7Brad(acos(%5Cx))%7D)%3B%0A%0A%5Cend%7Btikzpicture%7D&f=c&r=600&m=p&b=f&k=f">



`atan()`

<img width=300 src="https://texclip.marutank.net/render.php/texclip20230704015824.png?s=%5Cbegin%7Btikzpicture%7D%0A%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(-4%2C0)%20--(4%2B0.25%2C0)%20node%5Bright%5D%20%7B%24x%24%7D%3B%0A%5Cdraw%5Bvery%20thick%2C-latex%5D(0%2C-pi%2F2)%20--(0%2Cpi%2F2)%20node%5Babove%5D%20%7B%24y%24%7D%3B%0A%0A%5Cdraw%5Bvery%20thick%2Cred%2Csamples%3D100%2Cdomain%3D-4%3A4%5D%20plot(%5Cx%2C%7Brad(atan(%5Cx))%7D)%3B%0A%0A%5Cend%7Btikzpicture%7D&f=c&r=600&m=p&b=f&k=f">


これらは度数で値を返します。

数値を度数からラジアン，ラジアンから度数に変換する関数もあります。

度数→ラジアン：`rad()`
ラジアン→度数：`deg()`



指数関数

`exp()`
底は`e`です。

<img width=300 src="">

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,0-0.25) --(0,4) node[above] {$y$};

\begin{scope}
\clip(-4,0) rectangle (4,4);

\draw[very thick,red,samples=100,domain=-4:4] plot(\x,{(exp(\x))});

\end{scope}

\end{tikzpicture}
\end{document}
```



対数関数
`ln()`
底は`e`です。
```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-0.5,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-4) --(0,2) node[above] {$y$};

\begin{scope}
\clip(-0.5,-4) rectangle (4,2);

\draw[very thick,red,samples=100,domain=0+0.01:4] plot(\x,{(ln(\x))});

\end{scope}

\end{tikzpicture}
\end{document}
```

常用対数
`log10()`
底は`10`です。


双曲関数
`sinh()`

`cosh()`

`tanh()`


平方根
`sqrt()`

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-0.25,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-0.5) --(0,4) node[above] {$y$};

\begin{scope}
\clip(-0.5,-0.25) rectangle (4,4);

\draw[very thick,red,samples=100,domain=0:4] plot(\x,{sqrt(\x)});

\end{scope}

\end{tikzpicture}
\end{document}
```

絶対値関数
`abs()`

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-0.5) --(0,4) node[above] {$y$};

\begin{scope}
\clip(-4,-0.5) rectangle (4,4);

\draw[very thick,red,samples=100,domain=-4:4] plot(\x,{abs(\x)});

\end{scope}

\end{tikzpicture}
\end{document}
```

符号関数
`sign()` 
引数が正ときは$+1$, 負のときは$-1$，0のときは0を返します。
私の環境には，この関数はありませんでした。

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-2) --(0,2) node[above] {$y$};

\begin{scope}
\clip(-4,-2) rectangle (4,2);

\draw[red,very thick,samples=200,domain=-4:4] plot(\x,{sign(\x)});

\end{scope}

\end{tikzpicture}
\end{document}
```


## 2変数関数

2成分ベクトルの長さ

'veclen(x,y)'

入れ子で使うと，3成分ベクトルの大きさに応用することができる。


最大公約数
`gcd(x,y)`



## 二項演算

和
`add(x,y)`

差
`subtract(x,y)`

差
`multiply(x,y)`

商
`\divide(x,y)` $x \div y = \frac{x}{y}$

商（あまりを出す）
`\div(x,y)`

剰余(あまり)
`mod(,)`

正の剰余
`Mod(,)`

冪
`pow(x,y)` $x^y$


## 二項関係

`x > y`
$x$が$y$より大きいとき1，それ以外で0を返します。

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-0.5) --(0,2) node[above] {$y$};

\begin{scope}
\clip(-4,-0.5) rectangle (4,2);

\draw[red,very thick,samples=200,domain=-4:4] plot(\x,{\x > 0});

\end{scope}

\end{tikzpicture}
\end{document}
```

`x >= y`
$x$が$y$以上のとき1，それ以外で0を返します。

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-0.5) --(0,2) node[above] {$y$};

\begin{scope}
\clip(-4,-0.5) rectangle (4,2);

\draw[red,very thick,samples=200,domain=-4:4] plot(\x,{\x >= 0});

\end{scope}

\end{tikzpicture}
\end{document}
```

`x < y`, `x<=y`
$x$が$y$より小さいとき，あるいは$y$以下のとき1，それ以外で0を返します。

```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-0.5) --(0,2) node[above] {$y$};

\begin{scope}
\clip(-4,-0.5) rectangle (4,2);

\draw[red,very thick,samples=200,domain=-4:4] plot(\x,{\x < 0});

\end{scope}

\end{tikzpicture}
\end{document}
```

`x == y`
$x$が$y$と等しいとき1，それ以外では0を返します。
```tikz
\begin{document}
\begin{tikzpicture}

\draw[very thick,-latex](-4,0) --(4+0.25,0) node[right] {$x$};
\draw[very thick,-latex](0,-0.5) --(0,2) node[above] {$y$};

\begin{scope}
\clip(-4,-0.5) rectangle (4,2);

\draw[red,very thick,samples=100,domain=0:-4] plot(\x,{\x == 0});
\draw[red,very thick,samples=100,domain=0:4] plot(\x,{\x == 0});

\end{scope}

\end{tikzpicture}
\end{document}
```





`\loop``\repeat`の組み合わせで使う。ループは
`\ifnum\countA < \stepA`は`\countA`が`\stepA`よりも小さいときを条件にして実行される。この条件を満たさないとき，`\loop`内の処理が終了する。