0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python演算処理】パスカルの三角形+虚数=四元数?

Last updated at Posted at 2021-08-15

パスカルの三角形」の世界と異なり、Pythonの演算世界はほとんど三次元以上の配列と無関係に構築されている様に見えます。
【Python演算処理】微分の概念を高校数学段階からグレードアップ?
【Python演算処理】環論に立脚した全体像再構築②同値関係の再習
【Python演算処理】三次元配列を扱えるのはnumpyと…xarray?

一体どういう事なんでしょうか? 詳しく見ていく事にしましょう。

#「パスカルの三角形」の世界と「微積分」の世界
その作業は数学発展史全体を振り返るのとほぼ同値関係となります。
【Python演算処理】環論に立脚した全体像再構築②同値関係の再習

###「パスカルの三角形」の世界

【Python演算処理】パスカルの三角形と二項定理または二項展開
概ね中世において、それは当時はまだまだ後進地域に過ぎなかった欧州(まだ計算に不向きなローマ数字しか知らなかった)ではなく最先端文化圏だった「地中海-環ユーラシア大陸南岸エリア」のアラビア数学インド数学の世界におけるコンセンサスだったのです。

指数-3の時(項配分1-3-3-1)

\frac{1}{(x+1)^3} = \frac{1}{x^3+3x^2+3x+1}

指数-2の時(項配分1-2-1)

\frac{1}{(x+1)^2} = \frac{1}{x^2+2x+1}

指数-1の時(項配分1-1)

\frac{1}{(x+1)^1} = \frac{1}{x+1}
  • x=$e^{-x}$と代入すると標準シグモイド関数(Standard Sigmoid Function)$\frac{1}{1+e^{-x}}$となる。y(0→1),x(-∞→+∞)を範囲としx=0の時、y=$\frac{1}{2}$となる。
    シグモイド関数 - Wikipedia

指数0の時(項配分1)

\frac{(x+1)}{(x+1)} = 1\\
その行列表現:[1]

指数1の時(項配分1-1)

(x+1)^1=x+1\\
その行列表現:[[x,1]]\\
ないしは\left[\begin{matrix}\left[x\right]\\\left[1\right]\end{matrix}\right]
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}1 & 1\\1 & 1\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}x \left(x + 1\right) + x + 1\end{matrix}\right]\\
=[x^2+2x+1]=[(x+1)^2]
  • マスキング」操作
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}1 & 0\\0 & 0\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}x^{2}\end{matrix}\right]\\
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}0 & 1\\0 & 0\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}x\end{matrix}\right]\\
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}0 & 0\\1 & 0\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}x\end{matrix}\right]\\
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}0 & 0\\0 & 1\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}1\end{matrix}\right]\\
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}x^{2} + 1\end{matrix}\right]\\
\left[\begin{matrix}x & 1\end{matrix}\right]\left[\begin{matrix}0 & 1\\1 & 0\end{matrix}\right]\left[\begin{matrix}x\\1\end{matrix}\right]=\left[\begin{matrix}2 x\end{matrix}\right]
import sympy as sp
x = sp.symbols('x')
#Rows
a=sp.Matrix([[x,1]])
#Columns
b=sp.Matrix([[x],[1]])
a00=sp.Matrix([[1,1],[1,1]])
a11=sp.Matrix([[1,0],[0,0]])
a12=sp.Matrix([[0,1],[0,0]])
a21=sp.Matrix([[0,0],[1,0]])
a22=sp.Matrix([[0,0],[0,1]])
adp=sp.Matrix([[1,0],[0,1]])
adm=sp.Matrix([[0,1],[1,0]])
sp.init_printing()
display(a) 
display(a00) 
display(a11) 
display(a12) 
display(a21) 
display(a22) 
display(adp)
display(adm)
display(b) 
display(sp.simplify(a*a00*b)) 
print(sp.latex(a)+sp.latex(a00)+sp.latex(b)+"="+sp.latex(sp.simplify(a*a00*b)))
display(sp.simplify(a*a11*b)) 
print(sp.latex(a)+sp.latex(a11)+sp.latex(b)+"="+sp.latex(sp.simplify(a*a11*b)))
display(sp.simplify(a*a12*b)) 
print(sp.latex(a)+sp.latex(a12)+sp.latex(b)+"="+sp.latex(sp.simplify(a*a12*b)))
display(sp.simplify(a*a21*b)) 
print(sp.latex(a)+sp.latex(a21)+sp.latex(b)+"="+sp.latex(sp.simplify(a*a21*b)))
display(sp.simplify(a*a22*b)) 
print(sp.latex(a)+sp.latex(a22)+sp.latex(b)+"="+sp.latex(sp.simplify(a*a22*b)))
display(sp.simplify(a*adp*b)) 
print(sp.latex(a)+sp.latex(adp)+sp.latex(b)+"="+sp.latex(sp.simplify(a*adp*b)))
display(sp.simplify(a*adm*b)) 
print(sp.latex(a)+sp.latex(adm)+sp.latex(b)+"="+sp.latex(sp.simplify(a*adm*b)))

