モンキサドル(Monkey Saddle)

モンキサドル(Monkey Saddle)

モンキサドル(Monkey Saddle)は数学的に興味深い曲面で、3Dグラフとして視覚化するとその特徴的な形状がよくわかります。

以下にPythonを使ってモンキサドルを3Dグラフ化する方法を示します。

Pythonには、3Dグラフを描画するために一般的に使用されるライブラリMatplotlibNumPyを使います。


まず、必要なライブラリをインストールします。

これらは一般的に使用されるライブラリであり、多くのPython環境に既にインストールされているかもしれませんが、念のため以下のコマンドを実行してインストールしておいてください。

1
pip install matplotlib numpy

次に、モンキサドルを3Dグラフ化するPythonスクリプトを書きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# モンキサドルの関数定義
def monkey_saddle(x, y):
return x**3 - 3*x*y**2

# 描画範囲を設定
x = np.linspace(-2, 2, 400)
y = np.linspace(-2, 2, 400)
x, y = np.meshgrid(x, y)
z = monkey_saddle(x, y)

# プロットの設定
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 表面プロットの作成
ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')

# タイトルと軸ラベルの設定
ax.set_title("Monkey Saddle")
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')

# プロットの表示
plt.show()

このスクリプトを実行すると、モンキサドルの3Dプロットが表示されます。

monkey_saddle関数はモンキサドルの定義で、xyのメッシュグリッドを使ってzの値を計算しています。

その後、plot_surfaceメソッドを使って3Dプロットを作成し、viridisカラーマップを適用しています。

ソースコード解説

1. ライブラリのインポート:

必要なライブラリをインポートします。

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

2. モンキサドルの関数定義:

モンキサドルの方程式$ ( z = x^3 - 3xy^2 ) $を関数として定義します。

1
2
def monkey_saddle(x, y):
return x**3 - 3*x*y**2

3. 描画範囲の設定:

numpylinspace関数を使って、$-2$から$2$までの範囲で等間隔な数値を生成し、メッシュグリッドを作成します。

1
2
3
4
x = np.linspace(-2, 2, 400)
y = np.linspace(-2, 2, 400)
x, y = np.meshgrid(x, y)
z = monkey_saddle(x, y)

4. プロットの設定:

matplotlibfigureadd_subplotを使って3Dプロットを作成します。

1
2
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

5. 表面プロットの作成:

plot_surfaceメソッドを使って、モンキサドルの表面を描画します。

1
ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')

6. タイトルと軸ラベルの設定:

タイトルと軸ラベルを設定します。

1
2
3
4
ax.set_title("Monkey Saddle")
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')

7. プロットの表示:

plt.showを使ってプロットを表示します。

1
plt.show()

これで、モンキサドルの3Dプロットが表示されます。

グラフ解説

[実行結果]

モンキサドルの3Dプロットを詳しく説明します。

このプロットはモンキサドルと呼ばれる特定の形状を持つ曲面を可視化したもので、方程式$ ( z = x^3 - 3xy^2 ) $によって定義されます。

以下にプロットの各要素とその意味について詳しく説明します。

グラフの概要

  • タイトル: “Monkey Saddle”

    • このタイトルはプロットがモンキサドル曲面を表していることを示しています。
  • 軸ラベル:

    • X axis: $x$座標を表します。$x$軸は左右に伸びています。
    • Y axis: $y$座標を表します。$y$軸は前後に伸びています。
    • Z axis: $z$座標を表します。$z$軸は上下に伸びています。

モンキサドル曲面の特徴

  • 方程式: $( z = x^3 - 3xy^2 )$

    • この方程式は、$z$座標が$x$座標と$y$座標の3次式によって決定されることを示しています。
  • 形状の特徴:

    • モンキサドルは、その名前の通り、サドル(鞍)のような形をしています。
    • 中心の鞍点: 原点$ (0, 0, 0) $は鞍点と呼ばれ、$x$軸方向には上向きに、$y$軸方向には下向きに曲がっています。
      これは、鞍の中央部分が他の部分よりも低くなっているためです。
    • $3$つの上向きと$3$つの下向きの方向: モンキサドルは$x$軸に沿って上向きの山、$y$軸に沿って下向きの谷があり、$3$つの上向き方向と$3$つの下向き方向があります。
      これが普通のサドル面($2$つの上向きと$2$つの下向き)との違いです。

カラーマップ

  • カラーマップ (viridis):
    • このカラーマップは、曲面の高さ($z$値)に基づいて色を変化させます。
      通常、低い$z$値は暗い色(例えば、青や緑)、高い$z$値は明るい色(例えば、黄や白)で表示されます。
    • 色の変化によって、曲面の高低差が視覚的にわかりやすくなります。

プロットの表示範囲

  • x, yの範囲: $-2$から$2$の間で描画されています。

    • これにより、モンキサドル曲面の中心付近の詳細を表示することができます。
  • zの範囲: $x$と$y$の範囲に従って自動的に設定されます。

    • この範囲は曲面の形状に依存して変化しますが、一般的には$x$と$y$の範囲に応じて決まります。

解釈

  • 中心付近の特徴:
    • 原点近くでは、$z$値は急激に変化します。
      これはモンキサドルの特徴的な鞍点があるためです。
  • 遠方の特徴:
    • $x$または$y$の絶対値が大きくなるにつれて、$z$値も急速に増減します。
      これは、$x^3$または$-3xy^2$の項が支配的になるためです。

このように、モンキサドルの3Dプロットは、その独特の形状と数式によって定義される曲面を視覚的に示しています。

各軸、カラーマップ、およびプロットの範囲により、曲面の特徴とその変化が明確に表示されます。

