0
0

【数理溢れ話】「特定生物が抱える計数的直感能力の限界」からの出発

Last updated at Posted at 2023-10-20

人間の計数的直感能力(Computable Intuition)はその大源流、すなわちカンブリア爆発(Cambrian Explosion,約5億4200万年前~5億3000万年前)期に左右相称動物(Bilateral)が授かった視覚と視覚情報を処理する脊髄の発展形としての処理様式に思うより拘束されている様です。
Wikipedia「直観」
動物はいつ左右対称になったのか

歴史のこの時点で獲得が始まったのは、より具体的にいうと三次元認識能力。当初最大のライバルだった放射相称動物(Radiata)には「刺激を受けた方角とその反対側」程度の粗雑な方向感覚しか備わっておらず、従って緩慢な反応速度でしか動作出来ません。かかる制約の突破こそが最初の課題だったという次第。
放射相称動物(Radiata)
水圧を利用して動く動物とは

実は以前から「文文文=文系人間による文系人間の為の (数理要素最小限の)文系数学」をそれなりの形でまとめたいという野望を抱いてきました。これはその為の試論の一つ。文系数学の大源流として、それなりにふさわしい出発点ではないでしょうか。

単極球面体(Monopolar Sphere)

0と無限の幾何学

観測原点(Oo=Observation origin)0と観測極限(Ol=Observation limit)$\tilde{∞}$を両端とするユークリッド幾何学的実数直線l、およその任意の位置に存在する観測点(Op=Observation point)pから出発する。なお$\tilde{∞}$は「符号なし無限遠点(Unsigned Infinity)」を意味するものとする。
スクリーンショット 2023-10-20 7.21.42.png
無限遠点自体は観測不可能なのでε-δ論法流に「演算上、任意の$p_0$が示された時、必ずそれを超える$p_{0+1}$が提示可能である」事をもってとりあえずこの座標系における無限概念を規定する。
うさぎでもわかるε-δ論法・ε-N論法

等差数列の計算方法を距離演算f(x)に採用した場合が以下。それ自体は整数$\mathbb{Z}$の簡易規定$∞^±=1∞^±,1=\frac{1}{∞^±}$を有理数(Rational=割り切れる数)$\mathbb{Q}$全域に拡張したに過ぎない。
数学記号の由来について(8)-「数」を表す記号-

\int_{x=0}^{p}f(x)dx=p,\lim_{x=0→±∞}=±∞,l\in \mathbb{Q},\forall p_i(0≦i≦±∞) \in l
P_i= [∞^-α=∞^-,,,-2α=-2α,,,-1α=-α,,,0×α=0,,,+1α=α0,,,+2α=2α,,,∞^+α=∞^+]

等比数列の計算方法を距離演算f(x)に採用した場合が以下。

\int_{x=0}^{p}f(x)dx=p,\lim_{x=0→\tilde{∞}}=\tilde{∞},l\in \mathbb{Q},\forall p_i(0≦i≦\tilde{∞}) \in l
P_i= [α^{-∞}=0,,,α^{-1}=\frac{1}{α},,,α^0=1,,,α^1=α,,,α^{+∞}=∞]

両者を組み合わせたN進数概念$\sum_{i=∞^-}^{∞^+}α_iN^i$を持ちいれば任意の実数を望む制度で表せる。例えば10進数1234.5678の表現は以下。

1234.5678=10^3×1+10^2×2+10^1×3+10^0×4+10^{-1}×5+10^{-2}×6+10^{-3}×7+10^{-4}×8

冪算$N^m$の根Nとして"10"が最も普及したのはあくまで人類の勝手な都合であって、別にその背景に数理的根拠がある訳ではない。そして当然この表現に収まらなかった部分は切り捨てられる訳で、同時にそれが計数的限界(Computable Limit)を示す表現ともなる。
数学的に美しいのは「12進法」なのに私たちが「10進法」を使っている理由