指数2の時(項配分1-2-1)

(x+1)^2=x^2+2x+1\\
その行列表現:\left[\begin{matrix}\left[ x^{2}, \  x\right] & \left[ x, \  1\right]\end{matrix}\right]\\
ないしは\left[\begin{matrix}\left[ x^{2}, \  x\right]\\\left[ x, \  1\right]\end{matrix}\right]

指数3の時(項配分1-3-3-1)

(x+1)^3=x^3+3x^2+3x+1\\
その行列表現:\left[\begin{matrix}\left[ x^{3}, \  x^{2}\right] & \left[ x^{2}, \  x^{2}\right]\\\left[ x, \  x\right] & \left[ x, \  1\right]\end{matrix}\right]
  • 平方関係が崩れるせいもあって二次形式の延長線上で以下の様な演算の導出が難しい。
\left[\begin{matrix}\left[ x^{3}, \  x^{2}\right] & \left[ x^{2}, \  x^{2}\right]\\\left[ x, \  x\right] & \left[ x, \  1\right]\end{matrix}\right] \to x^3+3x^2+3x+1 = (x+1)^3\\
  • 三次元配列の概念を使わないとこういうマスキングも切れない。
\left[\begin{matrix}\left[ a^{3}, \  a^{2}\right] & \left[ a^{2}, \  a^{2}\right]\\\left[ a, \  a\right] & \left[ a, \  1\right]\end{matrix}\right]・\left[\begin{matrix}\left[ 1, \  0\right] & \left[ 0, \  0\right]\\\left[ 0, \  0\right] & \left[ 0, \  0\right]\end{matrix}\right]=a^3…①\\
\left[\begin{matrix}\left[ a^{3}, \  a^{2}\right] & \left[ a^{2}, \  a^{2}\right]\\\left[ a, \  a\right] & \left[ a, \  1\right]\end{matrix}\right]・\left[\begin{matrix}\left[ 0, \  1\right] & \left[ 1, \  1\right]\\\left[ 0, \  0\right] & \left[ 0, \  0\right]\end{matrix}\right]=3a^2…②\\
\left[\begin{matrix}\left[ a^{3}, \  a^{2}\right] & \left[ a^{2}, \  a^{2}\right]\\\left[ a, \  a\right] & \left[ a, \  1\right]\end{matrix}\right]・\left[\begin{matrix}\left[ 0, \  0\right] & \left[ 0, \  0\right]\\\left[ 1, \  1\right] & \left[ 1, \  0\right]\end{matrix}\right]=3a…③\\
\left[\begin{matrix}\left[ a^{3}, \  a^{2}\right] & \left[ a^{2}, \  a^{2}\right]\\\left[ a, \  a\right] & \left[ a, \  1\right]\end{matrix}\right]・\left[\begin{matrix}\left[ 0, \  0\right] & \left[ 0, \  0\right]\\\left[ 0, \  0\right] & \left[ 0, \  1\right]\end{matrix}\right]=1…④