チェビシェフ多項式(Chebyshev polynomials

チェビシェフ多項式(Chebyshev polynomials

チェビシェフ多項式(Chebyshev polynomials)は、直交多項式の一種であり、特に数値解析近似理論で広く使用されています。

チェビシェフ多項式は第一種と第二種があり、ここでは第一種のチェビシェフ多項式$ ( T_n(x) ) $を Python でプロットしてみます。

第一種のチェビシェフ多項式$ ( T_n(x) ) $は次の漸化式で定義されます:
$$
[ T_0(x) = 1 ]
$$
$$
[ T_1(x) = x ]
$$
$$
[ T_{n+1}(x) = 2xT_n(x) - T_{n-1}(x) ]
$$

Python でチェビシェフ多項式を計算し、グラフ化するために numpymatplotlib ライブラリを使用します。

以下に、チェビシェフ多項式をプロットするコードを示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np
import matplotlib.pyplot as plt

# チェビシェフ多項式を計算する関数
def chebyshev_polynomials(n, x):
if n == 0:
return np.ones_like(x)
elif n == 1:
return x
else:
T0 = np.ones_like(x)
T1 = x
for _ in range(2, n + 1):
T2 = 2 * x * T1 - T0
T0, T1 = T1, T2
return T1

# x の範囲を定義
x = np.linspace(-1, 1, 400)

# プロットするチェビシェフ多項式の次数
degrees = [0, 1, 2, 3, 4, 5]

# グラフの作成
plt.figure(figsize=(10, 6))

for degree in degrees:
Tn = chebyshev_polynomials(degree, x)
plt.plot(x, Tn, label=f'T_{degree}(x)')

# グラフの装飾
plt.title('Chebyshev Polynomials of the First Kind')
plt.xlabel('x')
plt.ylabel('T_n(x)')
plt.legend()
plt.grid(True)
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.show()

このコードは、チェビシェフ多項式を計算し、それらをグラフにプロットします。

chebyshev_polynomials 関数は、指定した次数のチェビシェフ多項式を計算します。

x の範囲を$ -1 $から$ 1 $に設定し、次数$ 0 $から$ 5 $までのチェビシェフ多項式をプロットしています。

このスクリプトを実行すると、チェビシェフ多項式のグラフが表示されます。

それぞれの多項式の形状を観察することで、チェビシェフ多項式の特性を理解する助けになります。

[実行結果]

ソースコード解説

このソースコードは、Python を使って第一種のチェビシェフ多項式を計算し、プロットするためのものです。
ソースコードを詳しく説明します。

1. ライブラリのインポート

1
2
import numpy as np
import matplotlib.pyplot as plt

まず、必要なライブラリをインポートします。

  • numpy (np): 数値計算を効率的に行うためのライブラリです。
    ここではチェビシェフ多項式の計算や範囲の設定に使用します。
  • matplotlib.pyplot (plt): データを可視化するためのライブラリです。
    ここではグラフの描画に使用します。

2. チェビシェフ多項式を計算する関数

1
2
3
4
5
6
7
8
9
10
11
12
def chebyshev_polynomials(n, x):
if n == 0:
return np.ones_like(x)
elif n == 1:
return x
else:
T0 = np.ones_like(x)
T1 = x
for _ in range(2, n + 1):
T2 = 2 * x * T1 - T0
T0, T1 = T1, T2
return T1

この関数 chebyshev_polynomials(n, x) は、第一種のチェビシェフ多項式 $ ( T_n(x) ) $を計算します。

  • n: 多項式の次数です。
  • x: 多項式の計算に使用する x の値の配列です。

関数の中では、チェビシェフ多項式の定義に基づいて多項式を計算します。

  • $( T_0(x) = 1 )$:
    もし$ n $が$ 0 $ならば、$x $と同じ形状の全ての要素が$ 1 $の配列を返します。
  • $( T_1(x) = x )$:
    もし$ n $が$ 1 $ならば、$x $をそのまま返します。
  • $( T_{n+1}(x) = 2xT_n(x) - T_{n-1}(x) )$:
    それ以外の場合は、漸化式を用いて高次の多項式を計算します。

3. x の範囲を定義

1
x = np.linspace(-1, 1, 400)

ここでは、$x $の範囲を$ -1 $から$ 1 $までの$ 400 $個の点で定義しています。
np.linspace は指定した範囲内で均等に分布する数値を生成する関数です。

4. プロットするチェビシェフ多項式の次数

1
degrees = [0, 1, 2, 3, 4, 5]

プロットするチェビシェフ多項式の次数をリストで定義しています。
ここでは$ 0 $から$ 5 $までの多項式をプロットします。

5. グラフの作成

1
plt.figure(figsize=(10, 6))

新しい図(figure)を作成し、そのサイズを 10x6 インチに設定します。
これにより、グラフの全体的な見栄えを調整します。

6. チェビシェフ多項式の計算とプロット

1
2
3
for degree in degrees:
Tn = chebyshev_polynomials(degree, x)
plt.plot(x, Tn, label=f'T_{degree}(x)')

ここでは、指定された各次数のチェビシェフ多項式を計算し、プロットします。

  • for degree in degrees:
    各次数に対して繰り返し処理を行います。
  • Tn = chebyshev_polynomials(degree, x):
    現在の次数のチェビシェフ多項式を計算します。
  • plt.plot(x, Tn, label=f'T_{degree}(x)'):
    計算した多項式をプロットし、凡例にその次数をラベル付けします。

7. グラフの装飾

1
2
3
4
5
6
7
8
plt.title('Chebyshev Polynomials of the First Kind')
plt.xlabel('x')
plt.ylabel('T_n(x)')
plt.legend()
plt.grid(True)
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.show()

最後に、グラフに装飾を加えます。

  • plt.title('Chebyshev Polynomials of the First Kind'): グラフにタイトルを追加します。
  • plt.xlabel('x'): $x$軸にラベルを追加します。
  • plt.ylabel('T_n(x)'): $y$軸にラベルを追加します。
  • plt.legend(): 凡例を表示します。
  • plt.grid(True): グリッド線を表示します。
  • plt.axhline(0, color='black', linewidth=0.5): $y=0 $の水平線を追加します。
  • plt.axvline(0, color='black', linewidth=0.5): $x=0 $の垂直線を追加します。
  • plt.show(): グラフを表示します。

このコード全体を通して、第一種のチェビシェフ多項式 $ ( T_n(x) ) $の異なる次数のプロットを生成し、可視化することができます。

それぞれの多項式の形状を観察することで、チェビシェフ多項式の特性を理解することができます。

グラフ解説

[実行結果]

このグラフには、第一種のチェビシェフ多項式 $ ( T_n(x) ) $が表示されます。

グラフの詳細な内容について説明します。

グラフの詳細

1. タイトル:

グラフのタイトルには “Chebyshev Polynomials of the First Kind” と表示されています。
これは、第一種のチェビシェフ多項式を示しています。

2. x軸:

$x$軸は$ -1 $から$ 1 $の範囲を持ちます。
これは、チェビシェフ多項式が$ -1 $から$ 1 $の範囲で特に重要な特性を持つためです。

3. y軸:

$y$軸は、多項式の値を表します。
異なる次数のチェビシェフ多項式の値がこの軸にプロットされます。

4. プロットされる多項式:

グラフには、次数$ 0 $から$ 5 $までのチェビシェフ多項式がプロットされています。
それぞれの多項式は異なる色で表示され、凡例により識別できます。

  • $( T_0(x) )$:
    $( T_0(x) = 1 ) $なので、$x $に関係なく$ y $値が常に $1$ です。
    これは$ y = 1 $の水平線として表示されます。
  • $( T_1(x) )$:
    $( T_1(x) = x ) $なので、$y = x $の直線として表示されます。
    原点を通る斜めの直線です。
  • $( T_2(x) )$:
    $( T_2(x) = 2x^2 - 1 ) $で、放物線の形をしています。
    $x $が$ -1 $または$ 1 $のときに$ y $が$ 1 $になり、$x $が$ 0 $のときに $y $が $-1 $になります。
  • $( T_3(x) )$:
    $( T_3(x) = 4x^3 - 3x ) $で、三次多項式の形をしています。
    $x $の正負に応じて $y $の値が変化し、波のような形をしています。
  • $( T_4(x) )$:
    $( T_4(x) = 8x^4 - 8x^2 + 1 ) $で、四次多項式の形をしています。
    2つの波があるように見えます。
  • $( T_5(x) )$:
    $( T_5(x) = 16x^5 - 20x^3 + 5x ) $で、五次多項式の形をしています。
    より複雑な波形になります。

5. 凡例:

グラフの右上に凡例があり、それぞれの曲線がどの次数のチェビシェフ多項式であるかを示しています。
例えば、$T_0(x)$ や $T_1(x)$ などのラベルが表示されています。

6. グリッド線:

グラフにはグリッド線が表示されており、プロットされた多項式の値を読み取りやすくしています。

7. 軸線:

$x$軸と $y$軸の交点に黒い線が引かれています。
これは、原点を明確に示し、多項式が$ x $軸や$ y $軸と交差する点を見つけやすくしています。

具体的な観察点

  • 対称性:
    $ ( T_n(x) ) $のうち偶数の多項式は偶関数(対称性が$ x $軸に対して対称)であり、奇数の多項式は奇関数(対称性が原点に対して対称)です。
    例えば、 $( T_2(x) ) $は偶関数であり、 $( T_3(x) ) $は奇関数です。

  • 振動の数:
    $ ( T_n(x) ) $は$ -1 $から$ 1 $の間で$ ( n ) $回振動します。
    例えば、$ ( T_3(x) ) $は$ -1$ から$ 1 $の間で$ 3 $回振動します。

  • 極値:
    チェビシェフ多項式の極値の位置と値は、数値解析や近似理論において重要です。
    例えば、$ ( T_2(x) ) $の極値は$ ( x = \pm 1/\sqrt{2} ) $にあり、それぞれ$ y = -1 $です。

このように、チェビシェフ多項式のグラフを観察することで、彼らの特性や挙動を理解しやすくなります。

減衰調和振動(ダンプドハーモニックモーション)

減衰調和振動(ダンプドハーモニックモーション)

減衰調和振動(ダンプドハーモニックモーション)は、振動系が外部抵抗(減衰力)によってエネルギーを失いながら振動する現象です。

減衰力は速度に比例し、振動の振幅が時間とともに減少します。

以下に、減衰調和振動について詳しく説明します。

【減衰調和振動の基本概念】

微分方程式

減衰調和振動は、以下の二階線形微分方程式で記述されます:

$$
m \frac{d^2x}{dt^2} + c \frac{dx}{dt} + kx = 0
$$

  • $( m )$: 振動する物体の質量
  • $( c )$: 減衰係数(速度に比例する抵抗力の係数)
  • $( k )$: バネ定数(フックの法則に従うバネの硬さ)
  • $( x(t) )$: 時間$ ( t ) $における変位

減衰の種類

減衰の強さによって、振動の挙動は次の3種類に分類されます:

  1. 過減衰 (Overdamping):
    減衰が非常に大きいため、物体は振動せずに平衡位置に戻ります。
  2. 臨界減衰 (Critical Damping):
    減衰が特定の臨界値に等しく、物体は最も速く平衡位置に戻りますが、振動しません。
  3. 減衰振動 (Underdamping):
    減衰が比較的小さいため、物体は減衰しながら振動を続けます。

【減衰調和振動の解】

減衰調和振動の一般解は以下の形になります:

$$
x(t) = e^{-\frac{c}{2m} t} \left( A \cos(\omega_d t) + B \sin(\omega_d t) \right)
$$

  • $( \omega_d = \sqrt{\frac{k}{m} - \left( \frac{c}{2m} \right)^2} ) $は減衰振動数(ダンピング振動数)

【減衰調和振動の特徴】

  • 指数関数的減衰:
    振幅は指数関数的に減少します。
    減衰係数$ ( c ) $が大きいほど、振幅の減少が早くなります。
  • 振動数の低下:
    減衰があると、自然振動数$ ( \omega_0 = \sqrt{\frac{k}{m}} ) $よりも低い減衰振動数$ ( \omega_d ) $で振動します。

【減衰調和振動の物理的直感】

物理的な例として、減衰調和振動は次のようなシステムで観察されます:

  • 自動車のサスペンション:
    道路の凹凸による振動を抑えるための減衰装置が含まれます。
  • 建物の制振装置:
    地震時に建物の揺れを減衰させるためのダンパーが使用されます。
  • メカニカルウォッチの振り子:
    空気抵抗によって振り子の振動が徐々に減衰します。

【まとめ】

減衰調和振動は、多くの物理システムで観察される基本的な現象です。
減衰の影響で振幅が時間とともに減少し、エネルギーが徐々に失われるため、システムは最終的に静止状態に近づきます。

この現象を理解することで、振動を制御し、システムの安定性を向上させることが可能になります。

ソースコード

ダンプドハーモニックモーション(減衰調和振動)をPythonで2Dグラフ化する方法を示します。
以下のコードでは、Matplotlibライブラリを使用して時間経過に伴う振動の減衰をプロットします。

まず、減衰調和振動の微分方程式を以下のように定義します:

$$
m \frac{d^2x}{dt^2} + c \frac{dx}{dt} + kx = 0
$$

ここで、$m$は質量、$c$は減衰係数、$k$はバネ定数です。

この微分方程式の解は一般的に次のようになります:

$$
x(t) = e^{-\frac{c}{2m} t} \left( A \cos(\omega_d t) + B \sin(\omega_d t) \right)
$$

ここで、$ (\omega_d) $は減衰振動数で、

$$$
\omega_d = \sqrt{\frac{k}{m} - \left(\frac{c}{2m}\right)^2}
$$

です。

これを踏まえて、Pythonコードでグラフを描画します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
m = 1.0 # 質量
c = 0.2 # 減衰係数
k = 1.0 # バネ定数
A = 1.0 # 初期位置での振幅
B = 0.0 # 初期速度に基づく項

# 減衰振動数の計算
omega_d = np.sqrt(k/m - (c/(2*m))**2)

# 時間の設定
t = np.linspace(0, 20, 1000)

# 減衰調和振動の式
x = np.exp(-c/(2*m)*t) * (A * np.cos(omega_d * t) + B * np.sin(omega_d * t))

# 2Dプロット
plt.figure(figsize=(10, 6))
plt.plot(t, x, label='Damped Harmonic Motion', color='b')

# ラベルとタイトルの追加
plt.xlabel('Time (s)')
plt.ylabel('Displacement (m)')
plt.title('Damped Harmonic Motion')

# グリッドと凡例の追加
plt.grid(True)
plt.legend()

# プロット表示
plt.show()

このコードでは、次のステップを実行しています:

  1. パラメータ(質量 $m$、減衰係数 $c$、バネ定数 $k$、初期振幅 $A$、および初期速度に基づく項 $B$)の設定。
  2. 減衰振動数 $(\omega_d)$の計算。
  3. 時間範囲を設定(ここでは$0$から$20$秒までを$1000$ステップに分割)。
  4. 減衰調和振動の式に基づいて変位$x(t)$を計算。
  5. Matplotlibを使用して2Dプロットを作成。
  6. プロットにラベル、タイトル、グリッド、凡例を追加。
  7. プロットを表示。

このコードを実行することで、時間の経過に伴う減衰調和振動の挙動を2Dグラフで視覚化できます。

[実行結果]

ソースコード解説

減衰調和振動のグラフを描画するために使用したPythonコードを詳細に説明します。

このグラフには、時間の経過に伴う物体の変位が表示されます。

各要素がどのように機能するかを説明します。

パラメータ設定

1
2
3
4
5
m = 1.0   # 質量
c = 0.2 # 減衰係数
k = 1.0 # バネ定数
A = 1.0 # 初期位置での振幅
B = 0.0 # 初期速度に基づく項
  • m (質量): 振動する物体の質量です。
  • c (減衰係数): 減衰の度合いを決定するパラメータです。値が大きいほど減衰が強くなります。
  • k (バネ定数): バネの硬さを表します。
  • A (初期振幅): 初期時点での振動の最大変位です。
  • B (初期速度に基づく項): 初期速度がある場合に使いますが、ここでは$0$としています。

減衰振動数の計算

1
omega_d = np.sqrt(k/m - (c/(2*m))**2)
  • omega_d (減衰振動数): 減衰がある場合の振動数です。
    減衰がない場合の自然振動数 $ (\omega_0 = \sqrt{k/m}) $から減衰項を引いて計算します。

時間の設定

1
t = np.linspace(0, 20, 1000)
  • t: 時間の配列です。
    $0$秒から$20$秒までを$1000$ステップに分割しています。
    これにより、時間の経過に伴う詳細な変位を計算できます。

減衰調和振動の式

1
x = np.exp(-c/(2*m)*t) * (A * np.cos(omega_d * t) + B * np.sin(omega_d * t))
  • x: 時間 t に対する変位です。

指数関数の項$ (\exp(-c/(2m) t)) $は減衰を表し、三角関数の項$ (\cos(\omega_d t)) $および$ (\sin(\omega_d t)) $は振動を表します。

2Dプロット

1
2
plt.figure(figsize=(10, 6))
plt.plot(t, x, label='Damped Harmonic Motion', color='b')
  • plt.figure(figsize=(10, 6)): グラフのサイズを設定しています。
  • plt.plot(t, x, label='Damped Harmonic Motion', color='b'): 時間 t に対する変位 x を青色 (b) でプロットし、ラベルを「Damped Harmonic Motion」としています。

ラベルとタイトルの追加

1
2
3
plt.xlabel('Time (s)')
plt.ylabel('Displacement (m)')
plt.title('Damped Harmonic Motion')
  • plt.xlabel('Time (s)'): x軸のラベルを「Time (s)」と設定しています。
  • plt.ylabel('Displacement (m)'): y軸のラベルを「Displacement (m)」と設定しています。
  • plt.title('Damped Harmonic Motion'): グラフのタイトルを「Damped Harmonic Motion」と設定しています。

グリッドと凡例の追加

1
2
plt.grid(True)
plt.legend()
  • plt.grid(True): グラフにグリッド線を表示します。
  • plt.legend(): グラフの凡例を表示します。

プロット表示

1
plt.show()
  • plt.show(): グラフを表示します。

グラフ解説

[実行結果]

このグラフは、時間の経過に伴う減衰調和振動の変位を示しています。

具体的には、以下の特徴があります:

1. 減衰の影響:

振幅が時間とともに指数関数的に減少します。
これは、減衰の影響によるものです。

2. 振動:

減衰していない場合の振動数よりも低い振動数で、減衰しながら振動します。

3. ゼロクロス:

振動がゼロを越える点がいくつかあり、これは物体が平衡位置を通過するたびに発生します。

このグラフを通じて、減衰調和振動の動的な挙動を視覚的に理解することができます。

ティコノフスパイラル

ティコノフスパイラル

ティコノフスパイラルは、等角螺旋の一種で、以下の特徴を持つ曲線です。

1. 定義

ティコノフスパイラルは、極座標$(r, θ)$において、$r = a + bθ $と表される曲線です。
ここで、$a$は収縮率、$b$は回転率と呼ばれるパラメータです。

2. 形状

  • 収縮率 $a$が大きいほど、スパイラルの内側が密集します。
    $a=0$の場合は対数螺旋になります。
  • 回転率 $b$が大きいほど、スパイラルの巻数が多くなります。
  • $a$と$b$の値を変えることで、様々な形状のスパイラルを生成できます。

3. 性質

  • 自己相似性: スパイラルの一部を拡大しても、同じ形状が現れます。
  • 等角性: スパイラルと半径のなす角度は一定です。
  • 渦巻き構造: スパイラルの中心付近は渦巻き状に集まり、外側に向かうにつれて間隔が開いていきます。

4. 応用例

  • 生物学: 植物の葉の渦巻き配置、貝殻の形状などで見られます。
  • 物理学: 渦やらせん状の流れの可視化に使われます。
  • 美術: 絵画や版画などのデザインに利用されます。
  • アンテナ設計: 指向性の高いアンテナを設計する際に利用されます。

ティコノフスパイラルは、自然界に多く見られる美しい形状であり、様々な分野で応用されています。

簡単な方程式から複雑な構造を生み出す点が、この曲線の魅力の一つです。

Pythonコード

ティコノフスパイラルをPythonで可視化するコードは以下の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import matplotlib.pyplot as plt

# パラメータ
a = 0.9 # 収縮率
b = 0.3 # 回転率
theta_max = 8 * np.pi # 最大角度

# 角度の配列を生成
theta = np.linspace(0, theta_max, 1000)

# ティコノフスパイラルの座標を計算
r = a + b * theta
x = r * np.cos(theta)
y = r * np.sin(theta)

# プロット
fig, ax = plt.subplots(figsize=(8, 8))
ax.plot(x, y)
ax.set_aspect('equal')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Tichonoff Spiral')
plt.show()

このコードでは、以下の手順を行っています。

  1. NumPyMatplotlibをインポートします。
  2. ティコノフスパイラルのパラメータ(収縮率 a回転率 b最大角度 theta_max)を設定します。
  3. np.linspace関数を使って、$0$からtheta_maxまでの角度の配列を生成します。
  4. ティコノフスパイラルの座標 (r, x, y)を計算します。
  5. Matplotlibを使って、座標(x, y)をプロットします。
  6. プロットのアスペクト比を等しくし、軸ラベルとタイトルを設定します。
  7. プロットを表示します。

実行すると、ティコノフスパイラルが描画されます。

パラメータabを調整することで、スパイラルの形状を変更できます。

グラフ解説

[実行結果]

生成されたグラフでは、以下の要素が確認できます。

  • $X$軸と$Y$軸は、カルテシアン座標系を表しています。
  • 青色の曲線がティコノフスパイラルそのものです。
  • スパイラルは原点 $(0, 0)$を中心として描かれています。
  • 最初の数回転は比較的密集していますが、角度が大きくなるにつれて曲線の間隔が開いていきます。
    これは、収縮率 $a$の影響によるものです。
  • スパイラルは回転を続けながら、外側に向かって広がっていきます。
    これは、回転率 $b$の影響によるものです。
  • グラフのアスペクト比は等しく設定されているため、$X$軸と$Y$軸のスケールが同じになっています。
    これにより、スパイラルの形状が歪まずに表示されています。

以上のように、ティコノフスパイラルのグラフでは、パラメータ$a$、$b$の値によってスパイラルの形状が変化することがわかります。

適切なパラメータを選ぶことで、様々なパターンのスパイラルを生成できます。

ジグザグ曲面

ジグザグ曲面

ジグザグ曲面の特徴と性質について詳しく説明します。

ジグザグ曲面は、sin関数cos関数の絶対値を掛け合わせた式:
$$
Z = |sin(X)| * |cos(Y)|
$$
で表される3次元曲面です。

この曲面には以下のような特徴があります。

1. 周期性

  • $X$軸方向には sin関数の絶対値が適用されているため、曲面は$X$方向に周期的な山と谷を形成します。
    この周期は2πです。
  • $Y$軸方向には cos関数の絶対値が適用されているため、曲面は$Y$方向にも同様に周期的な山と谷を形成します。
    ただし、この周期は$X$方向とは$π/2$ずれています。
  • 結果として、曲面全体としては格子状のジグザグ模様になります。

2. 連続性

  • 曲面は微分可能で連続的な形状をしています。
  • しかし、$X=nπ$($n$は整数)または$Y=nπ/2$($n$は整数)の直線上では不連続な尖った部分ができます。

3. 対称性

  • この曲面は、$X$軸と$Y$軸の両方に関して対称性を持っています。

4. Z値の範囲

  • $Z$値は$0$から$1$の範囲に収まります。
  • $X=nπ/2$、$Y=nπ($n$は$整数)の点で$Z=1$の最大値をとります。
  • $X=nπ$、$Y=nπ/2$($n$は整数)の点で$Z=0$の最小値をとります。

5. 局所的な形状

  • $X=nπ/2$、$Y=nπ$($n$は整数)近傍では、曲面は鋭い尖った山をつくります。
  • $X=nπ$、$Y=nπ/2$($n$は整数)近傍では、曲面は底の平らな谷をつくります。

6. グローバルな形状

  • 曲面全体を見ると、$X$方向と$Y$方向に波打つ格子状のジグザグ模様となります。
  • この模様は無限に続く周期関数なので、境界はありません。

このようにジグザグ曲面は、sin関数cos関数の絶対値から生まれる特徴的な周期的・格子状の形状を持った興味深い曲面です。

数学的には連続微分可能ですが、不連続点も存在します。

この曲面のユニークな形状は、3Dグラフィックスコンピューターグラフィックスなどの分野で活用されている曲面の一つです。

ソースコード

Pythonでジグザグ曲面をグラフ化する方法を説明します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# フィギュアとAxes3Dを作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# グラフのタイトルとラベルを設定
plt.title('Zig-Zag Surface')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# グラフの範囲を設定
x = np.arange(-10, 10, 0.1)
y = np.arange(-10, 10, 0.1)
X, Y = np.meshgrid(x, y)

# ジグザグ曲面の方程式
Z = np.abs(np.sin(X)) * np.abs(np.cos(Y))

# 曲面をプロット
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')

plt.show()

上記のコードでは、まずMatplotlibNumPyをインポートし、3Dプロットに必要なAxes3Dを作成しています。
次に、グラフのタイトルとラベルを設定し、プロットする範囲を設定しています。

ジグザグ曲面の方程式は、Z = np.abs(np.sin(X)) * np.abs(np.cos(Y))で表されます。
この式では、sincos絶対値を取ることでジグザグ模様を生成しています。

最後に、plot_surfaceメソッドを使ってジグザグ曲面を3Dグラフでプロットしています。

$rstride=1$, $cstride=1$は、グラフの解像度を制御するパラメータで、値を小さくするとより詳細なグラフが得られますが、計算コストが高くなります。

cmap='viridis'は、グラフの色を設定するパラメータです。

このコードを実行すると、ジグザグ模様の3D曲面がグラフ化されます。
グラフの範囲やカラーマップを調整すれば、様々な種類のジグザグ曲面を表示できます。

グラフ解説

[実行結果]

表示されるグラフを詳しく見ていきましょう。

1. 全体的な形状

  • グラフは3次元空間に浮かぶ曲面を表しています。
  • 曲面全体がジグザグ状の模様になっており、山と谷が規則正しく連なっています。

2. X軸方向の特徴

  • $X$軸方向には、sin関数の絶対値が適用されているため、曲面は規則的な山と谷を形成しています。
  • 山と谷の幅は一定ではなく、sin関数の周期によって変化しています。

3. Y軸方向の特徴

  • $Y$軸方向には、cos関数の絶対値が適用されているため、曲面は規則的な山と谷を形成しています。
  • しかし、$X$軸方向とは異なり、cos関数の位相がずれているため、山と谷の位置がずれています。

4. 高さ(Z軸)の変化

  • 曲面の高さ($Z$値)は、$sin(X)$と$cos(Y)$の絶対値の積で決まります。
  • 両者の値が$0$に近づくと、$Z$値も小さくなり、曲面の高さが低くなります。
  • 逆に、$sin(X)$と$cos(Y)$の絶対値がともに1に近づくと、$Z$値が最大になり、曲面の高さが最も高くなります。

5. 色分け

  • グラフにはviridisカラーマップが適用されています。
  • 曲面の高い部分は黄色がかった緑色で、低い部分は紫色で表示されています。
  • これにより、曲面の高低差が一目でわかりやすくなっています。

6. 解像度

  • rstride=1cstride=1を設定することで、グラフの解像度が高くなっています。
  • これにより、曲面の細かい凹凸がくっきりと表現されています。

このようにジグザグ曲面のグラフは、sin関数cos関数の絶対値を利用した特徴的な形状を持ち、カラーマップ解像度の設定により、その凹凸がよりわかりやすく表現されています。

クラインの壺

クラインの壺

クラインの壺は、非常に興味深い幾何学的形状です。

詳しく説明しましょう。

1. 発見と命名

クラインの壺は、1882年にドイツの数学者フェリックス・クラインによって発見された曲面です。
クラインは、この曲面の特性を研究し、「曲面が自分自身と交差しながら1つの体積を持つ」ことを発見しました。
そして、この形状を「壺(Fläche)」と名付けました。

2. 形状の特徴

クラインの壺は、3次元空間に埋め込まれた4次元物体の投影だと考えられています。
その形状は、ねじれた管状の構造が自己交差しており、内側と外側が連続しています。
つまり、曲面上の任意の点から出発して進むと、最終的には同じ点に戻ってくることになります。

3. 代数的表現

クラインの壺の形状は、複雑な代数方程式で表現されます。
その方程式は以下の通りです。

$$
(x^2 + y^2 + z^2 + 2y - 1)^3 - x^2z^3 - y^2z^3 = 0
$$

この方程式は、$x$、$y$、$z$の3変数で表された4次の代数方程式です。
この方程式を満たす点の集合がクラインの壺の形状を描きます。

4. トポロジー的性質

クラインの壺は、トポロジー的に非常に特殊な性質を持っています。
具体的には、ホモロジー群 $(H_0, H_1, H_2)$が$(Z, Z ⊕ Z, 0)$となります。
つまり、0次、1次のホモロジー群は自明ではありませんが、2次のホモロジー群は自明です。
これは、この曲面が「非方向付け可能」であることを意味しています。

5. 応用と意義

クラインの壺は、単なる数学的好奇心の対象ではありません。
物理学工学分野でも重要な役割を果たしています。
例えば、フォトニック結晶メタマテリアルの設計において、クラインの壺の形状を利用することで、新しい光学的性質を実現できる可能性があります。
また、一般相対性理論における時空のモデル化にも役立つと考えられています。

このように、クラインの壺幾何学トポロジー物理学など、様々な分野に関連する不思議な形状なのです。

ソースコード

クラインの壺をPythonでグラフ化するコードを書きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# クラインの壺の方程式
def klein_bottle(u, v):
x = -(3 + np.cos(u) * np.cos(v / 2)) * np.cos(u)
y = (3 + np.cos(u) * np.cos(v / 2)) * np.sin(u)
z = np.sin(u) * np.cos(v / 2)
return x, y, z

# パラメータ範囲
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, 2 * np.pi, 100)
U, V = np.meshgrid(u, v)

# クラインの壺の座標計算
X, Y, Z = klein_bottle(U, V)

# 3D プロット
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Klein Bottle')

plt.show()

このコードでは、まずクラインの壺の方程式を定義しています。
次に、np.linspacenp.meshgridを使って、曲面上の格子点データを作成します。
その後、クラインの壺の座標を計算し、plot_surfaceを使って3Dプロットを描画しています。

実行すると、クラインの壺の3Dグラフが表示されます。
figsizeで図のサイズを調整し、rstridecstrideプロットの解像度を変更できます。
カラーマップやタイトル、軸ラベルなども調整可能です。

グラフ解説

[実行結果]

このグラフに表示される内容を説明します。

1. 形状

グラフで表示されている形状は、クラインの壺と呼ばれる代数幾何学的な曲面です。
クラインの壺は、一つの体積を持つ非方向付け可能な曲面で、自己交差しています。
つまり、自分自身と交差する箇所があります。

この特異な形状は、3次元空間にはめ込むことができない4次元物体を3次元に投影したものだと考えられています。

2. 構造

よく見ると、クラインの壺の内側には、ねじれた管状の構造があることがわかります。
この管は一重ではなく、二重に折り重なっています。
さらに、この管は途中で自己交差しており、内側と外側が連続していることがわかります。

3. 対称性

クラインの壺回転対称性を持っています。
つまり、任意の軸周りに回転させても形状は変わりません。
また、上下逆さまにしても同じ形状になります。

4. 色分け

グラフでは、曲面の各点にカラーマップが適用されています。
ここではviridisという色を使用していますが、他の色も選択可能です。
この色分けにより、曲面の立体感が強調されています。

5. 解像度

rstridecstrideのパラメータで、プロットの解像度を調整できます。
値を大きくすると解像度が下がり、小さくすると解像度が上がります。
解像度が高すぎると計算コストが大きくなります。

このようにクラインの壺は、非常にユニークな形状と性質を持つ曲面です。
数学幾何学の分野で重要な役割を果たしており、様々な物理現象のモデル化にも役立てられています。

カタロイド曲面

カタロイド曲面

カタロイド曲面(Catenoid)は、2つの同心の円周から生成される最小表面積の回転曲面です。

この曲面は以下の性質を持っています。

1. 形状

  • カタロイド曲面は、両端が開いた鞍馬形状の曲面です。
  • 中央部分は細く絞られ、両端に向かって徐々に広がる形状をしています。
  • 曲面の形状は、吊り橋のケーブルの形状に似ています。

2. 方程式

  • カタロイド曲面の方程式は、$x^2/a^2 + y^2/b^2 - z^2/c^2 = 1 $で表されます。
  • $a$、$b$、$c$はそれぞれ$x$、$y$、$z$軸方向の半径を表す定数です。
  • $a=b=c$の場合は回転体となり、$a≠b≠c$の場合は楕円形の形状になります。

3. minimumの性質

  • カタロイド曲面は、2つの同心円周を通る最小表面積の曲面です。
  • つまり、この形状は与えられた2つの円周に接する曲面の中で、最小の表面積を持つ曲面となります。
  • この性質は、石けんの膜が示す現象と関連しています。

4. 応用例

  • カタロイド曲面の形状は、建築物の屋根設計橋梁設計に応用されています。
  • 最小表面積の性質により、材料コストを抑えつつ強度を確保できるためです。
  • また、この曲面は液体の表面張力による現象を説明する際にも使われます。

5. 曲面パラメータ

  • カタロイド曲面の形状は、$a$、$b$、$c$の値によって変化します。
  • $a=b=c$のとき球面と一致し、$a=b≠c$のときは回転楕円体、$a≠b≠c$のとき一般の楕円形になります。

このように、カタロイド曲面は興味深い数学的幾何学的性質を持ち、実用面でも活用されている曲面です。

ソースコード

カタロイド曲面の方程式は以下のように表されます。

$$
x^2/a^2 + y^2/b^2 - z^2/c^2 = 1
$$

ここで、$a$、$b$、$c$はそれぞれ$x$、$y$、$z$軸方向の半径を表す定数です。

この方程式をPythonで解いてグラフ化するコードは以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# パラメータの設定
a = 3 # x軸方向の半径
b = 2 # y軸方向の半径
c = 1 # z軸方向の半径

# グリッドデータの作成
u = np.linspace(-np.pi, np.pi, 100)
v = np.linspace(0, 2*np.pi, 100)
U, V = np.meshgrid(u, v)
X = a * np.cosh(U) * np.cos(V)
Y = b * np.sinh(U) * np.sin(V)
Z = c * V

# 3D描画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='plasma')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

このコードでは、まずnumpymatplotlibライブラリをインポートしています。

次に、カタロイド曲面の$x$、$y$、$z$軸方向の半径$a$、$b$、$c$を設定しています。

その後、np.linspace関数np.meshgrid関数を使って、$u$、$v$座標のグリッドデータを作成しています。
そして、カタロイド曲面の方程式に従って$X$、$Y$、$Z$座標を計算しています。

最後に、matplotlib.pyplot.plot_surface関数を使って3D曲面をプロットしています。
cmapパラメータでカラーマップを設定しています。

実行すると、カタロイド曲面の形状が3D空間上にグラフ化されます。
パラメータ$a$、$b$、$c$を変更することで、カタロイド曲面の形状を調整できます。

グラフ解説

[実行結果]

このコードで生成される3D グラフには、以下の内容が表示されています。

1. カタロイド曲面の形状

  • カタロイド曲面は、両端が開いた形状で、鞍馬のようなくぼみを持つ曲面です。
  • この曲面は、$x^2/a^2 + y^2/b^2 - z^2/c^2 = 1 $の方程式で表されます。
  • コードでは、$a=3$、$b=2$、$c=1 $としているため、$x$軸方向に最も伸びた楕円形の形状になっています。

2. カラーマップ

  • 曲面は、plasma というカラーマップで色付けされています。
  • このカラーマップは、青から赤へと徐々に変化する色で曲面を表示します。
  • 曲面の高い部分は赤に近い色で、低い部分は青に近い色で表示されます。
  • カラーマップによって、曲面の形状の違いがより視覚的に分かりやすくなります。

3. 軸ラベル

  • グラフには、$X$、$Y$、$Z$軸のラベルが付けられています。
  • これにより、3次元空間上での曲面の位置関係が分かりやすくなります。

4. グリッド

  • 曲面にはグリッド線が引かれており、曲面の形状をより詳細に確認できます。
  • グリッド線の密度は、$u$、$v$の値で調整できます。

このようにカタロイド曲面のグラフでは、曲面の形状色付け軸ラベルグリッドなどの要素が視覚化されており、3次元の曲面を理解するのに役立ちます。

球面方程式

球面方程式

球面方程式は、3次元空間における球の形状を定義する方程式です。

一般的に次のように表されます。

$$
x^2 + y^2 + z^2 = r^2
$$

ここで、$(x)$、$(y)$、$(z)$は球面上の点の座標であり、$(r)$は球の半径です。

この方程式では、球面上の点の座標 $ (x)$、$(y)$、$(z) $に関するすべての組み合わせが、半径 $ (r) $の球面上に存在するかどうかを判定します。

具体的には、球面上の点の座標を代入したとき、等式が成立する点が球面上に存在することを示します。

球面方程式は、数学物理学などのさまざまな分野で使用されます。
例えば、天体力学では天体の運動を記述する際に使用され、幾何学では3次元空間の図形を解析する際に使用されます。

球面方程式を理解することで、球の形状性質についての理解を深めることができます。
また、球面方程式を解析することで、球面上の点の位置球の体積などの重要な情報を得ることができます。

Pythonで球面方程式を解いてグラフ化する方法は、Matplotlibを使用して3次元プロットを作成することです。

以下は、その方法の例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 球の半径を設定
r = 5

# θ(傾斜角)とφ(方位角)の範囲を設定
theta = np.linspace(0, np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)

# θとφの値から球面方程式を解く
theta, phi = np.meshgrid(theta, phi)
x = r * np.sin(theta) * np.cos(phi)
y = r * np.sin(theta) * np.sin(phi)
z = r * np.cos(theta)

# カラーマップを指定して3次元プロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis')

# 色バーの追加
fig.colorbar(surf)

# 軸ラベルの設定
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# グラフの表示
plt.show()

このコードでは、NumPyを使用して$x$、$y$、$z$の値を生成し、これらの値を球面方程式に代入して$ (x^2 + y^2 + z^2 - r^2) $を計算します。

その後、Matplotlibを使用して等高線プロットを作成し、球面をグラフ化します。

[実行結果]

ソースコード解説

ソースコードの各部分を説明します。

1. ライブラリのインポート:

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • numpyは数値計算を行うためのライブラリです。
    npとしてインポートされます。
  • matplotlib.pyplotはグラフ描画のためのライブラリです。
    pltとしてインポートされます。
  • mpl_toolkits.mplot3dは3次元のグラフ描画のためのライブラリです。
    Axes3Dとしてインポートされます。

2. 球のパラメータ設定:

1
r = 5
  • r球の半径を表します。

3. 角度の範囲設定:

1
2
theta = np.linspace(0, np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)
  • thetaphiは、傾斜角($θ$)と方位角($φ$)の範囲を設定します。
    それぞれ、$0$から$π$(円周率)までの範囲と、$0$から$2π$までの範囲に、$100$個の等間隔の点が作成されます。

4. 球面方程式の解:

1
2
3
4
theta, phi = np.meshgrid(theta, phi)
x = r * np.sin(theta) * np.cos(phi)
y = r * np.sin(theta) * np.sin(phi)
z = r * np.cos(theta)
  • meshgrid関数を使用して、thetaphiの値から格子点を生成します。
    これにより、球面上の各点の角度が得られます。
  • それぞれの座標$ (x)$、$(y)$、$(z) $は、球面方程式 $(x^2 + y^2 + z^2 = r^2) $に基づいて計算されます。

5. 3次元プロット:

1
2
3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis')
  • figure()関数を使用して新しい図を作成し、add_subplot()メソッドを使用して3次元サブプロットを追加します。
  • plot_surface()メソッドを使用して、球面をプロットします。
    カラーマップは 'viridis' が指定されています。

6. 色バーの追加:

1
fig.colorbar(surf)
  • colorbar()関数を使用して、色バーをプロットに追加します。

7. 軸ラベルの設定:

1
2
3
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
  • set_xlabel()set_ylabel()set_zlabel()メソッドを使用して、$X$軸、$Y$軸、$Z$軸のラベルを設定します。

8. グラフの表示:

1
plt.show()
  • show()関数を使用して、グラフを表示します。

これらの手順を経て、3次元の球面がプロットされ、対応する色バーと軸ラベルが表示されます。

グラフ解説

[実行結果]

このプロットは、3次元空間における球面を可視化しています。

以下に、グラフに表示される内容を詳しく説明します。

1. 球面の形状:

球の半径は設定されており、球面はその半径によって決定されます。
球の中心は原点に位置します。

2. 色マッピング:

カラーマップ'viridis' に設定されています。
このカラーマップは、低い値を暗い色で表し、高い値を明るい色で表します。
球面上の各点の高さ($z$座標)に応じて、カラーマップに基づいた色が割り当てられます。

3. 色バー:

カラーバーは色マッピングに関連付けられており、色と値の対応関係を示します。
色バーの端には最小値最大値が示され、中央には中間値が示されます。

4. 軸ラベル:

各軸には ‘X’、’Y’、’Z’ のラベルが付いています。
これらのラベルは、それぞれの軸が何を表しているかを示します。
$X$軸と$Y$軸は水平面上にあり、$Z$軸は垂直方向に向かっています。

このグラフは、球面の形状色彩を明確に示し、球面上の各点の高さに基づいてカラーを割り当てることで、視覚的に豊かな情報を提供しています。

バッジャー曲面

バッジャー曲面

バッジャー曲面は、代数幾何学における重要な代数曲面の一つです。

その特徴は以下の通りです。

【方程式】

バッジャー曲面は次の代数方程式で表されます。

$$
x^2(y^2 + z^2 - 1)^3 - y^2z^3 = 0
$$

この方程式は、18世紀のスイスの数学者ミシェル・バッジャーによって発見されました。

【次元と次数】

バッジャー曲面は3次元空間内の代数次数が$4$の代数曲面です。
つまり、座標$(x,y,z)$の4次の項までを含む方程式で表されます。

【特異点】

バッジャー曲面には原点$(0,0,0)$に特異点があります。
この特異点は、二重点と呼ばれる特殊な種類の特異点です。

【対称性】

バッジャー曲面は$x$軸と$y$軸に関して回転対称ですが、$z$軸に関しては対称ではありません。

【位相的性質】

バッジャー曲面は、中心に1つの無限小の穴を持つ連結成分から成る。
この穴の周りには、複雑な形状をした稜線があります。
曲面全体は、自己交差がない連続した面となっています。

【代数幾何学での重要性】

バッジャー曲面は、代数的に決定された曲面の基本的な例として重要視されています。
また、特異点の性質を研究する上でも重要な対象とされています。
複雑な形状ゆえに、可視化の題材としても用いられています。

このように、バッジャー曲面代数幾何の分野で重要な地位を占め、数学的な美しさと興味深い性質を併せ持つ代表的な代数曲面です。

ソースコード

バッジャー曲面をPythonでグラフ化するコードは以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# グリッドを作成
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)

