0
0

More than 1 year has passed since last update.

【連続微小領域環】直交座標系(Cartesian Coordinates System)や極座標系(Polar Coordinates System)との対応。

Last updated at Posted at 2022-01-09

解析学(Mathematical Analysis)における微分法(Differentiation)積分法(Integral Calculus)の背景にある微小領域(Microregions)の概念がどうしても飲み込めないので、むしろそれから出発する数理を構築してみようと思い立ちました。まだまだ試論の段階で、運用を試みながら発生した不具合に順次対処してまいります。

微小領域群(Microregion Group)

まずは以下の展開の前提を列記しておきましょう。

①出発点としての微小領域群(Microregion Group)概念そのものの設定。

任意の微小領域(Microregion)αを元とする連続一次元微小領域(Continuous 1D Microregion)Αの概念から出発する。数式で表すと以下となる。

A(\forall α \in A)

それは(Group)を構成し、各微小領域(Microregion)a間の関係は、それぞれを規定する二項演算(Binary Operation)=群演算(Group Operation)に従うものとする。
数学の「群」「群論」とはどのようなものなのか

集合Gに演算∗が定義されているとき、次の条件(ⅰ)、(ⅱ)、(ⅲ)を満たすならばGは∗に関して群であるという。単にGを群ともいう。なお、演算記号をとくに意識する必要がない場合、a∗bを省略形abや簡略形a⋅bで表すことがある。

(ⅰ)結合法則(Associative law)の成立…Gの任意の元a,b,cに対し(a∗b)∗c=a∗(b∗c)が成立。結合性(Associative Property)を有するとも表現する。

(ⅱ)単位元(Identity Element)の存在…Gにある元eがあって、Gの任意の元aに対してa∗e=e∗a=aが成立。eをGの単位元(Identity Element)という。

(ⅲ)すべての元に逆元(Inverse Element)が存在する…Gの任意の元aに対して、a∗b=b∗a=e(単位元)となるGの元bが存在する。このbをaの逆元(Inverse Element)とよび、普通$a^{−1}$で表す。

数式で表すと以下となる。

G(a,b,c,e \in G|(a∗b)∗c=a∗(b∗c)\land a∗e=e∗a=a\land a∗a^{-1}=a^{-1}∗a=e)

②閉性(Clouse Property)と部分群(Subgroup)/部分集合(Subset)の設定

かかる微小領域群(Microregion Group)は、それぞれの群演算について特に断わりがない限り原則として閉じている(Closed)ものと考える。この事を閉性(Clouse Property)を有するとも表現する。

数集合と演算
閉性(Clouse Property)

G(a,b \in G,a*b \in G)

特に閉世界仮説(Closed World Assumption)に従い、各部分群(Subgroup)$H_1,H_2,H_3…H_{∞-1}$ないしは部分集合(Subset)の総体群(Universal Group)Gは必ず閉じているものと考える。

物理のかぎしっぽ:部分群
部分群(Subgroup)

H_i(0<i<∞)(a,b \in H_i|a∗b\in H_i\land a^{-1} \in H_i)

【Python描画処理】ベン図と組み合わせ計算と確率演算
部分集合(Subset)

X \subseteq Y(\forall x \in X \land x \in Y)

真部分集合(Proper Subset)

X \subset Y(X \subseteq Y \land X≠Y)

閉世界仮説 - Wikipedia
閉世界仮説(Closed World Assumption)

G(H_1,H_2,H_3,…,H_{∞-1}\in G,\overline{G}=\varnothing)

③群演算(Group Operation)としての偶関数(Even Function)と奇関数(Odd Function)の統合。

正関数逆関数が重なる偶関数(Even Function)の演算結果は原則としてそのまま群を構成する。ところが正関数とその逆関数が集合として分離する(そしてしばしば単位元がどちらにも含まれない)奇関数(Odd Function)だと原則としてそうはならない。

偶関数と奇関数の意味,性質などまとめ

偶関数(Even Function)…f(x)=-f(x)。y=f(x)のグラフがy軸に関して線対称となる。
image.png
奇関数(Odd Function)…f(-x)=-f(x)。 y=f(x)y=f(x) のグラフが原点に関して点対称となる。
image.png

これは原点を中心に考えた場合の偶関数の対称性が第三極たるZ軸上の変化も伴う垂直回転の結果としての反転であり、奇関数の対称性がZ軸上の変化を伴わない水平回転の結果としての反転である事に起因する。そこで、ここにおいては偶関数による演算結果としての群に、奇関数、その逆関数、および必要に応じてさらに単位元を加えた集合を対応させる。

偶関数と奇関数 - Wikipedia
関数の偶奇性(Parity of Function)