そう、全体像を俯瞰すると、おそらく(欧州参入前の)中世数学はこういう辺りで袋小路に入ってしまっていたのです。

###「微積分」の世界
一方、欧州で発達した近代解析学は偏微分方程式を繰り返し解き続ける事で(二次元配列まで使えれば事足りる)連立一時方程式に書き換えてしまいました。このパラダイムシフトが三次元配列の需要を大幅に下げた最大要因だったとも推察される状況です。
高校数学からヤコビアンに至るまで

{\int U(x,y,z)dV=\int_{0}^{2π}\int_{0}^{π}\int_{0}^{1}U(r,θ,φ)r^2\sinθdrdθdφ\\
=\int_{0}^{2π}\int_{0}^{π}\int_{0}^{1}\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} drdθdφ
}

【Python演算処理】特異点を巡る数理の自分なりのまとめ。

それではこの間に一体何が起こったのでしょうか?

#間をつなぐ「複素数の世界」

パスカルの三角形」や「複式簿記」の概念がルネサンス期(14世紀~16世紀)に(フィレンツェに事実上併合されたピサ、オスマン帝国とレパント交易の支配権を巡って争ったジェノヴァやヴェネツィアといった)イタリア海洋諸国経由で地中海文化圏から欧州文化圏に伝わった時起こった最大のパラダイムシフトは(印刷物が広域に頒布される様になった出版革命を背景とする)それらの知識の「特定集団の家芸」から「(その枠を超えて世界を結ぶ)読書階層のネットワーク的コンセンサス」への変遷だったのです。
十字軍運動とヴェネツィアの覇権

①一般に複式簿記の概念の大源流はヴェネツィア共和国で出版されたルカ・パチョーリ(Fra Luca Bartolomeo de Pacioli、1445年~1517年)の著書「スムマ(Summa de arithmetica, geometria, proportioni et proportionalita=算術、幾何、比および比例に関する全集,1494年)」における複式簿記概念の紹介であったとされるが、まずここに以下の二つの歴史的画期が見て取れる。

  • それが、これまで地中海商人欧州内陸部商人に優越し続ける為にあえて秘匿されてきた秘密情報の暴露だったという事。そしてそれはオランダにおける期間会計概念への発展を通じて欧州経済界にパラダイムシフトを起こしたばかりか、最終的には(当時の欧州諸国が戦争を継続する為に)国家経営手段として採用され「(辺境部に現れて中央集権体制を脅かす遊牧民や海賊といった蛮族集団の脅威を確実に取り除くのに)必要にして充分なだけ火器と機動力を装備した常備軍を中央集権的官僚制が徴税によって賄う主権国家体制(Civitas sui Iuris)間の国際協調体制」を登場させたという事。これをもって欧州近世なる歴史区分の本格稼働が始まる。
    【欧州中心史観以前の世界】火砲の集中運用手段としての常備軍の発達
    しばしば三十年戦争(1618年~1648年)を終わらせたヴェストファーレン条約(1648年)が重要な契機として挙げられるが、清教徒革命(狭義1642年~1649年、広義1639年~1660年)の渦中にあった英国も、当時はまだまだ氷に閉ざされた辺境に過ぎなかったロシアもこれに参加してはいない。特にロシアが本格的に国家としての影響力を発揮する様になるのは(フランス同様、三十年戦争において元来のプロテスタント陣営もカソリック陣営も差し置いて勝者となった)スウェーデンを本格的に破ってバルト海進出を果たした大北方戦争(1700年~1721年)以降となる。
  • こうして様々な方面にパラダイムシフトを引き起こした複式簿記概念の根幹が、実は(中世アラビア数学が発展させた)代数(Algebra=アラビア語由来)の概念に立脚していたという事。
    【Python演算処理】行列演算の基本④大源流における記述統計学との密接な関連性?
    山本義隆小数と対数の発見(2018年)」は、小数点下を嫌う会計の世界の伝統が数学の世界における「少数の発見」を遅らせた可能性を指摘する一方でスペインからの独立を目して八十年戦争(1568年~1609年,1621年~1648年)を戦い抜いたオランダにおける(戦争継続の為の)合理主義追及の産物、すなわち「十進法(De Thiende,1585年,十進数による小数の理論を提唱)」や「数学覚書(Ghedachtenissen,1605年,年次期間損益計算書や精算表について解説し国家の財政管理にも複式簿記を導入することを提案)」を著したシモン・ステヴィン(Simon Stevin、1548年~1620年)」と彼を抜擢したオランダ総督マウリッツ(Maurits van Nassau,1567年~1625年)を高く評価する。
    小数の発見の数学史:天文学との関係

