[Python][Physics]

[Python][Physics]#15 자기장 발산식 '∇⋅B=0' 의 이해(시각화)

루크1983 2023. 5. 7. 23:42

 

수식: 

 

 

1. 의미: 주어진 식이 나타내는 것은 벡터장에서의 발산이 0임을 나타내는 것입니다.

발산이란 벡터장에서 벡터가 어떻게 변화하는지를 나타내는 개념으로, 벡터장의 발산이 0이 되면 벡터장에서 변화가 없다는 것을 의미합니다. 이는 물리학에서 중요한 법칙 중 하나인 가우스 법칙의 일부분으로, 자기장에 대한 맥스웰 방정식 중 하나입니다.

자기장은 전자기파 전파, 전자의 운동 및 상호작용 등의 문제에서 매우 중요한 역할을 합니다. 따라서, 이 식은 전자기학에서 매우 중요한 역할을 하며, 자기장 분석 및 예측 등의 다양한 문제를 다루는 데 사용됩니다.

 

 

 

2. 수식 기호별 의미

  • ∇ : 나블라(Nabla) 연산자로, 벡터함수를 스칼라 함수로 미분하는 연산자입니다.
  • ⋅ : 벡터의 내적(dot product) 연산자입니다.
  • B : 자기장 벡터를 나타내는 벡터함수입니다.
  • = : 우변과 좌변이 같음을 나타내는 등호입니다.
  • 0 : 발산이 0임을 나타내는 상수입니다.

3. 활용방안 위의 식은 자기장에 대한 맥스웰 방정식 중 하나로, 전자기학에서 매우 중요한 식 중 하나입니다. 이 식을 이용하여 자기장의 발산을 분석하거나, 자기장이 상호작용하는 물체들의 운동을 예측하는 등의 활용이 가능합니다. 예를 들어, 자기장이 있는 공간에서 전자를 운동시켜 전자의 궤적을 예측하는 등의 문제에 이용될 수 있습니다. 또한, 자기장이 분포하는 공간에서의 전자기파 전파 현상을 연구하는데도 이 식을 이용할 수 있습니다.

 

 1) 자기장 분석: 자기장은 전자기파 전파, 전자의 운동 및 상호작용 등의 문제에서 매우 중요한 역할을 합니다. 이 때, 자기장의 분포를 파악하고 분석하기 위해서는 벡터장에서의 발산을 계산할 수 있어야 합니다. 이를 위해 주어진 식 ∇⋅B=0을 이용하여 자기장 분석을 수행할 수 있습니다. 자기장 분석은 자기장이 발생하는 원인과 특성 등을 파악하는 것으로, 전자기파 전파, 전자의 운동 및 상호작용 등의 문제를 다루는 데 중요한 역할을 합니다.

 

 2) 전자의 궤적 예측: 자기장은 전자의 운동을 제어하거나 굴절시키는 등의 역할을 합니다. 따라서, 자기장이 있는 공간에서 전자의 궤적을 예측하기 위해서는 자기장 분석이 필요합니다. 자기장 분석을 통해 얻은 정보를 바탕으로, 전자가 운동하는 공간에서 자기장이 어떻게 작용하는지를 파악하고, 이를 바탕으로 전자의 운동을 예측할 수 있습니다. 이를 통해 자기장이 발생하는 전자기파 전파, 전자기장에서의 전하운동 등의 문제를 다룰 수 있습니다.

 

 3) 전자기파 전파 현상 연구: 전자기파 전파는 자기장이 발생하는 공간에서 전자가 운동할 때 발생하는 현상으로, 전자기학에서 중요한 문제 중 하나입니다. 전자기파 전파 현상을 연구하기 위해서는 자기장 분석이 필요합니다. 자기장 분석을 통해 얻은 정보를 바탕으로, 전자가 운동하는 공간에서 자기장이 어떻게 작용하는지를 파악하고, 이를 바탕으로 전자기파 전파 현상을 연구할 수 있습니다. 이를 통해 전파의 성질, 전파의 전달 방식 등을 이해할 수 있습니다

 