# バッジャー曲面の方程式
Z = (X**2 * (Y**2 + 1)**(3/2) + Y**2 * (X**2 * (Y**2 + 1))**(3/2)) / (X**2 + Y**2 + 1)**(3/2)

# 3D プロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

このコードでは、最初にnumpy を使ってグリッドを作成しています。

次に、バッジャー曲面の方程式を使って、$Z $座標を計算しています。

最後に、matplotlib を使って3D プロットを描画しています。

実行すると、バッジャー曲面の形状が3D グラフィックで表示されます。

[実行結果]

ソースコード解説

ソースコードを詳しく説明します。

1 : 必要なライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

ここでは、NumPy(数値計算ライブラリ)Matplotlib(プロットライブラリ)、および3Dプロット用のAxes3Dモジュールをインポートしています。

2 : グリッドデータの生成

1
2
3
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)

この部分では、NumPylinspaceおよびmeshgrid関数を使って、$-2$から$2$までの範囲で$100$個の点からなるグリッドデータ$X$、$Y$を生成しています。
このグリッドデータは、曲面をプロットする際の基準となります。

3 : バッジャー曲面の方程式による座標値Z計算

1
Z = (X**2 * (Y**2 + 1)**(3/2) + Y**2 * (X**2 * (Y**2 + 1))**(3/2)) / (X**2 + Y**2 + 1)**(3/2)