②一方虚数(Imaginal)の概念はジェロラモ・カルダーノ(Gerolamo Cardano、1501年~1576年)が著書「偉大なる術(アルス・マグナ,羅Ars magna de Rebus Algebraicis,1545年) の中で示した三次方程式の解の公式四次方程式の解法とされているが、このうち三次方程式の解の公式は数秘術の大家ニコロ・フォンタナ・タルタリア(Niccolò Fontana "Tartaglia",1499年/1500年~1557年)から聞き出した秘術を暴露した内容、四次方程式の解法は弟子のルドヴィコ・フェラーリ(Ludovico Ferrari, 1522年~1565年)の研究内容の紹介だったのである。
【数理考古学】三次方程式から虚数へ。

③その一方で英国におけるジョン・ネイピア(John Napier,1550年~1617年)とヘンリー・ブリッグス(Henry Briggs,1561年~1630年)の手になる最初の常用対数表(Table of Common Logarithms,1624年)が刊行されてその原理に基づく計算尺歯車式計算機(コンピューターの大源流)ると、天文学測量術航海術の分野の発展が加速する。
【数理考古学】常用対数表を使った計算

  • 世界地図の記法として著名なメルカトル図法(Mercator Projection)と正距方位図法(Azimuthal Equidistant Projection)も、ここに登場する「指数写像・対数画像」の概念に立脚する。
    【Python画像処理】メルカトル図法と正距方位図法

  • 大航海時代(16世紀中旬~17世紀中旬)は「騎士道修道会国家ポルトガル王国の十字軍運動の延長線上に現れ、オスマン帝国とヴェネツィアのレパント交易独占を快く思わないイタリア人からの資金と人員と装備の供給によって加速したが、最終的には欧州の経済的中心を大西洋沿岸に推移させ地中海沿岸経済圏全体の没落を招いてしまう。そしてその一方でクロムウェル護国卿時代(1653年~1659年)から(欧州内戦から距離を置いて新大陸での展開に重きを置く)貿易革命に転じた英国がじわじわと台頭を開始するのである。フランス絶対王政新生プロイセン公国を台風の目玉として展開する欧州内戦の時代を尻目に…
    十字軍国家としてのポルトガル王朝