函数の偶奇分解(Parity Decomposition of the Function)
交代級数の一次結合的表現?

任意の関数f(x)は以下の式を用いて偶成分(Even Part)$f_{even}$(偶関数)と奇成分(Odd Part)$f_{odd}$(奇関数)に分離される。このとき、明らかに$f=f_{even}+f_{odd}$が成立するが、関数f(x)が偶関数かつ奇関数となるのはf(x)=0のとき、かつそのときに限るから、そのような表し方はただこれにのみ対応する。

{\displaystyle f_{\text{even}}(x)={\frac {f(x)+f(-x)}{2}},\quad f_{\text{odd}}(x)={\frac {f(x)-f(-x)}{2}}}

このアイディアは正多面体において、偶数系正多角形がその頂点に一対の対蹠を含むのに対し、その頂点数を半分にした奇数系正多角形は片方の対蹠しか含まないので二つセットで扱う考え方に由来する。
【オイラーの多面体定理と正多面体】とある「球面幾何学」の出発点…
image.png
image.png

さらにその大元には(かかる微小領域群の逆元を水平回転によって求める場合の2つのルートに対応する)複素数(Complex)a+biとその複素共役(共軛)(Complex Conjugate)a-biが対応するという考え方が存在する。
共役複素数の覚えておくべき性質

共役な複素数は,「虚部をマイナス1倍したもの」とも、「複素数平面上で実軸に関して対称移動させたもの」ということができる。

image.png

複素共役 - Wikipedia
image.png

複素数(Complex)

z=a+bi(a,b \in \mathbb{R}) \in \mathbb{C}\\
z=r(\cos(θ)+\sin(θ))

複素共役(共軛)(Complex Conjugate)

\overline{z}=a-bi\\
\overline{z}=r(\cos(-θ)+\sin(-θ))

その性質

\overline{z+w}=\overline{z}+\overline{w}(z,w \in \mathbb{C})\\
\overline{zw}=\overline{z}*\overline{w}\\
z_{real}=\overline{z}_{real}

【連続極座標系】ネイピア数e(2.718282)近似値の極限の近傍について。
image.gif
image.gif

要するに、かかる座標変換の軌跡は全体として円錐座標系(Conical Coordinate System)を構成している。
【連続極座標系】円筒形座標系による加法群と乗法群と商群の統合
image.gif
image.gif
image.gif

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

#円柱データ作成
c0=np.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=np.array(s0)
z0=np.linspace(-1,1,1201,endpoint = True)

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

#断面線(z)
cutz0=np.linspace(-1,1,61,endpoint = True)
cutz=cutz0[::-1]
cutx=np.abs(cutz)
cuty=np.repeat(0,61)

#単位円データ作成
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(-1,61)
uz1=np.repeat(-0,61)
uz2=np.repeat(1,61)

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

#関数定義
def unit_cylinder(n):
    plt.cla()
    #円柱描画
    ax.plot(s1.real*cv1,s1.imag*cv1,z0,color="gray",lw=0.5)
    #スポーク描画
    for num in range(len(uc)):
        ax.plot([0,uc[num].real],[0,uc[num].imag],[0,0],color="purple",lw=0.5)
    #単位円描画
    ax.plot(uc.real,uc.imag,uz0,color="red",lw=1)
    ax.plot(uc.real,uc.imag,uz1,color="purple",lw=1)
    ax.plot(uc.real,uc.imag,uz2,color="blue",lw=1)
    #実数線追加
    ax.plot([0,0],[0,0],[-1,1],color="black",lw=1)
    ax.plot([0,0],[-1,1],[0,0],color="black",lw=1)
    ax.plot([-1,1],[0,0],[0,0],color="black",lw=1)
    ax.plot([-1,1],[0,0],[-1,1],color="blue",lw=1)
    ax.plot([1,-1],[0,0],[-1,1],color="red",lw=1)
    ax.plot([0,0],[-1,1],[-1,1],color="green",lw=1)
    ax.plot([0,0],[1,-1],[-1,1],color="green",lw=1)
    #諸元追加
    ax.set_ylim([-1.1,1.1])
    ax.set_xlim([-1.1,1.1])
    ax.set_zlim([-1.1,1.1])
    ax.set_title("Unit Cylinder")
    ax.set_xlabel("X")
    ax.set_ylabel("X")
    ax.set_zlabel("X")
    # グラフを回転(elev=0にすると水平表示に)
    ax.view_init(elev=25, azim=Time_code[n])

Time_code0=np.arange(0,360,6)  
Time_code=Time_code0[::-1] 
#unit_cylinder(len(s1))
#plt.show()

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

ここまでが以下の展開の前提となります。