4, Code: 

import numpy as np
from mayavi import mlab
import matplotlib.pyplot as plt

# Define the size of the vector field
n = 20
x, y, z = np.linspace(-1, 1, n), np.linspace(-1, 1, n), np.linspace(-1, 1, n)
X, Y, Z = np.meshgrid(x, y, z)

# Generate a random magnetic field vector
Bx, By, Bz = np.random.rand(n, n, n), np.random.rand(n, n, n), np.random.rand(n, n, n)

# Calculate the magnitude of the vector field
B = np.sqrt(Bx**2 + By**2 + Bz**2)

# Calculate the divergence of the vector field
dBx_dx, _, _ = np.gradient(Bx, x[1]-x[0], y[1]-y[0], z[1]-z[0])
_, dBy_dy, _ = np.gradient(By, x[1]-x[0], y[1]-y[0], z[1]-z[0])
_, _, dBz_dz = np.gradient(Bz, x[1]-x[0], y[1]-y[0], z[1]-z[0])
divB = dBx_dx + dBy_dy + dBz_dz

# Visualize the magnetic field vectors as arrows
mlab.quiver3d(X, Y, Z, Bx, By, Bz, mode='arrow', scale_factor=0.2)

# Visualize the divergence of the magnetic field vectors using colors
vol = mlab.pipeline.volume(mlab.pipeline.scalar_field(divB))
colormap = plt.get_cmap('RdYlBu')
vol.module_manager.scalar_lut_manager.lut.table = (255*colormap(np.arange(256))).astype('int32')

# Set the title of the plot
mlab.title('Visualization of $\\nabla \\cdot \\mathbf{B} = 0$')

mlab.show()

 

5. Code 설명 및 결과:

이 코드는 3차원 자기장 벡터장을 시각화하고, 벡터장의 발산이 0인 영역을 색으로 표시하는 그래프를 생성합니다.

자기장 벡터는 3차원 공간에서 각 점마다 x, y, z 성분을 가지는 화살표로 나타낼 수 있습니다. 이 코드에서는 ax.quiver 함수를 사용하여 벡터장의 각 점에서의 자기장 벡터를 화살표로 표시합니다. Bx_norm, By_norm, Bz_norm 변수는 각 좌표에서의 자기장 벡터의 x, y, z 성분을 벡터의 크기로 나눈 값으로, ax.quiver 함수의 X, Y, Z 인자는 x, y, z 좌표를 가지는 그리드를 나타냅니다. length 인자는 각 화살표의 길이를 나타내며, normalize 인자는 벡터의 크기를 정규화할지 여부를 결정합니다.

발산이란 벡터장에서 일어나는 변화의 양을 나타내는 개념입니다. 자기장 벡터장의 발산이 0이라는 것은 벡터장에서의 변화가 없다는 것을 의미합니다. 이 코드에서는 np.gradient 함수를 사용하여 각 좌표에서의 자기장 벡터의 x, y, z 성분에 대한 미분 값을 구하고, 이들을 더하여 벡터장의 발산을 구합니다.

divB_normalized 변수는 발산값의 최소값과 최대값을 이용하여 0과 1사이의 값으로 정규화한 배열입니다. 이 값들은 색상 맵(plt.cm.RdYlBu)을 사용하여 색상으로 변환됩니다. 이 색상 맵은 빨간색, 노란색, 파란색으로 이루어져 있으며, 값이 작을수록 빨간색, 값이 클수록 파란색으로 표시됩니다.

ax.scatter 함수는 발산값이 0인 영역의 좌표를 입력받아, 해당 좌표에 점을 찍고, 이 점의 색상을 colors 배열에 저장된 값으로 지정합니다. 따라서 발산이 0인 영역은 해당하는 좌표의 점이 색상으로 표시되어 나타납니다.

이렇게 생성된 그래프는 3차원 공간에서의 자기장 벡터장의 모습을 시각적으로 보여주고, 발산이 0인 영역을 표시하여 벡터장의 특성을 분석하는 데 사용될 수 있습니다.