④こうして啓蒙君主達が続々と諸国の有識者を招聘する様になった宮廷文化最盛期、しかしむしろ英国人数学者アイザック・ニュートン(Sir Isaac Newton、1642年~1727年)が微積分や万有引力のアイディアをまとめたのがペスト流行に伴うケンブリッジ大学閉鎖期(1665年~1666年)、ドイツ人数学者ゴットフリート・ライプニッツ(Gottfried Wilhelm Leibniz, 1646年~1716年)が並行して微積分の概念を発展させたのが主にパリ出張中に最初の主君だったマインツ選帝侯が亡くなり、カレンベルク侯ヨハン・フリードリヒ により顧問官兼図書館長へと任ぜられハノーファーに移住するまでの失職期間(1668年~1668年)だった辺りが興味深い。
【数理考古学】とある円周率への挑戦?
【数理考古学】解析学史に「虚数概念」をもたらした交代級数

  • イエズス会の軍隊式教育で育てられ、オランダ軍に入隊してその合理主義精神を学んで「方法序説(Discours de la méthode, 1637年)」を著したフランス人数学者ルネ・デカルト(René Descartes、1596年~1650年)が寿命を縮めたのはスウェーデン女王クリスティーナに招聘されて早起きを強要されたからからと言われる一方、スコットランドの様な「僻地」でジェームズ・グレゴリー(James Gregory,1638年~1675年)がグレゴリー級数を、コリン・マクローリン(Colin Maclaurin,1698~1746年)が特に誰からもパトロネージュを受ける事なくテイラー級数の応用例たるマクローリン級数を研究し、「ただの計算マシーンに過ぎない」と啓蒙君主に嫌われ「僻地の新興国帝政ロシアに就職先を求めたスイス人数学者レオンハルト・オイラー(Leonhard Euler,1707年~1783年)がこれにさらに複素数の概念を追加して対数概念と三角関数概念を統合するオイラーの公式(Eulerian Formula)$e^{iθ}=\cos(θ)+\sin(θ)i$を完成させた。
    ジェームス・グレゴリー - Wikipedia
    コリン・マクローリン - Wikipedia
    レオンハルト・オイラー - Wikipedia
    こうして全体像を俯瞰すると、どうしても「周辺性」というキーワードが念頭に浮かんでしまう。そう、当時の数学の発展は絶対王政から直接後援を受けた啓蒙主義的文化人そのものが推進した訳ではなかったのである。ただし、こうした先人の活躍も受けてスコットランドにはスコットランド啓蒙主義(The Scottish Enlightenment1740年代~1790年代)が台頭する展開を迎える。そしてロシア宮廷も次第に文化発信力を高めていく。
    スコットランド啓蒙主義(The Scottish Enlightenment)
  • 当時のこの方面の数学の発展速度は歯痒いほど緩慢に見えるが、ガウス(Johann Carl Friedrich Gauß,1777年~1855年)が複素平面(Complex Plane)概念を本格的に提唱するのはフランス革命期(1789年~1795年)に続いたナポレオン戦争期(1799年~1815年)の1811年であり(ただし同概念について1797年にCaspar Wesselが書簡で言及しており、Jean-Robert Argandも1806年に同様の手法を用いている)、それなしの研究だったと考えると十分納得がいくのである。
    なまじ新大陸やインドでの事業展開が順調過ぎたせいで植民地経営に奢りが出た英国はアメリカ独立戦争(1775年~1783年)に直面した。しかし王侯貴族の国民の不満を外部に逸らし続ける」戦争の種が尽きたフランス絶対王政もフランス革命ナポレオン戦争による国民の$\frac{1}{5}$消失とと莫大な経済的損失のせいで産業革命導入が半世紀以上も遅れ、大英帝国に大差をつけられ、二級国家へと転落してしまう。スコットランド啓蒙主義も、その巻き添えとなって壊滅。かかる暗黒の歴史はオカルトに傾倒して「黄金の夜明け団(Hermetic Order of the Golden Dawn)」にも参画したフィオナ・マクラウド(Fiona Macleod,1855年~1905年)らが主導したケルティック・ルネサンスへも確実に昏い影を落としていく。
    ウィリアム・シャープ (作家) - Wikipedia
    黄金の夜明け団 - Wikipedia

それではここで「パスカルの三角形」を極座標系(r,φ,θ.…)と関連付けた複素関数$e^{ix}$の添字と考えてみましょう。オイラーの公式を用いて二項定理からピタゴラスの定理を導出する際に使う方法の応用です。
【数理考古学】ピタゴラスの定理あるいは三平方の定理からの出発

1=e^0=e^{iθ-iθ}=e^{iθ}e^{-iθ}\\
=(\cos(θ)+\sin(θ)i)(\cos(θ)-\sin(θ)i)\\
=cos(θ)^2+sin(θ)i-sin(θ)i-sin(θ)i^2\\
=cos(θ)^2+sin(θ)^2\\

【Python演算処理】環論に立脚した全体像再構築②同値関係の再習

指数0の時(項配分1)

e^{0}= 1\\
その行列表現:[1]

指数1の時(項配分1-1)

e^{1-1}=1\\
その行列表現:[[1,-1]]\\
ないしは\left[\begin{matrix}\left[1\right]\\\left[-1\right]\end{matrix}\right]

