【Python演算処理】高校までの数学と専門数学の挟間①「等差数列と一次関数」の学び直し。


相変わらず「<font color=purple>高校までの数学と専門数学の挟間</font>」の徘徊を続けています。この話題に戻るのも一体何度目やら…

### 「等差数列(<font color=blue>Arithmetic Progression</font>)と一次関数（<font color=blue>Linear Function</font>）の関係」についての再確認
等差数列(Arithmetic Progression)$[a_{-∞},…,a_{-3},a_{-2},a_{-1},a_0,a_1,a_2,a_3,…,a_∞]$とは、初項(First Term)$a_0$と公差(Common Difference)d、および各項の添字(Index)n（$a_0$から数えた順番）を用いて表すと$a_n=a_０+dn$となる数列をいう。

```python
import sympy as sp
import numpy as np
A,a,d,n,i,N = sp.symbols('A,a,d,n,i,N')
AP=a+d*n

def Arithmetic_Progression(o,p,q):
    ua=AP.subs([(a, o), (d, p)])
    u0=[]
    for ind in range(q):
        u0.append(ua.subs(n,ind))
    u1=sp.Matrix([u0])
    return u1

sp.init_printing()
#元式
display(AP)

#初項0,交差1,項数１０
a0=Arithmetic_Progression(0,1,10)
display(a0)
print(sp.latex(a0)+"(a=0,d=1,n=10)")

#初項3,交差3,項数１０
a1=Arithmetic_Progression(3,3,10)
display(a1)
print(sp.latex(a1)+"(a=3,d=3,n=10)")
```

```math
a_n=a_０+dn\\
\left[\begin{matrix}0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9\end{matrix}\right](a=0,d=1,n=10)\\
\left[\begin{matrix}3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30\end{matrix}\right](a=0,d=1,n=10)
```