ここでは、さきほど生成したグリッドデータ$X$、$Y$を使って、バッジャー曲面の方程式に従って$Z$座標値を計算しています。
この計算式は非常に複雑で、代数的な操作が多数含まれています。

4 : Matplotlibを使った3Dプロット

1
2
3
4
5
6
7
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

最後に、Matplotlibを使って3Dプロットを描画しています。
まず、新しい図とその中の3D表示領域を設定しています。
次に、plot_surface関数を使って$X$、$Y$、$Z$データから曲面をプロットし、viridisという色マップを適用しています。
rstride、cstrideパラメータは、プロットの密度を制御するものです。
最後に、各軸にラベルを設定し、show関数で最終的に図を表示しています。

このコードを実行すると、バッジャー曲面の特徴的な形状を描いた3Dプロットが表示されます。
複雑な方程式から生み出された美しい曲面を可視化できます。

グラフ解説

[実行結果]

バッジャー曲面のグラフは、3次元空間内に存在する面の形状を表しています。

その特徴的な形状は以下のようになっています。

1. 中心部分

穴の開いたドーナツ状の形をしています。
この穴は、$xy$平面上の単位円と交差する部分です。

2. 外側の面

滑らかに湾曲した半球状の形をしており、中心の穴を取り囲んでいます。
この面は、外側に向かうにつれて徐々に開き、縁が外側に反り返るような形状になっています。