指数2の時(項配分1-2-1) ここで$i^2=-1$と考え、四次方程式の解を代入すると…
1の冪根 - Wikipedia

\left[\begin{matrix}\left[ 1, \  i\right] & \left[ -i, \  -1\right]\end{matrix}\right]\\
ないしは\left[\begin{matrix}\left[ 1, \  i\right]\\\left[ -i, \  -1\right]\end{matrix}\right]

なんとなく見た目は上はそれっぽく見えますよね。ただこの様な小手先技はもうこれ以上応用が効かないのです。

  • $1=-i^2$でなければならない辺りが毎回扱う上での難所となる。微積分ではちゃんと巡回するのだが…
  • この辺りの小手先性はユニタリ行列(Unitary Matrix)の定義にも感じずにはいられない。
    ユニタリ行列 - Wikipedia

次を満たす複素正方行列Uとして定義される。なおここでIは単位行列、Uは行列Uの随伴行列(U = U T)となる。

{\displaystyle U^{*}U=UU^{*}=I}

実数のみで構成される行列の随伴は単に転置であるため実ユニタリ行列直交行列に等しく、直交行列を複素数体へ拡張したものがユニタリ行列ともいえる。

ここでアイルランド出身の数学者ウィリアム・ローワン・ハミルトン(William Rowan Hamilton、1805年~1865年)が虚数単位を3種類導入する四元数(Quaternion)の概念を思いついきます。
【Pythonで球面幾何学】ハミルトンの四元数は何を表しているのか?

i^2=j^2=k^2=ijk=-1\\

その乗積表

1 i j k
1 1 i j k
i i -1 k -j
j j -k -1 i
k k j -i -1
import numpy as np
import sympy as sp
import pandas as pd
X1 = np.matrix([
    ["1","i","j","k"],
    ["i","-1","k","-j"],
    ["j","-k","-1","i"],
    ["k","j","-i","-1"]])
#x=X1.transpose()
x=X1
df=pd.DataFrame(x,columns=["1",'i','j','k'],index=["1",'i','j','k'])
sp.init_printing()
org=df.to_html()
print(org.replace('\n', ''))

要するに以下の関係にあるんですね。

  • ij=−ji=k
  • jk=−kj=i
  • ki=−ik=j

ちなみにこの四元数間で積を求める演算がベクトルにおける内積(Inner Product=スカラー積)と外積(Outer Product=ベクトル積/クロス積)の概念の起源となります。
四元数と行列で見る内積と外積の「内」と「外」

{\begin{align}
&(ai+bj+ck)(di+ej+fk) \\
&=ai(di+ej+fk) \\
&\quad +bi(di+ej+fk) \\
&\quad +cj(di+ej+fk) \\
&=ad\underbrace{ii}_{-1}+ae\underbrace{ij}_{k}+af\underbrace{ik}_{-j} \\
&\quad +bd\underbrace{ji}_{-k}+be\underbrace{jj}_{-1}+bf\underbrace{jk}_{i} \\
&\quad +cd\underbrace{ki}_{j}+ce\underbrace{kj}_{-i}+cf\underbrace{kk}_{-1} \\
&=-\underbrace{(ad+be+cf)}_{内積} \\
&\quad +\underbrace{(bf-ce)i+(cd-af)j+(ae-bd)k}_{外積}
\end{align}
}

行列演算の場合

{\begin{align}
&(ai+bj+ck)(di+ej+fk) \\
&=\left(\begin{matrix} i &  j &  k \end{matrix}\right)
  \left(\begin{matrix} a \\ b \\ c \end{matrix}\right)
  \left(\begin{matrix} d &  e &  f \end{matrix}\right)
  \left(\begin{matrix} i \\ j \\ k \end{matrix}\right) \\
&=\left(\begin{matrix} i &  j &  k \end{matrix}\right)
  \left(\begin{matrix} ad & ae & af \\ bd & be & bf \\ cd & ce & cf \end{matrix}\right)
  \left(\begin{matrix} i \\ j \\ k \end{matrix}\right) \\
&=-(ad+be+cf) \\
&\quad +(bf-ce)i+(cd-af)j+(ae-bd)k
\end{align}
}