* 小学校の授業では添字nを1から始め$a_n=a_1+d(n-1)$と習った。表現に揺らぎ幅があるだけで基本的に同じ事を言っている。<br>[等差数列-Wikipedia](https://ja.wikipedia.org/wiki/%E7%AD%89%E5%B7%AE%E6%95%B0%E5%88%97)

説明変数(Explanatory Variable)xと目的変数(Response Variable)yの関係を傾き(Slope)aと切片(Intercept)bを用いて表して表した一次関数(Linear Function)y=ax+bと重ねると「<font color=purple>初項=切片、公差=傾き</font>」と対応する。

* デカルト座標系(Cartesian coordinate system)で考えると、一時関数y=ax+bがy軸と交差する(x=0となる)のはy=bの時、x軸と交差する(y=0となる)のは$y=-\frac{b}{a}$の時で両者はb=0の時重なる。つまりb=1の時にはy軸とy=1で、x軸と$y=-\frac{1}{a}$で交差。さらにa=b=1の時にはx軸との交点が-1となり間隔1の二次元格子(2D Grid)が「<font color=purple>正方形を敷き詰めた</font>(<font color=blue>Square-blocked</font>)」形で現出。これが「<font color=purple>立方体を敷き詰めた</font>(<font color=blue>Cube-blocked</font>)」三次元デカルト空間概念の出発点であり、全体として均等尺(Even Scale)による方眼座標系を構築する。<br>[一次関数-Wikipedia](https://ja.wikipedia.org/wiki/%E4%B8%80%E6%AC%A1%E9%96%A2%E6%95%B0)<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/86057d02-88d4-5256-0bd6-f60922a33e51.png)
* ところでa=0の時、一次関数y=ax+bは定数関数y=bに退歩(Degenerate)する(定数関数y=bは退歩した一次関数、すなわち傾きaが0の一次関数とみなせる)。①正円は退歩した楕円、すなわち離心率が0の楕円と見做せる。②線分は接平面の上に存在する退化した放物線とも長さ0の辺を持つ退化した長方形とみなすこともできる。③双曲線は、漸近線を共通する族を通じて、1点で交わる2つの直線に退歩。④点は半径0の退歩した円周とも、長さ0の線分とも、1点で交わる長さ0の直線集合とも見做せる。<br>[退化(数学)-Wikipedia](https://ja.wikipedia.org/wiki/%E9%80%80%E5%8C%96_(%E6%95%B0%E5%AD%A6))<br>また①1点からなる集合は連続体の退化したものとみなせる(順序尺度は間隔尺度や比例尺度が退歩した結果でありつつ、名義尺度と異なり各項目の順番は維持している)。<br>[変数の尺度](https://bellcurve.jp/statistics/course/1562.html)<br>②(ヘヴィサイドの階段関数の様に測定時間などごとに)単一の値しか取らない確率変数は退化分布(Degenerate Distribution)に従う。<br>[退化分布-Wikipedia](https://ja.wikipedia.org/wiki/%E9%80%80%E5%8C%96%E5%88%86%E5%B8%83)<br>③行列の階数が列の数よりも少ない時も退歩と表現する(「階数・退化次数の定理（Rank–Nullity Theorem）=最も簡単なケースでは、ある行列の階数（Rank）と退化次数（Nullity）の和がその行列の列数に等しい)。<br>[階数・退化次数の定理](https://ja.wikipedia.org/wiki/%E9%9A%8E%E6%95%B0%E3%83%BB%E9%80%80%E5%8C%96%E6%AC%A1%E6%95%B0%E3%81%AE%E5%AE%9A%E7%90%86)<br>一方、真逆のプロセスたる進歩(Progress)の結果は一意ではなく、まさにその全貌を明らかにせんとする姿勢の延長線上に多様体(Manifold)概念が現れてくるのである。<br>[多様体の基礎のキソ(PDF)](https://www1.econ.hit-u.ac.jp/kawahira/courses/kiso/04-mfd.pdf)

```python
#初項1,交差0,項数１０
a2=Arithmetic_Progression(1,0,10)
display(a2)
print(sp.latex(a2)+"(a=1,d=0,n=10)")
```

```math
a_n=a_０+dn\\
\left[\begin{matrix}1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\end{matrix}\right](a=1,d=0,n=10)
```

### 「等差数列(<font color=blue>Arithmetic Progression</font>)の総和」についての再確認

```python
#等差関数の総和
a3=Arithmetic_Progression(1,1,10)
display(a3)
print(sp.latex(a3)+"(a=1,d=1,n=10)")

S1=np.sum(a3)
display(S1)
print(sp.latex(S1) )

S0=sp.Sum(A, (i, 1, N))
display(S0)
print(sp.latex(S0))

a4=S0.subs([(A, a3), (N, len(a3))])
display(a4)
print(sp.latex(a4)+"="+sp.latex(S1))
```

```math
\sum_{i=1}^{10} \left[\begin{matrix}1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\end{matrix}\right]=55
```
Sympyではこうも計算出来ます。一般にこの形式で紹介されていますが、これでは「<font color=purple>公差1の場合</font>」しか計算出来ません。他に追加パラメーターが存在するのか、そもそも「<font color=purple>公差１以外の場合</font>」についての需要が存在しないのか…
[Sum()とsummation()の違いってなんだろう](https://funmatu.wordpress.com/2017/10/02/sum%E3%81%A8summation%E3%81%AE%E9%81%95%E3%81%84%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/)

```python
import sympy as sp
k=sp.symbols('k', integer = True)
a,d=sp.symbols('a,d')
a0=sp.Sum(k, (k,1,10) )
a1=sp.summation(k, (k,1,10) )
sp.init_printing()
#表示
display(a0)
display(a1)
print(sp.latex(a0)+"="+sp.latex(a1))
```

```math
\sum_{k=1}^{10} k=55
```

* 一方、こうした考え方は古典的物理学における「<font color=purple>等加速度直線運動における速度変位</font>」の計算方法とも対応してくる。<br>[等加速度直線運動における速度変位](http://www.wakariyasui.sakura.ne.jp/p/mech/henni/toukasokudo.html)<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3a58571e-524b-4964-8fdf-996bf1c8b5ca.png)
<br>![スクリーンショット 2022-08-21 19.39.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/ae6af4c0-0f81-d3bb-9751-a27a6e9bfdb3.png)

ちなみにガウスは幼少時、等比数列の総和は①インデックスを反転させた数列を元数列を足し合わせるとデータ個数分の掛け算になる。②ただしその総計は二倍となるので二で割る、という計算方法を発見したと言われています。そういえば総面積を計算すると2倍になるのは偶関数の特徴…

```python
# ガウスの解き方
a3r=sp.Matrix([a3[::-1]])
a4s=sp.Matrix(np.array(a3)+np.array(a3r))
display(a3r)
display(a4s)
print("\frac{"+sp.latex(a3)+"+"+sp.latex(a3r)+"}{2}=\frac{"+sp.latex(a4s)+"}{2}=\frac{11*10}{2}=55")
```

```math
\sum_{k=n}^{m}\frac{A_k+A_{-k}}{2}=\\
\frac{\left[\begin{matrix}1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\end{matrix}\right]+\left[\begin{matrix}10 & 9 & 8 & 7 & 6 & 5 & 4 & 3 & 2 & 1\end{matrix}\right]}{2}=\frac{\left[\begin{matrix}11 & 11 & 11 & 11 & 11 & 11 & 11 & 11 & 11 & 11\end{matrix}\right]}{2}\\=\frac{11*10}{2}=55
```

さらに項数で割れば「<font color=purple>公差=傾きの平均</font>」5.5が求まります。一方、足し合わせる代わりに引いた場合の総計は0。そして総面積を計算すると0になるのは奇関数の特徴…

```python
# ガウスの解き方に沿った「奇関数性」の確認
a3r=sp.Matrix([a3[::-1]])
a4s=sp.Matrix(np.array(a3)-np.array(a3r))
display(a3r)
display(a4s)
print("\frac{"+sp.latex(a3)+"-"+sp.latex(a3r)+"}{2}=\frac{"+sp.latex(a4s)+"}{2}=0")
```

```math
\sum_{k=n}^{m}\frac{A_k-A_{-k}}{2}\\
=\frac{\left[\begin{matrix}1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\end{matrix}\right]-\left[\begin{matrix}10 & 9 & 8 & 7 & 6 & 5 & 4 & 3 & 2 & 1\end{matrix}\right]}{2}\\=\frac{\left[\begin{matrix}-9 & -7 & -5 & -3 & -1 & 1 & 3 & 5 & 7 & 9\end{matrix}\right]}{2}\\=0
```

* 統計学の世界においてはここで「平均とセットで分布状態を表すパラメーター」として分散(Variance)の概念が登場する。<br>[【Python演算処理】行列演算の基本④大源流における記述統計学との密接な関連性?](https://qiita.com/ochimusha01/items/d36169ad13872a34ebc6)

ところでこうした計算式、何処かで見覚えが…
[双曲線関数-Wikipedia](https://ja.wikipedia.org/wiki/%E5%8F%8C%E6%9B%B2%E7%B7%9A%E9%96%A2%E6%95%B0)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/5f71744e-8411-8d35-b0f2-ef68d57d47aa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/17989f58-f195-2fdc-ae2d-e4316e573f9d.png)

```math
\cosh(x)=\frac{e^{+x}+e^{-x}}{2}\\
\sinh(x)=\frac{e^{+x}-e^{-x}}{2}\\
\tanh(x)=\frac{\sinh(x)}{\cosh(x)}
```

[三角関数-Wikipedia](https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/6d7087fc-8aaf-41e1-178f-328ed52278ae.png)
![600px-Circle_cos_sin.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/98cd141c-cd98-96e5-f6dd-fee085b82e91.gif)

```math
\cos(θ)=\frac{e^{+θi}+e^{-θi}}{2}\\
\sin(θ)=\frac{e^{+θi}-e^{-θi}}{2}\\
\tan(θ)=\frac{\sin(θ)}{\cos(θ)}
```
Tan(θ)の値は上掲の「<font color=purple>等比数列における公差=一次元関数における傾き</font>」そのもので、これをTanh(x)のxに与えた結果が以下。

```math
\tanh(\tan(\frac{π}{2})=+∞)=+∞\\
\tanh(\tan(\frac{π}{4})=1)=0.7615942\\
\tanh(\tan(0)=0)=0\\
\tanh(-\tan(\frac{π}{4})=-1)=-0.7615942\\
\tanh(\tan(\frac{π}{2})=-∞)=-∞
```

* 上掲の図を見ても分かる様にtanh(x)関数はその関数としての特性がシグモイド関数に重なる為、機械学習分野において活性化関数(Activation Function)候補と目される。<br>[第2回　ニューラルネットワーク最速入門 ― 仕組み理解×初実装（中編）](https://atmarkit.itmedia.co.jp/ait/articles/1910/17/news026.html)<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0b7a281a-29c8-4915-38f9-2db31013ee7f.png)
* 放物線関数の指数射影$e^{-x^2}$に由来するガウスの誤差関数(ERF=Error Function)や相補誤差関数 (ERFC=Complementary Error Function) もまた同様の数学的特性を備えている為、活性化関数候補として意識され得る。<br>[【数理考古学】誤差関数(ERF)と相補誤差関数 (ERFC)](https://qiita.com/ochimusha01/items/ee8b32e4b2cc7ce4acb0)<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/29d4797b-2516-6806-a597-4428273f2f2e.png)
<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/4c016187-4bba-6b37-9a28-6441db0b028b.png)
* 機械学習の活性化関数としては、これまで(電気工学からの援用たる)ヘヴィサイドのステップ関数、(確率論からの援用たる)ロジスティックシグモイド、（機能的に同等ながらより実践的な）双曲線正接関数などが採用されてきたが、2011年以降は正規化線形ユニット（ReLU=Rectified Linear Unit)およびそれを平滑化近似したソフトプラス（softplus）関数(SmoothReLU関数)が主流になりつつある。<br>[正規化線形関数-Wikipedia](https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%8C%96%E7%B7%9A%E5%BD%A2%E9%96%A2%E6%95%B0)<br>中には(金融業界で有名なブラック–ショールズ方程式同様に)ガウス雑音を含む拡張の系統も。<br>[ブラック–ショールズ方程式-Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%E2%80%93%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%AB%E3%82%BA%E6%96%B9%E7%A8%8B%E5%BC%8F)

ところで、今回ここに名前だけ登場した「円(楕円)関数」「放物線関数」「双曲線関数」は離心率(Eccentricity)εを用いた単一の式で表し得る。座標系としては水平面が極座標系、垂直面が円錐座標系を採用。以降の投稿ではこの系列の考え方との統合も試みていく。
[【連続極座標系】離心率(Eccentricity)εの極限に現れる虚数(Imaginal)について。](https://qiita.com/ochimusha01/items/62300d5bceae7e9c5e1d)
![Ecc102.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/b034c089-da86-a465-476e-a544c844268c.gif)
そんな感じで以下続報…