3. 全体的な形状

上下対称ではなく、$x$軸と$y$軸に対して回転対称な形をしています。

4. 表面

なめらかな部分と尖った稜線が混在しています。
特に中心の穴の周りには、鋭い稜線が集中しています。

5. 曲面の外側の縁

滑らかな曲線からなる開口部になっています。

6. 曲面全体

複雑な形状ながらも滑らかな連続した面で構成されており、自己交差はありません。

この特異な形状は、バッジャー曲面の方程式から導かれる代数的な性質によって生み出されています。

この面は、代数幾何学の分野で重要な研究対象となっており、複雑な構造を持つ代表的な代数曲面の一つとして知られています。

カーディオイド曲線

カーディオイド曲線

カーディオイド曲線は、数学的に興味深い図形のひとつで、心臓の形に似ていることからその名がついています。
以下にカーディオイド曲線の特徴と数学的な性質を説明します。

1. 数学的表現:

カーディオイド曲線の極座標方程式は以下のように表されます:
$$
r = a(1 - \cos(\theta))
$$
ここで、$( r ) $は極座標系における距離、$( \theta ) $は極座標系における角度、$( a ) $は定数です。

2. 形状:

カーディオイド曲線は、原点を中心とする座標系において、放射状に伸びる葉っぱ状の形状をしています。
一般的には外側の葉っぱがより大きく、内側の葉っぱがより小さくなります。