ここまでは同一線上の1次元的展開に過ぎないが、冪算は「幾何級数(Geometric-series)的に増える」なる表現の由来となってるくらいだから2次元操作が入ってきて、より具体的には数理的に「xy直交座標系においてxの増分が1の時にyの増分も1となる(傾きが1となる)根」を見定める必要が出てくる。とりあえずざっくりとした目安として物理学で等加速運動の時間あたりの平均速度を計算する式$\frac{b-a}{2}$を用いると$\frac{α^{+1}-α^{-1}}{2}$となり、2を根とした冪算$2^n$の結果が$\frac{2^{+1}-2^{-1}}{2}=\frac{2-\frac{1}{2}}{2}=\frac{3}{4}$となって$2^0=1$を下回り、3を根とした冪算$3^n$の結果が$\frac{3^{+1}-3^{-1}}{2}=\frac{3-\frac{1}{3}}{2}=\frac{4}{3}$となって$3^0=1$を上回る事から探してる根αの値が2より大きく3より小さい事が明らかとなる(逆数関係にあって掛け合わせると1になるのが興味深い)。
スクリーンショット 2023-10-20 9.56.17.png
実はこの式自体はハイパボリックサインSinhのものなので1でなくSinh(1)=1.17520119に収束。正しい答えはヤコブ・ベルヌーイ(Jakob Bernoulli,1654年~1705年)が会計学の複利計算式より導入した$(1-\frac{1}{n})^n$によって得られ、その値2.718281828をネイピア数という。
20211001213633.gif

%matplotlib nbagg
import math as m
import cmath as c
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# 等差数列を生成
X = np.linspace(-10,10,101,endpoint =True)
Y0=np.exp(X)

plt.style.use('default')
fig = plt.figure()
Tcode=np.linspace(0.1,4,40,endpoint =True)

def exponential(n):
    plt.cla()
    #値域の決定
    Y1=Tcode[n]**X
    def tangent(x):return(np.log(Tcode[n])*x+1)
    Y2=tangent(X)
    # 可視化
    ex01="y="+str(round(Tcode[n],3))+"^x"
    ex02="y=log("+str(round(Tcode[n],3))+")x+1"
    plt.plot(X, X+1,color="green", label="y=x+1")
    plt.plot(-X, X+1,color="green", label="y=-x+1")
    plt.plot(X, Y0,color="purple", label="y=exp(x)")
    plt.plot(-X, Y0,color="purple", label="y=exp(-x)")
    plt.plot(X, Y1,color="red", label=ex01)
    plt.plot(X, Y2,color="blue", label=ex02)
    slopeX1=[0,1,1,0]
    slopeY1=[1,1,tangent(1),1]
    plt.fill(slopeX1,slopeY1,color="y",alpha=0.5)
    slopeX2=[0,-1,-1,0]
    slopeY2=[1,1,tangent(-1),1]
    plt.fill(slopeX2,slopeY2,color="y",alpha=0.5)
    #頂点
    plt.plot(0, 1,color="black", marker="o")
    plt.plot(1, 1,color="black", marker="o")
    plt.plot(-1, 1,color="black", marker="o")
    plt.plot(1, tangent(1),color="blue", marker="o")
    plt.plot(-1, tangent(-1),color="blue", marker="o")
    #座標
    plt.hlines(0,-10,10,color="black")
    plt.hlines(1,-10,10,color="black",lw=0.5)
    plt.hlines(-1,-10,10,color="black",lw=0.5)
    plt.vlines(0,-10,10,color="black")
    plt.ylim([-4,4])
    plt.xlim([-4,4])
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.title("Variation of Exponentiation Root")
    ax = fig.add_subplot(111)
    ax.set_aspect('equal')
    ax.text(0, 1," (0,1)",color="black", size=9)
    ax.text(1, 1," (1,1)",color="black", size=9)
    ax.text(-1, 1," (-1,1)",color="black", size=9)
    tan1="(1,"+str(round(tangent(1),3))+")"
    ax.text(1, tangent(1),tan1,color="blue", size=9)
    tan2="(-1,"+str(round(tangent(-1),3))+")"
    ax.text(-1, tangent(-1),tan1,color="blue", size=9)
    ax.legend(loc='lower center')
    #plt.show()

ani = animation.FuncAnimation(fig, exponential, interval=50,frames=len(Tcode))
ani.save("nap012.gif", writer="pillow")

ここで得た「接線の傾きが1となる冪算$e^n$」の使い道は後述するとして、こうした観測から得られる結果集合(Ors=Observation result set)は、観測開始点0を中心とする観測球球面(Os=Observation Sphere)Sを構成する。この観測球面は1次元上では$∞^-$から$∞^+$にかけて連続する開直線(open line)、2次元上では半径$\tilde{∞}$の円弧(circle)、3次元上では同じく半径$\tilde{∞}$の球表面(Sphere)と窺え、無限遠点はそれぞれ1次元の場合の開直線の両端、2次元の場合の円弧上、3次元の場合の球表面上に観察される。

