2つの円形コイル間の相互インダクタンス(mutual inductance)¶
相互インダクタンス$M$は, \begin{gather} M=\frac{\mu}{4\pi} f \sqrt{ab} \end{gather} ここで, \begin{gather} f \equiv - 4 \pi \left\{ \left( k-\frac{2}{k} \right) K(k) + \frac{2}{k} E(k) \right\} \end{gather} $K(k)$は,$k$を母数とする第1種完全だ円積分を示し, \begin{gather} K(k) = \int _0^{\frac{\pi}{2}} \frac{d\varphi }{\sqrt{1- k^2 \sin ^2 \varphi }}\\ \end{gather} また,$E(k)$は,$k$を母数とする第2種完全だ円積分を示し, \begin{gather} E(k) = \int _0^{\frac{\pi}{2}} \sqrt{1- k^2 \sin ^2 \varphi } \ d\varphi \end{gather} $k \to 1$のときの相互インダクタンス$M$は次のようになる. \begin{gather} \lim _{k \to 1} M = \mu a \left\{ \log \left( \frac{8a}{d'} \right) -2 \right\} \end{gather} ただし,$a$,$b$はコイルの半径,$d$はコイル間の距離,$\mu$は媒質の透磁率を示し, \begin{gather} k^2 \equiv \frac{4ab}{(a+b)^2+d^2} = 1- \frac{(a-b)^2+d^2}{(a+b)^2+d^2}\\ d'^2 \equiv (a-b)^2+d^2 \end{gather}
import numpy as np
import scipy as sp
from scipy import integrate # 数値積分
from scipy.special import ellipk,ellipe # 楕円積分(完全)関数
import matplotlib.pyplot as plt
import scienceplots
plt.style.use(['science', 'notebook'])
np.set_printoptions(precision=4)
#plt.rcParams['font.family'] = 'Times New Roman' # font familyの設定
plt.rcParams['font.family'] = 'serif' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'cm' # math fontの設定
def table(*args): # 表形式で数値を表示する関数
n1, n2 = np.shape(args)
for i in range(n2):
[print(f'{args[j][i]:8.3f}',end=' ') for j in range(n1)]
print("")
return
a, b = 1.0, 1.0 # 2つの円形コイルの半径
d = 0.001 # 2つの円形コイル間の垂直距離
a,b,d
(1.0, 1.0, 0.001)
def mutual_inductance_between_circular_coils(a,b,d): # 厳密解による相互インダクタンスの計算
k2 = 4*a*b/((a+b)**2+d**2)
k = np.sqrt(k2)
K = ellipk(k2)# 第一種完全楕円積分
E = ellipe(k2)# 第二種完全楕円積分
f = -4*np.pi*((k-2/k)*K+2/k*E)
M = f*np.sqrt(a*b)*1.0e-7 # 相互インダクタンス
return M,K,E
mutual_inductance_between_circular_coils(a,b,d)
(8.780372519335626e-06, 8.987197444802966, 1.0000010608994458)
def quad_ellipk(k2): # 数値積分による第一種完全楕円積分の計算
kd2 = 1-k2
kd = np.sqrt(kd2)
def func(phi,kd):
return 1/np.sqrt(np.cos(phi)**2+kd**2*np.sin(phi)**2)
K_ = integrate.quad(func, 0, np.pi/2, args=(kd,)) # 1次元積分(適応積分), ガウスの数値積分 (Gaussian quadrature)
return K_
def quad_ellipe(k2): # 数値積分による第ニ種完全楕円積分の計算
kd2 = 1-k2
kd = np.sqrt(kd2)
def func(phi,kd):
return np.sqrt(np.cos(phi)**2+kd**2*np.sin(phi)**2)
E_ = integrate.quad(func, 0, np.pi/2, args=(kd,)) # 1次元積分(適応積分), ガウスの数値積分 (Gaussian quadrature)
return E_
k2 = 4*a*b/((a+b)**2+d**2)
k = np.sqrt(k2)
quad_ellipk(k),quad_ellipe(k)
((9.333770765005077, 6.682712031240529e-12), (1.0000005521114967, 3.2392616589995877e-10))
def mutual_inductance_between_circular_coils_quad(a,b,d): # 数値積分版による相互インダクタンス
k2 = 4*a*b/((a+b)**2+d**2)
k = np.sqrt(k2)
K_ = quad_ellipk(k2)# 第一種完全楕円積分
E_ = quad_ellipe(k2)# 第二種完全楕円積分
f = -4*np.pi*((k-2/k)*K_[0]+2/k*E_[0])
M = f*np.sqrt(a*b)*1.0e-7
return M,K_,E_
mutual_inductance_between_circular_coils_quad(a,b,d)
(8.780372519334475e-06, (8.987197444802678, 6.468827265471519e-09), (1.0000010608997592, 3.048482360731748e-09))
def mutual_inductance_between_circular_coils_approximation(a,b,d): # 近似式による相互インダクタンス
d_d2 = (a-b)**2+d**2
d_d = np.sqrt(d_d2)
mu = 4*np.pi*1.0e-7
M = (np.log(8*a/d_d)-2)*a*mu
return M
mutual_inductance_between_circular_coils_approximation(a,b,d)
8.780370480391046e-06
mutual_inductance_between_circular_coils(a,b,d)[0]
8.780372519335626e-06
# 半径 b を変化させたときの相互インダクタンス比較
a = 1.0
n_plot = 101
b = np.linspace(1.0,2.0,n_plot)
d = 0.01
m_excat = mutual_inductance_between_circular_coils(a,b,d)[0] # 厳密解
m_appro = mutual_inductance_between_circular_coils_approximation(a,b,d) # 近似解
m_quad = np.empty(n_plot) # 数値積分による計算
for i in range(n_plot):
m_quad[i] = mutual_inductance_between_circular_coils_quad(a,b[i],d)[0]
k2 = 4*a*b/((a+b)**2+d**2)
k = np.sqrt(k2)
min(k),max(k)
(0.9428038037977028, 0.9999875002343701)
# bの変化に対するMの比較
fig = plt.figure() # グラフ領域の作成
plt.grid(color = "gray", linestyle="--")
plt.plot(b,m_excat,label=r'exact $M=\frac{\mu}{4 \pi} f \sqrt{ab}$') # 厳密解
plt.plot(b,m_quad,'--', label=r'quad $M=\frac{\mu}{4 \pi} f \sqrt{ab}$') # 数値積分
plt.plot(b,m_appro,label=r'approximate $M = \mu a \{ \log ( \frac{8a}{d^\prime} )-2 \}$') # 近似解
plt.xlim(1.0, max(b))
plt.xlabel(r"$b/a \ (a=1)$") # x軸のラベル設定
plt.ylabel("Mutual Inductance $M$") # y軸のラベル設定
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True, fontsize=12)
fig.savefig('p3_emt_M_comparison_1.pdf')
# 距離d を変化させたときの相互インダクタンス比較
a = 1.0
b = 1.0
d = np.linspace(0.001,2.0,n_plot)
m_excat = mutual_inductance_between_circular_coils(a,b,d)[0]
m_appro = mutual_inductance_between_circular_coils_approximation(a,b,d)
for i in range(n_plot):
m_quad[i] = mutual_inductance_between_circular_coils_quad(a,b,d[i])[0]
k2 = 4*a*b/((a+b)**2+d**2)
k = np.sqrt(k2)
min(k),max(k)
(0.7071067811865476, 0.9999998750000234)
# dの変化に対するMの比較
fig = plt.figure() # グラフ領域の作成
plt.grid(color = "gray", linestyle="--")
plt.plot(d,m_excat,label='exact')
plt.plot(d,m_quad,'--',label='quad')
plt.plot(d,m_appro,label='approximate')
plt.xlim(0, max(d))
#plt.ylim(0.0, 1.0)
plt.xlabel(r"$d \ (a=b=1)$") # x軸のラベル設定
plt.ylabel("Mutual Inductance $M$") # y軸のラベル設定
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True, fontsize=12)
fig.savefig('p3_emt_M_comparison_2.pdf')