途中過程で現れる内積(内)と外積(外)の関係

{\left(\begin{matrix}
  \underbrace{ad}_{内} & \underbrace{ae}_{外} & \underbrace{af}_{外} \\
  \underbrace{bd}_{外} & \underbrace{be}_{内} & \underbrace{bf}_{外} \\
  \underbrace{cd}_{外} & \underbrace{ce}_{外} & \underbrace{cf}_{内}
\end{matrix}\right)
}

全部二次元配列で処理出来てしまってますね。ついでにいわゆる回転行列(Rotation Matrix)の場合についても見ておきましょう。
回転行列 - Wikipedia

ユークリッド空間内における原点中心の回転変換の表現行列のことである。n次元空間における回転行列は、実数を成分とする正方行列であって、行列式が1のn次直交行列として特徴づけられる。n次元の回転行列全体は特殊直交群(あるいは回転群)SO(n)と呼ばれる群をなす。

{}^{t}\!R=R^{-1},\;\det R=1.

二次元の回転行列

原点中心に θ 回転して点 (x, y) が (x ', y ') に写るとすると、図形的考察または三角関数の加法定理より、x ', y ' は以下のように表される。

【初心者向け】「加法定理の幾何学的証明」に挑戦。

x'=x\cos \theta -y\sin \theta \\
y'=x\sin \theta +y\cos \theta 

このことを行列の積で表すと以下となる。

{\begin{bmatrix}x'\\y'\end{bmatrix}}={\begin{bmatrix}\cos \theta &-\sin \theta \\\sin \theta &\cos \theta \\\end{bmatrix}}{\begin{bmatrix}x\\y\end{bmatrix}}
import sympy as sp
θ,x,y = sp.symbols("θ,x,y")
#Rows
a=sp.Matrix([[sp.cos(θ),-sp.sin(θ)],[sp.sin(θ),sp.cos(θ)]])
#Columns
b=sp.Matrix([[x],[y]])
sp.init_printing()
display(a*b)
print(sp.latex(a)+sp.latex(b)+"="+sp.latex(sp.simplify(a*b)))
display(a.T)
print("{}^T"+sp.latex(a)+"="+sp.latex(sp.simplify(a.T)))
display(a**-1)
print(sp.latex(a)+"^{-1}="+sp.latex(a**-1)+"=" + sp.latex(sp.simplify(a**-1)))
display(a.det())
print(sp.latex(a)+sp.latex(b)+".det="+sp.latex(a.det())+"=" + sp.latex(sp.simplify(a.det())))
\left[\begin{matrix}\cos{\left(θ \right)} & - \sin{\left(θ \right)}\\\sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]\left[\begin{matrix}x\\y\end{matrix}\right]=\left[\begin{matrix}x \cos{\left(θ \right)} - y \sin{\left(θ \right)}\\x \sin{\left(θ \right)} + y \cos{\left(θ \right)}\end{matrix}\right]\\
{}^T\left[\begin{matrix}\cos{\left(θ \right)} & - \sin{\left(θ \right)}\\\sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]=\left[\begin{matrix}\cos{\left(θ \right)} & \sin{\left(θ \right)}\\- \sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]\\
\left[\begin{matrix}\cos{\left(θ \right)} & - \sin{\left(θ \right)}\\\sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]^{-1}=\left[\begin{matrix}- \frac{\sin^{2}{\left(θ \right)}}{\cos{\left(θ \right)}} + \frac{1}{\cos{\left(θ \right)}} & \sin{\left(θ \right)}\\- \sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]=\left[\begin{matrix}\cos{\left(θ \right)} & \sin{\left(θ \right)}\\- \sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]\\
\left[\begin{matrix}\cos{\left(θ \right)} & - \sin{\left(θ \right)}\\\sin{\left(θ \right)} & \cos{\left(θ \right)}\end{matrix}\right]\left[\begin{matrix}x\\y\end{matrix}\right].det=\sin^{2}{\left(θ \right)} + \cos^{2}{\left(θ \right)}=1