スクリーンショット 2023-10-20 10.50.27.png

それにつけても、どうしてこの様に場合によって2点とか円弧とか球表面に見えるのに「無限遠点」というのか。それは演算次第で確かに「点」への変換が可能だから。図の様に1次元では$∞^-=∞^+=\tilde{∞}$と考える。円弧については以下の様に「巾着袋の緒を締める」幾何学的操作によって点と見做せる。あとはこのプロセスを地道に繰り返すのみ。
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303632372f32303231303632373132303435372e676966.gif
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303632372f32303231303632373132303833372e676966.gif
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303632372f32303231303632373132303930362e676966.gif

%matplotlib nbagg
import math as m
import cmath as c
import numpy as np
from functools import reduce
from itertools import accumulate
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation


#指数写像演算
def Napier_culc(ABS,n):
    RIM=ABS*m.pi*(0+1j)
    Tarm0=np.repeat(RIM/n,n)
    Tarm=np.concatenate([[(1+0j)],Tarm0])
    return accumulate(Tarm,lambda x,y:x+x*y)

#単位円データ作成
u0=np.linspace(0,m.pi*2,61,endpoint = True)
u1=[]
for nm in range(len(u0)):
    u1.append(complex(m.cos(u0[nm]),m.sin(u0[nm])))
uc=np.array(u1)
uz0=np.repeat(0,61)
uz1=np.repeat(1,61)
uz2=np.repeat(2,61)

#タイムテーブル
Tcode=np.linspace(0,m.pi*2,61,endpoint =True)

#グラフ表示
plt.style.use('default')
fig = plt.figure()
ax = Axes3D(fig)

#関数定義
def Exponential_map(n):
    plt.cla()
    #元(Element)算出
    Ed=np.array(list(Napier_culc(ABS,Time_Code[n])))-1
    #指数射影描画
    rollc0=[]
    for nm in range(len(Tcode)):
        rollxy0=[]
        for ni in range(len(Ed)):
            rollxy0.append(c.rect(Ed[ni].imag,Tcode[nm]))
        rollxy=np.array(rollxy0)
        rollc0.append(rollxy[len(rollxy)-1])
        ax.plot(rollxy.real,rollxy.imag,-Ed.real,color="gray",lw=0.5)
    rollc=np.array(rollc0)
    rollz=np.repeat(-Ed[len(Ed)-1].real,len(rollc))
    ax.plot(rollc.real,rollc.imag,rollz,color="black",lw=0.5)
    #円筒追加
    ax.plot(uc.real*np.pi,uc.imag*np.pi,uz0,color="green",lw=1)
    ax.plot(uc.real,uc.imag,uz0,color="green",lw=1)
    ax.plot(uc.real,uc.imag,uz1,color="green",lw=1)
    #スポーク描画
    for num in range(len(uc)):
        ax.plot([0,uc[num].real],[0,uc[num].imag],[1,1],color="olivedrab",lw=0.5)
    ax.plot(uc.real,uc.imag,uz2,color="green",lw=1)
    ax.plot([0,0],[0,0],[0,1],color="black",marker='x',lw=1)
    ax.plot([0,0],[0,0],[0,2],color="black",marker='x',lw=1)
    #諸元追加
    ax.set_ylim([-np.pi,np.pi])
    ax.set_xlim([-np.pi,np.pi])
    ax.set_zlim([0,np.pi*2])
    ax.set_title("Logarithmic Projection of Exponential Map")
    ax.set_xlabel("Imaginal x")
    ax.set_ylabel("Imaginal y")
    ax.set_zlabel("Real")
    # グラフを回転(elv=45,0で水平,90で垂直)
    ax.view_init(elev=45, azim=-45)

ABS=1
Time_Code=[1,2,4,8,16,32,64,128,256]

#Exponential_map(7)
#plt.show()

ani = animation.FuncAnimation(fig, Exponential_map, interval=100,frames=len(Time_Code))
ani.save("map100001.gif", writer="pillow")