加法系微小領域群(Additive Microregion Group

まずは上掲の微小領域群(Microregion Group)Aを構成する微小領域α間の関係を加法群(Additive Group)すなわち加法単位元(Additive Identity Element)0を中心とする等尺(Isometric Scale)によって定めます。

-α*∞,…-α-α,-α,α-α,α,α+α,…,α*∞

すると自明の場合(Trival Case)としてN次元球体(NthD Ball)が構成されます。図形分類上は偶数系にカウントされる様です?
【Python演算処理】階乗と順列と組み合わせ
【Python演算処理】半径・直径・円周長・円の面積・球の表面積・球の体積の計算上の往復

  • 1次元球体(1D Ball)$N_1$は中心0、最小値-∞、最大値∞の線状分布、すなわち実数列(Real Sequence)に対応する(リー群$S_0$)。この次元における単位図形(Unit Shape)は中心0,最小値-1,最大値1の線分(長さ2)で、それを用いて全体を無限に分割する事が可能(かかる世界観における整数概念の定義の1つ)。
  • 2次元球体(2D Ball)$N_2$は中心0、半径0~∞の同心円集合(Concentric circle Set)を構成する。この次元における単位図形(Unit Shape)たる中心0、半径1の円弧は極めて重要な図形なので、単位円(Unit Circle)、円周群(Circle Group)、リー群$S_1$=1次元トーラス複素1次ユニタリ行列群U(1)といった様々な名前を与えられている。
  • 3次元球体(3D Ball)$N_3$は中心0、半径0~∞の同心球面集合(Concentric circle Sphere Set)を構成する。この次元における単位図形(Unit Shape)は中心0、半径1の単位球面(Unit Sphere)となる。

image.gif
Pythonによる実装例

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as random
import matplotlib.patches as patches
import matplotlib.animation as animation
%matplotlib inline

#単位円データ作成
c0=np.linspace(-np.pi,np.pi,61,endpoint = True)
s0=[]
for num in range(len(c0)):
    s0.append(complex(np.cos(c0[num]),np.sin(c0[num])))
s1=np.array(s0)

#描画準備
fig = plt.figure()
ax = plt.axes()

def circle_draw(n):
    plt.cla()
    plt.title("Concentric Circles")
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.ylim([-4.0,4.0])
    plt.xlim([-4.0,4.0])
    # 同心円描画
    plt.plot(0,0,marker='x', color='green')
    circle1=patches.Circle((0,0),radius=1, fill=True, color='gray',lw=0.5,alpha=0.5)
    circle2=patches.Circle((0,0),radius=2, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle3=patches.Circle((0,0),radius=3, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle4=patches.Circle((0,0),radius=4, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle5=patches.Circle((0,0),radius=5, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle6=patches.Circle((0,0),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')
    #補助線描画
    plt.axvline(0, 0, 1,color="black",lw=0.5)
    plt.axhline(0, 0, 1,color="black",lw=0.5)
    #移動線描画
    plt.plot([0,s1[n].real*6],[0,s1[n].imag*6],color="green",lw=1)
    plt.plot(s1[n].real,s1[n].imag,marker='x', color='green')
    plt.plot(s1[n].real*2,s1[n].imag*2,marker='x', color='green')
    plt.plot(s1[n].real*3,s1[n].imag*3,marker='x', color='green')
    plt.plot(s1[n].real*4,s1[n].imag*4,marker='x', color='green')
    plt.plot(s1[n].real*5,s1[n].imag*5,marker='x', color='green')
    plt.plot(s1[n].real*6,s1[n].imag*6,marker='x', color='green')
#circle_draw(1)
#plt.show()

ani = animation.FuncAnimation(fig, circle_draw, interval=50,frames=len(s1))
ani.save("circle_draw60001.gif", writer="pillow")

image.gif
image.gif
image.gif
pythonによる実装例

%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)

#断面線(z)
cutz0=num.linspace(-1,1,61,endpoint = True)
cutz=cutz0[::-1]
cutr=num.sqrt(1-cutz**2)

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

#単位円データ作成
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)

#断面円
ucv0=num.linspace(-1,1,61,endpoint = True)
ucv=num.sqrt(1-ucv0**2)

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

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

#関数定義
def unit_cylinder(n):
    plt.cla()
    cutx0=[]
    cuty0=[]
    for nm in range(len(cutr)):
        cutx0.append(c.rect(cutr[nm],Tcode[n]).real)
        cuty0.append(c.rect(cutr[nm],Tcode[n]).imag)
    cutx=num.array(cutx0)
    cuty=num.array(cuty0)
    ucutz=num.full(61,cutz[n])
    #球面描画
    ax.plot(s1.real*cv1,s1.imag*cv1,z0,color="gray",lw=0.5)
    #半球面描画
    ax.plot(s1.real*cv1/2,s1.imag*cv1/2,z0/2,color="gray",lw=0.5)
    #スポーク描画
    #for num in range(len(uc)):
    #    ax.plot([0,uc[num].real],[0,uc[num].imag],[0,0],color="gray",lw=0.5)
    #for num in range(len(uc)):
    #    ax.plot([0,uc[num].real],[0,uc[num].imag],[1,1],color="gray",lw=0.5)
    for nm in range(len(uc)):
        ax.plot([0,uc[nm].real*ucv[n]],[0,uc[nm].imag*ucv[n]],[cutz[n],cutz[n]],color="purple",lw=0.5)
    #単位円描画
    ax.plot(uc.real,uc.imag,uz0,color="red",lw=1)
    ax.plot(uc.real,uc.imag,uz1,color="green",lw=1)
    ax.plot(uc.real,uc.imag,uz2,color="blue",lw=1)
    #半単位円描画
    ax.plot(uc.real/2,uc.imag/2,uz0,color="red",lw=1)
    ax.plot(uc.real/2,uc.imag/2,uz1,color="green",lw=1)
    ax.plot(uc.real/2,uc.imag/2,uz2,color="blue",lw=1)
    #固定線追加
    ax.plot([0,0],[0,0],[-1,1],color="black",lw=1.5)
    ax.plot([0,1],[0,0],[-1,-1],color="red",lw=1)
    ax.plot([0,cutx[n]],[0,cuty[n]],[0,cutz[n]],color="purple",lw=1)
    ax.plot([0,1],[0,0],[1,1],color="blue",lw=1)
    ax.plot([1,1],[0,0],[-1,0],color="red",lw=1)
    ax.plot([1,1],[0,0],[0,1],color="blue",lw=1)
    #回転線描画
    rollx=c.rect(1,Tcode[n]).real
    rolly=c.rect(1,Tcode[n]).imag
    ax.plot([0,rollx],[0,rolly],[0,0],color="purple",lw=1)
    ax.plot([0,-rolly],[0,rollx],[0,0],color="blue",lw=1)
    ax.plot([0,rolly],[0,-rollx],[0,0],color="red",lw=1)
    #垂直断面線描画
    ax.plot(cutx,cuty,cutz,color="purple",lw=1)
    ax.plot(-cuty,cutx,cutz,color="blue",lw=1)
    ax.plot(cuty,-cutx,cutz,color="red",lw=1)
    ax.plot([0,cutx[n]],[0,cuty[n]],[cutz[n],cutz[n]],color="purple",lw=1)
    ax.plot([0,-cuty[n]],[0,cutx[n]],[0,cutz[n]],color="blue",lw=1)
    ax.plot([0,cuty[n]],[0,-cutx[n]],[0,cutz[n]],color="red",lw=1)
    #半垂直断面線描画
    ax.plot(cutx/2,cuty/2,cutz/2,color="purple",lw=1)
    ax.plot(-cuty/2,cutx/2,cutz/2,color="blue",lw=1)
    ax.plot(cuty/2,-cutx/2,cutz/2,color="red",lw=1)
    ax.plot([0,cutx[n]/2],[0,cuty[n]/2],[cutz[n]/2,cutz[n]/2],color="purple",lw=1)
    ax.plot([0,-cuty[n]/2],[0,cutx[n]/2],[0,cutz[n]/2],color="blue",lw=1)
    ax.plot([0,cuty[n]/2],[0,-cutx[n]/2],[0,cutz[n]/2],color="red",lw=1)
    #水平断面円描画
    ax.plot(uc.real*ucv[n],uc.imag*ucv[n],ucutz,color="purple",lw=1)
    #半断面円描画 
    ax.plot(uc.real*ucv[n]/2,uc.imag*ucv[n]/2,ucutz/2,color="purple",lw=1)
    #諸元追加
    ax.set_ylim([-1.1,1.1])
    ax.set_xlim([-1.1,1.1])
    ax.set_zlim([-1.1,1.1])
    ax.set_title("Unit Cylinder")
    ax.set_xlabel("Real")
    ax.set_ylabel("Imaginal")
    ax.set_zlabel("Cycle")
    # グラフを回転(elev=45,0にすると水平表示に)
    ax.view_init(elev=45, azim=-45)

#azim=Time_code[n]と設定すると世界の側が回る。
Time_code0=num.arange(0,360,6)  
Time_code=Time_code0[::-1]  
#unit_cylinder(len(s1))
#plt.show()

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

N次元球体のうち、我々が直感的に把握可能なのはほぼこの3種類のみだけなので、複数次元で構成される数学的構造(Mathematical Structure)は、適切な数理的操作によって、これらのどれかに収まる形に整形されてから操作対象とされる事が多い様です。特に著名なのは、物理学お得意の(1次元球体として独立性の高い次元を構成し、自明の場合として他次元との直行性が成立する)時間軸tの切り離し辺りでしょうか。
数学的構造 - Wikipedia

乗法系微小領域群(Multiplicative Microregion Group

次いで上掲の微小領域群(Microregion Group)Aを構成する微小領域α間の関係を乗法群(Multiplicative Group)すなわち乗法単位元(Additive Identity Element)1を中心とする指数尺(Exponential Scale)によって定めます。

α^{-∞},…α^{-1},α^0,α^1,…,α^∞
  • これは加法的微小領域群のうち、-∞~0の範囲(開集合)を0から1の範囲に、0を1に、1~+∞の範囲(開集合)を0~∞の範囲に射影した非負の開集合$y=α^i(i \in \mathbb{R},0<y<∞$)とも見てとれる。実際、添字の振る舞いは射影元の加法的微小領域群そのままとなる。
  • また半径1の単位円に射影し、添字の符号が−の場合を(単位円の)分割数、添字の符号が+の場合を(単位円の)周回数として元と逆元の関係に持ち込む群定義もある。この場合、それによって測られる一次元の数学的構造は整数部(Integer Part)と少数部(Decimal Part)に分離される。

【Pyrhon演算処理】同心集合①乗法的同心集合とは?

加法実数群$(\mathbb{R},+)$は、すべての正の実数が乗法についてなす群$(\mathbb {R}^+,×)$に、同型写像$f(x)=e^x(x \in \mathbb{R})$によって同型である。

(\mathbb {R},+) \cong (\mathbb{R}^{+},×)

加法整数群$(\mathbb {Z},+)$は加法実数群$(\mathbb{R},+)$の部分群であり、商群$\frac{\mathbb{R}}{\mathbb{Z}}$は、同型写像$f(x+\mathbb {Z})=e^{2πxi}(x \in \mathbb{R})$によって絶対値1の乗法複素数群$S^1$あるいはリー群$S_1$に同型である。

\frac{(\mathbb{R},+)}{(\mathbb{Z},+)} \cong S^1

【オイラーの多面体定理と正多面体】内接円/球面の半径と外接円/球面の半径の狭間

同心円集合に内接/外接する正多角形は、以下の2例のみ連鎖関係を構成する。

  • 同心円集合の半径の推移を演算$2^n$に対応させると、それに内接/外接する正三角形の推移に合致する。
E_n(n=-∞→0→+∞)=(E_{-∞}=\frac{1}{∞}=0,…,E_{-2}=2^{-2}=\frac{1}{4},E_{-1}=2^{-1}=\frac{1}{2},E_0=1,E_1=2^1=2,E_2=2^2=4,…,E_{+∞}=∞)

image.gif
Pythonによる実装例

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as random
import matplotlib.patches as patches
import matplotlib.animation as animation
%matplotlib inline

#単位円データ作成
c0=np.linspace(-np.pi,np.pi,61,endpoint = True)
s0=[]
for num in range(len(c0)):
    s0.append(complex(np.cos(c0[num]),np.sin(c0[num])))
s1=np.array(s0)

#正弾角形データ作成
c1=np.linspace(-np.pi,np.pi,4,endpoint = True)
s2=[]
for num in range(len(c1)):
    s2.append(complex(np.cos(c1[num]),np.sin(c1[num])))
s3=np.array(s2)

#描画準備
fig = plt.figure()
ax = plt.axes()

def circle_draw(n):
    plt.cla()
    plt.title("Concentric Circles")
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.ylim([-2.1,2.1])
    plt.xlim([-2.1,2.1])
    # 同心円描画
    plt.plot(0,0,marker='x', color='green')
    circle1=patches.Circle((0,0),radius=4, fill=True, color='gray',lw=0.5,alpha=0.5)
    circle2=patches.Circle((0,0),radius=2, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle3=patches.Circle((0,0),radius=1, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle4=patches.Circle((0,0),radius=1/2, fill=True, color='gray',lw=0.5,alpha=0.4)
    circle5=patches.Circle((0,0),radius=1/4, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle6=patches.Circle((0,0),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')
    #補助線描画
    plt.axvline(0, 0, 1,color="gray",lw=0.5)
    plt.axhline(0, 0, 1,color="gray",lw=0.5)
    #正三角形(内接円1/4)
    plt.plot(s3.real*1/4,s3.imag*1/4,color="gray",lw=1)
    plt.plot(-s3.real*1/4,s3.imag*1/4,color="gray",lw=1)
    #正三角形(内接円1.0)
    plt.plot(s3.real*1/2,s3.imag*1/2,color="gray",lw=1)
    plt.plot(-s3.real*1/2,s3.imag*1/2,color="gray",lw=1)    
    #正三角形(内接円1.0)
    plt.plot(s3.real,s3.imag,color="black",lw=1)
    plt.plot(-s3.real,s3.imag,color="black",lw=1)
    #正三角形(内接円1.0)
    plt.plot(s3.real*2,s3.imag*2,color="gray",lw=1)
    plt.plot(-s3.real*2,s3.imag*2,color="gray",lw=1)
    #正三角形(内接円1.0)
    plt.plot(s3.real*4,s3.imag*4,color="gray",lw=1)
    plt.plot(-s3.real*4,s3.imag*4,color="gray",lw=1)
    #移動線描画
    plt.plot([0,s1[n].real*6],[0,s1[n].imag*6],color="green",lw=1)
    plt.plot(s1[n].real*4,s1[n].imag*4,marker='x', color='green')
    plt.plot(s1[n].real*2,s1[n].imag*2,marker='x', color='green')
    plt.plot(s1[n].real*1,s1[n].imag*1,marker='x', color='green')
    plt.plot(s1[n].real*1/2,s1[n].imag*1/2,marker='x', color='green')
    plt.plot(s1[n].real*1/4,s1[n].imag*1/4,marker='x', color='green')
#circle_draw(1)
#plt.show()

ani = animation.FuncAnimation(fig, circle_draw, interval=50,frames=len(s1))
ani.save("circle_draw90008.gif", writer="pillow")
  • 同心円集合の半径の推移を演算$2^{\frac{n}{2}}$に対応させると、それに内接/外接する正方形の推移に合致する。
E_n(n=-∞→0→+∞)=(E_{-∞}=\frac{1}{∞}=0,…,E_{-2}=2^{-\frac{2}{2}}=2^{-1}=\frac{1}{2},E_{-1}=2^{-\frac{1}{2}}=\frac{\sqrt{2}}{2},E_0=1,E_1=2^{\frac{1}{2}}=\sqrt{2},E_2=2^{\frac{2}{2}}=2^1=2,…,E_{+∞}=∞)

image.gif
pythonによる実装例

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as random
import matplotlib.patches as patches
import matplotlib.animation as animation
%matplotlib inline

#単位円データ作成
c0=np.linspace(-np.pi,np.pi,61,endpoint = True)
s0=[]
for num in range(len(c0)):
    s0.append(complex(np.cos(c0[num]),np.sin(c0[num])))
s1=np.array(s0)

#描画準備
fig = plt.figure()
ax = plt.axes()

def circle_draw(n):
    plt.cla()
    plt.title("Concentric Circles")
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.ylim([-2.1,2.1])
    plt.xlim([-2.1,2.1])
    # 同心円描画
    plt.plot(0,0,marker='x', color='green')
    circle1=patches.Circle((0,0),radius=2, fill=True, color='gray',lw=0.5,alpha=0.5)
    circle2=patches.Circle((0,0),radius=np.sqrt(2), fill=True, color='gray',lw=0.5,alpha=0.2)
    circle3=patches.Circle((0,0),radius=1, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle4=patches.Circle((0,0),radius=1/np.sqrt(2), fill=True, color='gray',lw=0.5,alpha=0.2)
    circle5=patches.Circle((0,0),radius=1/2, fill=True, color='gray',lw=0.5,alpha=0.2)
    circle6=patches.Circle((0,0),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')
    #補助線描画
    plt.axvline(0, 0, 1,color="black",lw=0.5)
    plt.axhline(0, 0, 1,color="black",lw=0.5)
    #内内接立方体
    plt.plot([-1/2,1/2],[1/2,1/2],color="gray",lw=1)
    plt.plot([1/2,1/2],[1/2,-1/2],color="gray",lw=1)
    plt.plot([1/2,-1/2],[-1/2,-1/2],color="gray",lw=1)
    plt.plot([-1/2,-1/2],[-1/2,1/2],color="gray",lw=1)    
    #内接立方体
    plt.plot([-np.sqrt(2)/2,np.sqrt(2)/2],[np.sqrt(2)/2,np.sqrt(2)/2],color="gray",lw=1)
    plt.plot([np.sqrt(2)/2,np.sqrt(2)/2],[np.sqrt(2)/2,-np.sqrt(2)/2],color="gray",lw=1)
    plt.plot([np.sqrt(2)/2,-np.sqrt(2)/2],[-np.sqrt(2)/2,-np.sqrt(2)/2],color="gray",lw=1)
    plt.plot([-np.sqrt(2)/2,-np.sqrt(2)/2],[-np.sqrt(2)/2,np.sqrt(2)/2],color="gray",lw=1)    
    #単位立方体
    plt.plot([-1,1],[1,1],color="black",lw=1)
    plt.plot([1,1],[1,-1],color="black",lw=1)
    plt.plot([1,-1],[-1,-1],color="black",lw=1)
    plt.plot([-1,-1],[-1,1],color="black",lw=1)
    #外接立方体
    plt.plot([-np.sqrt(2),np.sqrt(2)],[np.sqrt(2),np.sqrt(2)],color="gray",lw=1)
    plt.plot([np.sqrt(2),np.sqrt(2)],[np.sqrt(2),-np.sqrt(2)],color="gray",lw=1)
    plt.plot([np.sqrt(2),-np.sqrt(2)],[-np.sqrt(2),-np.sqrt(2)],color="gray",lw=1)
    plt.plot([-np.sqrt(2),-np.sqrt(2)],[-np.sqrt(2),np.sqrt(2)],color="gray",lw=1)
    #外外接立方体
    plt.plot([-2,2],[2,2],color="gray",lw=1)
    plt.plot([2,2],[2,-2],color="gray",lw=1)
    plt.plot([2,-2],[-2,-2],color="gray",lw=1)
    plt.plot([-2,-2],[-2,2],color="gray",lw=1)
    #移動線描画
    plt.plot([0,s1[n].real*6],[0,s1[n].imag*6],color="green",lw=1)
    plt.plot(s1[n].real*2,s1[n].imag*2,marker='x', color='green')
    plt.plot(s1[n].real*np.sqrt(2),s1[n].imag*np.sqrt(2),marker='x', color='green')
    plt.plot(s1[n].real*1,s1[n].imag*1,marker='x', color='green')
    plt.plot(s1[n].real*np.sqrt(2)/2,s1[n].imag*np.sqrt(2)/2,marker='x', color='green')
    plt.plot(s1[n].real*1/2,s1[n].imag*1/2,marker='x', color='green')
#circle_draw(1)
#plt.show()

ani = animation.FuncAnimation(fig, circle_draw, interval=50,frames=len(s1))
ani.save("circle_draw70002.gif", writer="pillow")

いずれにせよここまでは一般の乗法群(Multiplicative Group)にも当てはまる考え方ですね。

  • さらにN次元球体の概念に適応させるべく、0~+∞の範囲(開集合)を1~2の範囲に射影して半径が演算$α^{-|x|}$によって与えられる同心円群$M_i$を考える。N次元球体同様にi=1の時に線、i=2の時に円、i=3の時に球面を構成を構成する。
  • この考え方はリーマン球面(Riemann Sphere)概念における円錐座標系球面座標系(Spherical Coordinate System)への変換に該当する。この時、Z軸には円錐座標系の場合にも、球面座標系の場合にも、1次元球体$M_1$が射影される。
    リーマン球面 - Wikipedia
    image.png

図形分類上は奇数系にカウントされる様です? こうして偶奇の概念が出揃ったので、加法的微小領域群と乗法的微小領域群を同じ座標形上に並置してみます。

image.gif

Rによる実装例

#CVCM=等速円運動(Constant Velocity Circular Motion)
#Radian=角度(60分割)
CVCM<-function(Radian){
c0<-seq(0,2*pi,length=60)

#大円
cx<-cos(c0)
cy<-sin(c0)

#小円(奇数系)1個目
s1cx<-cos(c0)/2+cx[Radian]/2
s1cy<-sin(c0)/2+cy[Radian]/2

#小円(奇数系)2個目
s2cx<-cos(c0)/2+cx[Radian]+cx[Radian]/2
s2cy<-sin(c0)/2+cy[Radian]+cy[Radian]/2

#小円(偶数系)1個目
s1cx0<-cos(c0)/2
s1cy0<-sin(c0)/2

#小円(偶数系)2個目
s2cx0<-cos(c0)/2-cx[Radian]
s2cy0<-sin(c0)/2-cy[Radian]

#円描画
plot(cx,cy,asp=1,type="l",col=rgb(0,0,0),main="Even & Odd Circles",xlab="cos(θ)",ylab="sin(θ)")

#塗りつぶし(円全体)
polygon(cx, #x
cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色

#塗りつぶし(奇数系小円1)
polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=rgb(1,0,0))  #塗りつぶす色

#塗りつぶし(奇数系小円2)
polygon(s2cx, #x
s2cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=rgb(1,0,0))  #塗りつぶす色

#塗りつぶし(偶数系小円1)
polygon(s1cx0, #x
s1cy0, #y
density=c(40), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=rgb(0,0,1))  #塗りつぶす色

#塗りつぶし(偶数系小円2)
polygon(s2cx0, #x
s2cy0, #y
density=c(40), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=rgb(0,0,1))  #塗りつぶす色

text(0,0,"(0,0,0,…)",col=rgb(0,0,0))
text(cx[Radian],cy[Radian],"(1,1,1,…)",col=rgb(0,0,0))
text(cx[Radian]/2,cy[Radian]/2,"(1/2,1/2,1/2,…)",col=rgb(0,0,0))

#対蹠の設定
segments(cx[Radian],cy[Radian],cx[Radian]/2,cy[Radian]/2,col=rgb(1,0,0))
segments(cx[Radian]/2,cy[Radian]/2,0,0,col=rgb(0,0,1))
#lines(s1cx,s1cy,col=rgb(0,1,0))
#lines(s1cx0,s1cy0,col=rgb(1,0,1))

#凡例
legend("bottomright", legend=c("Even Circles","Odd Circles"), lty=c(1,1), col=c(rgb(0,0,1),rgb(1,0,0))) 
}
#アニメーション
library("animation")
Time_Code=seq(1,59, length=30)
saveGIF({
for (i in Time_Code){
 CVCM(i)
}
}, interval = 0.1, movie.name = "CVCM05.gif")

image.gif
それぞれの半径(Radius)、 (Circle)、球面(Sphere)に、それぞれの次元数に対応する加法系の$N_i$群か乗法系の$M_i$群が射影されます。どちらを選ぶかは、扱ってる数学的構造の視覚化に都合がいい様に好き勝手決めればいいと思います。

直交座標系(Cartesian Coordinates System)や極座標系(Polar Coordinates System)との対応。

上掲の$N_i$群(加法系)や$M_i$群(乗法系)に角度θ(0<θ<2π)の概念を付加したのが極座標系(Polar Coordinates System)となります。これにリー群$S_1$(半径1の単位円)の直積(Direct Product)を対応させてみましょう。リー群$S_2$は大半径も小半径も共に1の単位トーラス(Unit Torus)、リー群$S_3$は四元数(Quaternion)に対応します。
image.gif
image.gif
image.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("torus001.gif", writer="pillow")

【Rで球面幾何学】ハミルトンの四元数は何を表しているのか?
output233.gif

これらの対数写像をとると、それぞれリー群$S_2$が方眼(二次元直交座標系)、リー群$S_3$が立方眼(三次元直交座標系)に展開される。

指数写像(Exponential Map)…平面上の円を球面に展開する。半径πの縁が半径1の球面に対応。
image.gif
image.gif
image.gif
pythonによる実装例

%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")

対数写像(Logarithmic Map)…指数写像の逆に球面を平面に展開する。半径1の球面が、半径πの円弧に対応。
image.gif
image.gif
image.gif
pythonによる実装例。

%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]
Time_Code.reverse()

#Exponential_map(7)
#plt.show()

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

直交座標系(Cartesian Coordinates System)と極座標系(Polar Coordinates System)は、こういう意外な連続性を備えていたんですね。

微小領域環(Microregion Ring)

加法系微小領域群乗法系微小領域群を統合したのが、微小領域環(Microregion Ring)となります。とりあえず前者を垂直軸、後者を水平軸に射影すると円筒座標系(Cylindrical Coordinate System)が構成されますね。半径1の時、それは実数列そのものと一致します。上掲の様にここに割り当てるのは加法系の$N_1$群でも、乗法系の$M_1$群でも構いません。
image.gif
image.gif
image.gif
Z軸上の1の位置にある単位円に対し、-1の位置にある単位円を水平に半周回すと円錐座標系に移動します。円錐対はXY面、XZ面、YZ面それぞれに通っていてy=x(傾き1)、y=-x(傾き-1)、絶対値関数などと接線を共有します。
【初心者向け】線形関数や絶対値関数
image.gif
image.gif
image.gif
ここで興味深いのが、かかる円錐に沿って配された半径$\sqrt{2}$の円を回転させ、水平面から観測すると統計学でいう「確率楕円」が観測される事…
image.gif
image.gif
その一方でZ軸上の+1と-1の位置を縦方向に回転させ、円錐表面に射影すると円→楕円→放物線→双曲線→十字線と離心率の式に沿った変化が現れる事。もしかしたら、ここに現れる放物線が統計学における分散(Variance)の概念と何か関わってくる?
【連続極座標系】離心率εの極限に現れる虚数について。
image.gif
とりあえずは、そんな感じで以下続報…

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