3. 対称性:

カーディオイド曲線は$ ( x ) $軸に対して対称です。
すなわち、$( \theta = 0 ) $および$ ( \theta = \pi ) $のときに曲線は$ ( x ) $軸と交わります。

4. 極限:

カーディオイド曲線は、極限$ ( a \rightarrow 0 ) $のときに原点に収束し、極限$ ( a \rightarrow \infty ) $のときに外側の葉っぱが無限遠方に広がります。

5. 応用:

カーディオイド曲線は数学的な興味の対象としてだけでなく、様々な応用があります。
例えば、物理学工学の問題、またグラフィックデザインアートなどの分野で使われることがあります。

カーディオイド曲線は、その美しい形状や数学的な特性から、多くの人々に愛される図形のひとつです。

ソースコード

Pythonでカーディオイド曲線を解いてグラフ化するコードは以下のようになります:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import matplotlib.pyplot as plt

# パラメータ
a = 1.0

# 角度の範囲
theta = np.linspace(0, 2 * np.pi, 1000)

# カーディオイド曲線の方程式
r = a * (1 - np.cos(theta))

# 極座標から直交座標系に変換
x = r * np.cos(theta)
y = r * np.sin(theta)

# グラフ描画
plt.plot(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Cardioid Curve')
plt.axis('equal')
plt.grid(True)
plt.show()

このコードは、カーディオイド曲線の方程式を解いて、極座標から直交座標系に変換し、結果をグラフ化します。

[実行結果]

ソースコード解説

以下にソースコードの詳細を解説します。

1. ライブラリのインポート:

  • numpymatplotlib.pyplotをインポートします。
    これらのライブラリは、数値計算やグラフ描画のために使用されます。

2. パラメータの設定:

  • aという名前の定数が$1.0$に設定されています。
    これはカーディオイド曲線の定数です。

3. 角度の範囲の生成:

  • np.linspace()関数を使用して、$0$から$(2\pi)$までの範囲を$1000$の等間隔で分割した角度の配列thetaを生成します。

4. カーディオイド曲線の方程式の計算:

  • カーディオイド曲線の極座標方程式$ ( r = a(1 - \cos(\theta)) ) $を使用して、各角度に対する距離$ (r) $を計算します。

5. 極座標から直交座標系への変換:

  • 極座標から直交座標系への変換を行います。
    これにより、各点の$(x)$座標と$(y)$座標が計算されます。

6. グラフの描画:

  • plt.plot()関数を使用して、直交座標系に変換された$(x)$と$(y)$の値をプロットします。
  • plt.xlabel()plt.ylabel()を使用して、それぞれの軸にラベルを設定します。
  • plt.title()を使用して、グラフのタイトルを設定します。
  • plt.axis('equal')を使用して、軸のスケールを等しく設定します。
  • plt.grid(True)を使用して、グリッドを表示します。
  • plt.show()を使用して、グラフを表示します。

これにより、カーディオイド曲線が計算され、直交座標系に変換されてグラフ化されます。

グラフ解説

[実行結果]

このカーディオイド曲線のグラフは、極座標系で表される曲線を直交座標系に変換して描画したものです。

  • $X$軸と$Y$軸は直交座標系を表し、中心が原点になります。
  • カーディオイド曲線は、原点を中心とする座標系において、ある定数$ ( a ) $に対して極座標$ ( r ) $と角度$ ( \theta ) $の関係を表します。
  • グラフ上の曲線は、カーディオイド曲線の各点に対応し、$ ( x ) $軸と$ ( y ) $軸の値を持っています。
  • 曲線の形状は、原点を中心に放射状に伸びる葉っぱ状の形をしています。
  • カーディオイド曲線は、数学的に興味深い図形であり、心臓の形に似ていることから「カーディオイド(心臓状)」という名前がついています。

グラフには、原点を中心にしたカーディオイド曲線が描かれ、$X$軸と$Y$軸の目盛りが表示されています。

また、グリッドが表示され、各点の位置関係が視覚的に把握しやすくなっています。