そもそもこの操作自体、上掲の「($∞^+=∞^-=\tilde{∞}$と見做す事で)円弧を構成する」幾何学操作を周回分繰り返したに過ぎない。
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303432392f32303231303432393132333834352e676966.gif

%matplotlib nbagg
import math as m
import cmath as c
import numpy as num
import matplotlib.pyplot as plt
from functools import reduce
from itertools import accumulate
import matplotlib.animation as animation

def Napier_culc(ABS,n):
    RIM=ABS*m.pi*(0+1j)
    Tarm0=num.repeat(RIM/n,n)
    Tarm=num.concatenate([[(1+0j)], Tarm0])
    return accumulate(Tarm,lambda x,y:x+x*y)

#単位円データ作成
c0=num.linspace(0,2*m.pi,61,endpoint = True)
s0=[]
for nm in range(len(c0)):
    s0.append(complex(m.cos(c0[nm]),m.sin(c0[nm])))
s1=num.array(s0)
plt.style.use('default')
fig = plt.figure(111)

#関数定義
def Eulerien_Identity(n):
    plt.cla()
    #ネイピア数算出
    ei01=num.array(list(Napier_culc(ABS,Time_Code[n])))
    EI0=[]
    for nm in range(len(ei01)):
        EI0.append(ei01[nm].conjugate())
    ei02=num.array(EI0)
    #円周描画
    plt.plot(s1.real,s1.imag,color="green", label="Circle")
    plt.plot(ei01.real,ei01.imag,color="blue", label="(1+1/n)^n")
    plt.plot(ei02.real,ei02.imag,color="red", label="(1-1/n)^n")
    plt.xlim([-m.pi,m.pi])
    plt.ylim([-m.pi,m.pi])
    plt.title("Eulerean Identity")
    plt.xlabel("Real")
    plt.ylabel("Imaginal")
    ax = fig.add_subplot()
    ax.set_aspect('equal', adjustable='box')
    #補助線描画
    plt.axvline(0, 0, 1,color="black")
    plt.axhline(0, 0, 1,color="black")
    plt.plot([-1,0],[0,0],color="red",lw=1)
    plt.plot([0,1],[0,0],color="blue",lw=1)
    ax.text(0, 0, "0",color="black",size=13)
    ax.text(1, 0, "1",color="blue",size=13)
    ax.text(-1, 0, "-1",color="red",size=13)
    ax.text(0, 1, "π",color="green",size=13)
    ax.text(0, -1, "",color="green",size=13)
    #凡例描画
    ax.legend(loc='lower right')

ABS=1
Time_Code=[1,2,4,8,16,32,64,128]

#Eulerien_Identity(0)
#plt.show()

ani = animation.FuncAnimation(fig, Eulerien_Identity, interval=100,frames=len(Time_Code))
ani.save("EI01.gif", writer="pillow")

プログラム中でガンガン使ってる様に、かかる遷移(指数写像・対数写像)はネイピア数eを求める式$(1+\frac{1}{n})^n$のnを$1→\tilde{∞}$に、あるいはその逆に$\tilde{∞}→1$へと推移させる時に観察される。
Wikipedia「リー環の指数写像」

この事から分かるのは…

  • 円弧上の任意の点には「中心から下ろした垂線と必ず直交する一方、隣接する2点とはほとんど水平に交わる」という奇妙な特徴がある。「地球は生身の人間に観測可能な範囲ではほとんど平面にしか見えないが実際には球」というアレ。その正体こそが「円弧を微細連続領域に分解して再集計する時に初めて視覚化される指数関数$e^{θi}$の働き」という次第。
    68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303232303130392f32303232303130393134303233342e676966.gif
%matplotlib nbagg
import math as m
import cmath as c
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#単位円データ作成
c0=np.linspace(-m.pi,m.pi,61,endpoint = True)
s0=[]
for num in range(len(c0)):
    s0.append(complex(m.cos(c0[num]),m.sin(c0[num])))
s1=np.array(s0)
#垂直線
Vert_st0=complex(1,-5)
print(c.polar(Vert_st0))
print(abs(Vert_st0))
print(c.phase(Vert_st0))
Vert_ed0=complex(1,5)

plt.style.use('default')
fig = plt.figure()