従って2次元空間ユークリッド空間においては原点中心のθ回転(反時計回りを正とする)を以下の転行列の形で表す事が出来る。

R(\theta )={\begin{bmatrix}\cos \theta &-\sin \theta \\\sin \theta &\cos \theta \\\end{bmatrix}}

逆回転は、回転角が −θ になるだけなので以下となる。

R(-\theta )={\begin{bmatrix}\cos(-\theta )&-\sin(-\theta )\\\sin(-\theta )&\cos(-\theta )\\\end{bmatrix}}={\begin{bmatrix}\cos \theta &\sin \theta \\-\sin \theta &\cos \theta \\\end{bmatrix}}

また行列の指数関数を用いた以下の表示もある。

{\displaystyle R(\theta )=\exp \left(\theta {\begin{bmatrix}0&-1\\1&0\end{bmatrix}}\right)}{\displaystyle R(\theta )=\exp \left(\theta {\begin{bmatrix}0&-1\\1&0\end{bmatrix}}\right)}

3次元の回転行列

3次元空間でのx軸、y軸、z軸周りの回転を表す回転行列は、それぞれ次の通りとなる:

R_{x}(\theta )={\begin{bmatrix}1&0&0\\0&\cos \theta &-\sin \theta \\0&\sin \theta &\cos \theta \\\end{bmatrix}}\\
R_{y}(\theta )={\begin{bmatrix}\cos \theta &0&\sin \theta \\0&1&0\\-\sin \theta &0&\cos \theta \\\end{bmatrix}}\\
R_{z}(\theta )={\begin{bmatrix}\cos \theta &-\sin \theta &0\\\sin \theta &\cos \theta &0\\0&0&1\end{bmatrix}}

ここで回転の方向は$R_{x}$はy軸をz軸に向ける方向、$R_{y}$はz軸をx軸に向ける方向、$R_{z}$はx軸をy軸に向ける方向となる。一般の回転行列も、これら3つの各軸周りの回転行列$R_{x},R_{y},R_{z}$の積によって得ることができる。 例えば$R_{z}(\gamma )R_{x}(\beta )R_{y}(\alpha )$は、yxz系で表したときのオイラー角が α, β, γ であるような回転を表す。

任意の軸周りの回転

任意の回転行列は、ある軸${\mathbf {n}}$まわりの角度$\theta$の回転という形に表示できる。このような回転行列はロドリゲスの回転公式により以下の様に表示出来る。

{\displaystyle R_{\mathbf {n} }(\theta )={\begin{bmatrix}\cos \theta +n_{x}^{2}\left(1-\cos \theta \right)&n_{x}n_{y}\left(1-\cos \theta \right)-n_{z}\sin \theta &n_{z}n_{x}\left(1-\cos \theta \right)+n_{y}\sin \theta \\n_{x}n_{y}\left(1-\cos \theta \right)+n_{z}\sin \theta &\cos \theta +n_{y}^{2}\left(1-\cos \theta \right)&n_{y}n_{z}\left(1-\cos \theta \right)-n_{x}\sin \theta \\n_{z}n_{x}\left(1-\cos \theta \right)-n_{y}\sin \theta &n_{y}n_{z}\left(1-\cos \theta \right)+n_{x}\sin \theta &\cos \theta +n_{z}^{2}\left(1-\cos \theta \right)\\\end{bmatrix}}}

また、任意のベクトル${\mathbf {r}}$へのその作用は以下の様に書ける。

{\displaystyle R_{\mathbf {n} }(\theta )\mathbf {r} =\mathbf {r} \cos \theta +\mathbf {n} (\mathbf {n} \cdot \mathbf {r} )(1-\cos \theta )+(\mathbf {n} \times \mathbf {r} )\sin \theta }

やはり全て二次元配列で扱える範囲。なので、ますます三次元配列の需要が遠のいてしまったという印象があります。かなり竜頭蛇尾な感じで終わってしまいましたが、とりあえずそんな感じで以下続報…

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?