#関数定義
def unit_circle(n):
    plt.cla()
    #スポーク線描画
    for num in range(len(s1)):
        plt.plot([0,s1[num].real],[0,s1[num].imag],color="gray",lw=0.5);    
    #円周描画
    plt.plot(s1.real,s1.imag,color="blue", label="Unit Cylinder")
    plt.ylim([-1.1,1.1])
    plt.xlim([-1.1,1.1])
    plt.title("Unit Circle")
    plt.xlabel("Real")
    plt.ylabel("Imaginal")
    ax = fig.add_subplot(111)
    ax.set_aspect('equal', adjustable='box')
    ax.legend(loc='upper right')
    #補助線描画
    plt.axvline(0, 0, 1,color="red")
    plt.axhline(0, 0, 1,color="red")
    #移動線描画
    plt.plot([0,s1[n].real],[0,s1[n].imag],color="green",lw=1)
    #垂直線
    Vert_st=c.rect(abs(Vert_st0),c.phase(Vert_st0)+c0[n])
    Vert_ed=c.rect(abs(Vert_ed0),c.phase(Vert_ed0)+c0[n])
    plt.plot([Vert_st.real,Vert_ed.real],[Vert_st.imag,Vert_ed.imag],color="green",lw=1)

ani = animation.FuncAnimation(fig, unit_circle, interval=50,frames=len(s1))
ani.save("orth01.gif", writer="pillow")
  • 問題は計算精度で、どんなに高性能のコンピューターを使って無限に周回運動を続ける事は出来ない。ここで全体を半周(πラジアン)なり1周(2πラジアン)なりを無限に繰り返してると考え、誤差を最小限に抑え込もうとするオイラーの定理$e^{θi}=Cos(θ)+Sin(θ)i$の出番となる訳である。
    68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303432392f32303231303432393133313434352e676966.gif
ABS=6
Time_Code=[1,2,4,8,16,32,64,128,256,512,1024,2048]
  • オイラーの公式は複素関数の代表例の一つであり、この様に「1を保守する」作業を「正規化」ないしは「規格化」と呼ぶ。

複素数値関数の正規化または規格化

  • さらにはコーシーの積分定理によれば正則関数の積分結果は0になる。ここで問題となるのは上掲図の「三次元における(0→$∞^+$の座標系と0→$∞^-$の座標系の)二重球面状態」。なのでヤコビアンを用いて球の体積を求める時や球表面を経度(±180度)と緯度(±90度)で表す時には「半分」で考える。この様に「任意の偶関数を中心で割って奇関数二つと見做す」操作などが偶奇概念の出発地点の一つとなる。

Wikipedia「コーシーの積分定理」

\int_0^{1}\int_0^{2π}\int_0^{π}dx=\begin{vmatrix} \frac{∂x}{∂r} & \frac{∂x}{∂θ} & \frac{∂x}{∂φ}\\ \frac{∂y}{∂r} & \frac{∂y}{∂θ} & \frac{∂y}{∂φ}\\ \frac{∂z}{∂r} & \frac{∂z}{∂θ} & \frac{∂z}{∂φ}\end{vmatrix}

半径・直径・円周長・円の面積・球の表面積・球の体積の計算上の往復
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303731362f32303231303731363034353235382e676966.gif
Yahoo知恵袋「3次元の極座標について」

  • 実はここまで徹底して嫌われている二重球面状態、トーラス座標系(Torus Coordinate System)における「大半径0、小半径1」の状態だったりする。
    スクリーンショット 2023-10-20 16.00.03.png
    68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303432332f32303231303432333037353232372e676966.gif
    68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303432332f32303231303432333038303232302e676966.gif
    68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303432332f32303231303432333038303330352e676966.gif
%matplotlib nbagg
import math as m
import cmath as c
import numpy as num
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation

#円柱データ作成
c0=num.linspace(0,m.pi*120,1201,endpoint = True)
s0=[]
for nm in range(len(c0)):
    s0.append(complex(m.cos(c0[nm]),m.sin(c0[nm])))
s1=num.array(s0)
z0=num.linspace(-1,1,1201,endpoint = True)

#「曲率」を計算
cv0=num.linspace(-1,1,1201,endpoint = True)
cv1=num.sqrt(1-cv0**2)

#トーラス計算
s2=s1*(1+cv1)
s3=s1*(1-cv1)

#小半径追加
MiHz0=num.linspace(-1,1,61,endpoint = True)
MiHz=MiHz0[::-1]
MiPx=1+num.sqrt(1-MiHz**2)
MiMx=1-num.sqrt(1-MiHz**2)
MiBx=num.sqrt(1-MiHz**2)
MiHy=num.repeat(0,61)

#小半径アニメーション(元図形)
MiAh1=num.linspace(-1,1,31,endpoint =True)
MiAh2=num.linspace(-1,1,31,endpoint = False)
MiAh3=num.concatenate([MiAh1, MiAh2[::-1]])
MiAh=num.concatenate([MiAh3[14:61], MiAh3[0:13]])
MiAv1=1-num.sqrt(1-MiAh1**2)
MiAv2=1+num.sqrt(1-MiAh2[::-1]**2)
MiAv3=num.concatenate([MiAv2, MiAv1])
MiAv=num.concatenate([MiAv3[14:61], MiAv3[0:13]])

#小半径アニメーション(回転)
MiAvC0=[]
for nm in range(len(MiAv)):
    MiAvC0.append(complex(MiAv[nm],0))
MiAvC=num.array(MiAvC0) 

#単位円データ作成
u0=num.linspace(0,m.pi*2,61,endpoint = True)
u1=[]
for nm in range(len(u0)):
    u1.append(complex(m.cos(u0[nm]),m.sin(u0[nm])))
uc=num.array(u1)
uz0=num.repeat(-1,61)
uz1=num.repeat(-0,61)
uz2=num.repeat(1,61)

#グラフ表示
plt.style.use('default')
fig = plt.figure()
ax = Axes3D(fig)
Tcode=num.linspace(0,m.pi*2,61,endpoint =True)
#描画関数定義
def unit_cylinder(n):
    plt.cla()
    #断面計算
    MiAvD0=[]
    for nm in range(len(MiAvC)):
        MiAvD0.append(c.rect(MiAv[nm],Tcode[n]))
    MiAvD=num.array(MiAvD0) 
    MiBvD0=[]
    for nm in range(len(MiBx)):
        MiBvD0.append(c.rect(MiBx[nm],Tcode[n]))
    MiBvD=num.array(MiBvD0)
    MiCvD0=[]
    for nm in range(len(MiHz)):
        MiCvD0.append(c.rect(2,Tcode[n]))
    MiCvD=num.array(MiCvD0)
    #軌跡計算
    Orb_r=abs(MiAvD[n])
    Orb0=[]
    for nm in range(len(MiCvD)):
        Orb0.append(c.rect(Orb_r,Tcode[nm]))
    Orbv=num.array(Orb0)
    Orbh=num.repeat(MiAh[n],61)
    #断面1計算
    MiAvD10=[]
    for nm in range(len(MiAvC)):
        MiAvD10.append(c.rect(MiAv[nm],Tcode[0]))
    MiAvD1=num.array(MiAvD10) 
    MiBvD10=[]
    for nm in range(len(MiBx)):
        MiBvD10.append(c.rect(MiBx[nm],Tcode[0]))
    MiBvD1=num.array(MiBvD10)
    MiCvD10=[]
    for nm in range(len(MiHz)):
        MiCvD10.append(c.rect(2,Tcode[0]))
    MiCvD1=num.array(MiCvD10)  
    #円柱描画
    ax.plot(s2.real,s2.imag,z0,color="gray",lw=0.5)
    ax.plot(s3.real,s3.imag,z0,color="gray",lw=0.5)
    #単位円描画
    ax.plot(uc.real,uc.imag,uz1,color="blue",lw=1)
    #中心線描画
    ax.plot([0,0],[0,0],[-1,1],color="black",lw=1)
    #分割原点
    ax.plot([0,MiCvD1[0].real],[0,MiCvD1[0].imag],[-1,-1],color="green",lw=1)
    ax.plot([0,uc[0].real],[0,uc[0].imag],[0,0],color="blue",lw=1)
    ax.plot([uc[0].real,MiCvD1[0].real],[uc[0].imag,MiCvD1[0].imag],[0,0],color="green",lw=1)
    ax.plot([uc[0].real,uc[0].real],[uc[0].imag,uc[0].imag],[-1,1],color="green",lw=1)    
    ax.plot([uc[0].real,MiAvD1[0].real],[uc[0].imag,MiAvD1[0].imag],[0,MiAh[0]],color="green",lw=1)
    ax.plot([0,MiCvD1[0].real],[0,MiCvD1[0].imag],[1,1],color="green",lw=1)
    ax.plot([MiCvD1[0].real,MiCvD1[0].real],[MiCvD1[0].imag,MiCvD1[0].imag],[-1,1],color="green",lw=1)
    ax.plot(MiAvD1.real,MiAvD1.imag,MiAh,color="green",lw=1)
    ax.plot(MiBvD1.real,MiBvD1.imag,MiHz,color="blue",lw=1)
    #アニメーション描画
    ax.plot([0,MiCvD[n].real],[0,MiCvD[n].imag],[-1,-1],color="black",lw=1)
    ax.plot([0,uc[n].real],[0,uc[n].imag],[0,0],color="blue",lw=1)
    ax.plot([uc[n].real,MiCvD[n].real],[uc[n].imag,MiCvD[n].imag],[0,0],color="black",lw=1)
    ax.plot([uc[n].real,uc[n].real],[uc[n].imag,uc[n].imag],[-1,1],color="black",lw=1)    
    ax.plot([uc[n].real,MiAvD[n].real],[uc[n].imag,MiAvD[n].imag],[0,MiAh[n]],color="red",lw=1)
    ax.plot([0,MiCvD[n].real],[0,MiCvD[n].imag],[1,1],color="black",lw=1)
    ax.plot([MiCvD[n].real,MiCvD[n].real],[MiCvD[n].imag,MiCvD[n].imag],[-1,1],color="black",lw=1)
    ax.plot(MiAvD.real,MiAvD.imag,MiAh,color="red",lw=1)
    ax.plot(MiBvD.real,MiBvD.imag,MiHz,color="blue",lw=1)
    #軌跡描画
    ax.plot(Orbv.real,Orbv.imag,Orbh,color="red",lw=1)
    #諸元追加
    ax.set_ylim([-2.1,2.1])
    ax.set_xlim([-2.1,2.1])
    ax.set_zlim([-2.1,2.1])
    ax.set_title("Unit Cylinder")
    ax.set_xlabel("Real")
    ax.set_ylabel("Imaginal")
    ax.set_zlabel("Cycle")
    # グラフを回転
    ax.view_init(elev=25, azim=45)

Tcode=num.linspace(0,m.pi*2,61,endpoint =True)
#Time_code0=num.arange(0,360,6) 
#Time_code=Time_code0[::-1] 
#unit_cylinder(15)
#plt.show()

ani = animation.FuncAnimation(fig, unit_cylinder, interval=50,frames=len(Time_code))
ani.save("output620.gif", writer="pillow")

ただしここで取り上げた様な「対蹠の双極性」は単極球面体においてはまだ観察されない。観測原点0と観測限界$\tilde{∞}=∞^+=∞^-$」が可換ではないからである。逆をいえば、それを許した瞬間にこの構造は双極紡錘体(Bipolar Spindle)へと遷移する。

「何も起こってない」ディフォルト状態としての正規分布

今度は観測原点と観測限界の2点の間に横たわる観測点$p_i(0≦i≦\tilde{∞})$の集合に注目しよう。とりあえずまだ距離も角度も不定(Indefinite)なので名義尺度集合(Nss=Nominal scale set)を構成するのみ。
名義尺度・順序尺度・間隔尺度・比例尺度

視覚的イメージとしては東京駅にある尿道結石めいたモニュメントのあの感じ。
スクリーンショット 2023-03-25 19.34.03.png

このままでは手の施し用がないので無限N次元対角線に拡張する。多少各次元の値や相関に偏向があったとしても、どこまでも(無作為次元を無制限に追加し続ける)巨視的俯瞰操作を続けていけば、究極的には「各評価次元が距離1で対応する直交座標系上の対角線」と見做せるであろう。そしてユークリッド距離の計算に従うなら、2次元単位方眼上の正方対角線の長さがって$y=\sqrt{1^2+1^2}=\sqrt{2}$、3次元単位方眼上の立方対角線の長さが$y=\sqrt{1^2+1^2+1^2}=\sqrt{3}$なのでN次元対角線の長さは$y=\sqrt{N}$となる。そしてこの計算を続けると「何も起こってない場合のデフォルトの分布」正規分布(Normal Distribution)へと辿り着く。
スクリーンショット 2023-10-20 18.33.58.png
確率密度空間と累積分布空間①記述統計との狭間
確率密度空間と累積分布空間②中心極限定理の可視化
ぶっちゃけ何を計算してるのか? 最初に発見した数聖ガウス(Johann Carl Friedrich Gauß 1777年-1855年)は天文台長でもあったので、これを観測に必ずつきまとう手ブレの一種と考えた。手ブレそのものをなくす事は出来ないが、大きな手ブレほど出現頻度は減るし、外れ値として除外するのもやさしい。それで測定誤差は大体こんな感じで分布すると考え、試してみたら実際にその通りだったという訳である。単純に数理の世界だけで完結せず、観察結果との突き合わせが必要だった辺りがミソ。
Wikipedis「誤差関数(ERF=ERror Function)」

import matplotlib.pyplot as plt
import numpy.random as random
import matplotlib.patches as patches
import matplotlib.animation as animation
%matplotlib inline
fig = plt.figure()
ax = plt.axes()
N=1200 #ここを順次変えていく。

def circle_draw(n):
    plt.cla()
    a = random.normal(0,1,N)
    b = random.normal(0,1,N)
    plt.title("Concentric Circles")
    plt.ylim([-4.0,4.0])
    plt.xlim([-4.0,4.0])
    plt.scatter(a, b, s=20, c='k',alpha=0.4)
    # 同心円描画
    plt.plot(np.mean(a),np.mean(b),marker='x', color='green')
    circle1=patches.Circle((np.mean(a),np.mean(b)),radius=1, fill=True, color='gray',lw=0.5,alpha=0.5)
    circle2=patches.Circle((np.mean(a),np.mean(b)),radius=2, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle3=patches.Circle((np.mean(a),np.mean(b)),radius=3, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle4=patches.Circle((np.mean(a),np.mean(b)),radius=4, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle5=patches.Circle((np.mean(a),np.mean(b)),radius=5, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle6=patches.Circle((np.mean(a),np.mean(b)),radius=10, fill=True, color='gray',lw=0.5,alpha=0.2)    
    ax.add_patch(circle1)
    ax.add_patch(circle2)
    ax.add_patch(circle3)
    ax.add_patch(circle4)
    ax.add_patch(circle5)
    ax.add_patch(circle6)
    ax.set_aspect('equal', adjustable='box')

#circle_draw(1)
#plt.show()

ani = animation.FuncAnimation(fig, circle_draw, interval=50,frames=10)
ani.save("circle_draw51200.gif", writer="pillow")
#ファイル名も順次変える。

N=2の時の「平均のブレ」
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303631372f32303231303631373036313830362e676966.gif
N=15の時の「平均のブレ」
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303631372f32303231303631373036323230362e676966.gif
N=30の時の「平均のブレ」
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303631372f32303231303631373036323634362e676966.gif
N=1200の時の「平均のブレ」
68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303631372f32303231303631373036333434312e676966.gif
しかしながら、19世紀も後半に入ると産業革命導入の影響で近代都市計画の一環としての社会調査が普通に行われる様になり、欧州各国で社会学が勃興。科学的実証主義の観測対象も空を渡るごく少数の天体から人間や動物や細菌の集合に推移し、そこでもこの分布に基づく分析は有効だったので(そうここでも「観察結果との突き合わせ」という話が出てくる!!)、この計算式が立脚する分布は現代社会において「何も起こってない場合のデフォルトの分布」としての地位を確固たるものとしたのだった。逆を言えば、この「なんでもない事(誤差の範囲)」なる棄却基準を超える事が「有意味な事象」である事の重要な条件と見做される新展開を迎えたとも。

双極紡錘体(Bipolar Spindle)

次の段階に進むには、この無限N次元対角線集合$p_i(0≦i≦\tilde{∞})$を構成する元のうち、少なくとも2つが同じ評価次元を最低1つは共有していなければならない。逆を言えばそれが成立した瞬間から「平均(Mean)と分散(Variance)の世界」が始まるとも。
スクリーンショット 2023-10-20 18.20.22.png
なんと虚数$i^2=-1$が普通に登場し、コーシーの積分定理がまたもやアップを始めました? 次回はこの辺りの話の掘り下げから入りたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0