from sympy import *
init_printing()
記号の宣言
a_x,a_y,a_z,b_x,b_y,b_z,c_x,c_y,c_z,d_x,d_y,d_z=symbols('a_x,a_y,a_z,b_x,b_y,b_z,c_x,c_y,c_z,d_x,d_y,d_z')
# 省略した書き方
a_x,a_y,a_z,b_x,b_y,b_z,c_x,c_y,c_z,d_x,d_y,d_z=symbols('a_x:z,b_x:z,c_x:z,d_x:z')
ベクトルの定義
$\mathbf{a}=(a_x,a_y,a_z)$
$\mathbf{b}=(b_x,b_y,b_z)$
$\mathbf{c}=(c_x,c_y,c_z)$
$\mathbf{d}=(d_x,d_y,d_z)$
a=Matrix([a_x,a_y,a_z])
b=Matrix([b_x,b_y,b_z])
c=Matrix([c_x,c_y,c_z])
d=Matrix([d_x,d_y,d_z])
(a,b,c,d)
美しくないのでちょっと整理します latexの結果をMarkdownで$と$に挟むと\\となってしまいます。これだとうまく数式が表示できません。 さらにprintをつければ\\が\となります。 この方法は「すごい広島 with Python」で教わりました。
n1s=['a','b','c','d']
n2s=[a,b,c,d]
for n1,n2 in zip (n1s,n2s):
str='\mathbf{%s}=' % n1
str=str+latex(n2.T)+'\\\\' #.Tは転置
print(str)
$\mathbf{a}=\left[\begin{matrix}a_{x} & a_{y} & a_{z}\end{matrix}\right]\\ \mathbf{b}=\left[\begin{matrix}b_{x} & b_{y} & b_{z}\end{matrix}\right]\\ \mathbf{c}=\left[\begin{matrix}c_{x} & c_{y} & c_{z}\end{matrix}\right]\\ \mathbf{d}=\left[\begin{matrix}d_{x} & d_{y} & d_{z}\end{matrix}\right]\\ $
ベクトルの内積
$\mathbf{a}\dot{}\mathbf{b}=a_{x} b_{x} + a_{y} b_{y} + a_{z} b_{z}$
a.dot(b)
ベクトルの外積
$\mathbf{a}\times{}\mathbf{b}=
\left[\begin{matrix}a_{y} b_{z} - a_{z} b_{y}\\- a_{x} b_{z} + a_{z} b_{x}\\a_{x} b_{y} - a_{y} b_{x}\end{matrix}\right]$
a.cross(b)
$\mathbf{a}\times{}\mathbf{a}=\mathbf{0}$
a.cross(a)
$(\mathbf{a}\times{}\mathbf{b})\dot{}\mathbf{a}=0$
epandを使って0にしてます
x=(a.cross(b)).dot(a)
(x,expand(x))
$(\mathbf{a}\times{}\mathbf{b})\dot{}\mathbf{b}=0$
x=(a.cross(b)).dot(b)
(x,expand(x))
$\mathbf{a}\dot{}(\mathbf{b}\times{}\mathbf{c})= \mathbf{b}\dot{}(\mathbf{c}\times{}\mathbf{a})= \mathbf{c}\dot{}(\mathbf{a}\times{}\mathbf{b})$
x1=a.dot(b.cross(c))
x2=b.dot(c.cross(a))
x3=c.dot(a.cross(b))
(expand(x1),expand(x2),expand(x3))
expandを使わないと、右辺=左辺とはなりません。
(x1==x2,expand(x1)==expand(x2),expand(x2)==expand(x3))
$(\mathbf{a}\dot{}\mathbf{c})(\mathbf{b}\dot{}\mathbf{d})- (\mathbf{b}\dot{}\mathbf{c})(\mathbf{a}\dot{}\mathbf{d})= (\mathbf{a}\times{}\mathbf{b})\dot{}(\mathbf{c}\times{}\mathbf{d})$
x1=(a.dot(c))*(b.dot(d))-(b.dot(c))*(a.dot(d))
x2=(a.cross(b)).dot(c.cross(d))
(x1,x2,expand(x1),expand(x2))
expand(x1)==expand(x2)
$(\mathbf{a}\times{}\mathbf{b})\dot{}(\mathbf{c}\times{}\mathbf{d})= \left|\mathbf{a}\times{}\mathbf{b}\right|\left|\mathbf{c}\times{}\mathbf{d}\right|\cos{}\theta{} $
$\left(f(x)g(x)\right)'=f'(x)g(x)+f(x)g'(x)$ 関数の積の微分(ライプニッツ則)
$\left(f(g(x))\right)'=f'(g(x))g'(x)$ 合成関数の微分(連鎖律)
reset
from sympy import *
init_printing()
x,f,g=symbols('x,f,g')
eq=f(x)*g(x)
eq1=diff(eq,x,evaluate=False)
eq2=diff(eq,x,evaluate=True)
(eq1,eq2)
str=latex(eq1)+'='+latex(eq2)
str=str.replace('frac','cfrac') #分数を大きく表示する
print(str) # 結果をMarkdown形式後に$結果$で表示させます
$\cfrac{d}{d x}\left(f{\left (x \right )} g{\left (x \right )}\right)=f{\left (x \right )} \cfrac{d}{d x} g{\left (x \right )} + g{\left (x \right )} \cfrac{d}{d x} f{\left (x \right )}$
t,a_x,a_y,a_z,b_x,b_y,b_z=symbols('t,a_x:z,b_x:z')
a=Matrix([a_x(t),a_y(t),a_z(t)])
b=Matrix([b_x(t),b_y(t),b_z(t)])
(a,b)
str='\mathbf{a}='+latex(a.T)+'\\\\'+'\mathbf{b}='+latex(b.T)
print(str)
$\mathbf{a}=\left[\begin{matrix}\operatorname{a_{x}}{\left (t \right )} & \operatorname{a_{y}}{\left (t \right )} & \operatorname{a_{z}}{\left (t \right )}\end{matrix}\right]\\\mathbf{b}=\left[\begin{matrix}\operatorname{b_{x}}{\left (t \right )} & \operatorname{b_{y}}{\left (t \right )} & \operatorname{b_{z}}{\left (t \right )}\end{matrix}\right] $
$\left(a(t)\dot{}b(t)\right)'=a'(t)\dot{}b(t)+a(t)\dot{}b'(t)$
eq1=diff(a.dot(b),evaluate=False)
eq2=diff(a.dot(b),evaluate=True)
eq3=diff(a).dot(b)+a.dot(diff(b))
(eq1,eq2,eq3)
eq2==eq3
$\operatorname{a_{x}}{\left (t \right )} \frac{d}{d t} \operatorname{b_{x}}{\left (t \right )} + \operatorname{a_{y}}{\left (t \right )} \frac{d}{d t} \operatorname{b_{y}}{\left (t \right )} + \operatorname{a_{z}}{\left (t \right )} \frac{d}{d t} \operatorname{b_{z}}{\left (t \right )} + \operatorname{b_{x}}{\left (t \right )} \frac{d}{d t} \operatorname{a_{x}}{\left (t \right )} + \operatorname{b_{y}}{\left (t \right )} \frac{d}{d t} \operatorname{a_{y}}{\left (t \right )} + \operatorname{b_{z}}{\left (t \right )} \frac{d}{d t} \operatorname{a_{z}}{\left (t \right )}$
$\left(a(t)\times{}b(t)\right)'=a'(t)\times{}b(t)+a(t)\times{}b'(t)$
eq1=diff(a.cross(b),evaluate=False)
eq2=diff(a.cross(b),evaluate=True)
eq3=diff(a).cross(b)+a.cross(diff(b))
(eq1,eq2,eq3)
eq2==eq3
連鎖律
$f(x(t),y(t))$,$f(x(t),y(t),z(t))$
の微分
$
\cfrac{df}{dt}=\cfrac{\partial{}f}{\partial{}x}\dot{}\cfrac{dx}{dt}+\cfrac{\partial{}f}{\partial{}y}\dot{}\cfrac{dy}{dt}
$
$
\cfrac{df}{dt}=\cfrac{\partial{}f}{\partial{}x}\dot{}\cfrac{dx}{dt}+\cfrac{\partial{}f}{\partial{}y}\dot{}\cfrac{dy}{dt}+\cfrac{\partial{}f}{\partial{}z}\dot{}\cfrac{dz}{dt}
$
$f(x(u,v),y(u,v)),f(x(u,v),y(u,v),z(u,v))$の$u$による偏微分
$
\cfrac{\partial{}f}{\partial{}u}=\cfrac{\partial{}f}{\partial{}x}\dot{}\cfrac{\partial{}x}{\partial{}u}+
\cfrac{\partial{}f}{\partial{}y}\dot{}\cfrac{\partial{}y}{\partial{}u}\\
\cfrac{\partial{}f}{\partial{}u}=\cfrac{\partial{}f}{\partial{}x}\dot{}\cfrac{\partial{}x}{\partial{}u}+
\cfrac{\partial{}f}{\partial{}y}\dot{}\cfrac{\partial{}y}{\partial{}u}+
\cfrac{\partial{}f}{\partial{}z}\dot{}\cfrac{\partial{}z}{\partial{}u}
$
t=symbols('t')
x=Function('x')(t)
y=Function('y')(t)
f=Function('f')(x,y)
eq1=diff(f,t,evaluate=False)
eq2=diff(f,t,evaluate=True)
(eq1,eq2)
$\xi_1$に$x(t)$、$\xi_2$に$y(t)$を代入しなさいとでます。Latexで消すことにします。
str=latex(eq1)+'='+latex(eq2)
str=str.replace('\\right|_{\\substack{ \\xi_{1}=x{\\left (t \\right )} }}','')
str=str.replace('\\right|_{\\substack{ \\xi_{2}=y{\\left (t \\right )} }}','')
str=str.replace('\\left.','')
str=str.replace('\\xi_{1}','x(t)').replace('\\xi_{2}','y(t)') #代入
str=str.replace('frac','cfrac')
print(str)
$\cfrac{d}{d t} f{\left (x{\left (t \right )},y{\left (t \right )} \right )}=\cfrac{d}{d t} x{\left (t \right )} \cfrac{\partial}{\partial x(t)} f{\left (x(t),y{\left (t \right )} \right )} + \cfrac{d}{d t} y{\left (t \right )} \cfrac{\partial}{\partial y(t)} f{\left (x{\left (t \right )},y(t) \right )} $
reset
from sympy import *
init_printing()
$ x(t)=\cos{t} $
$ y(t)=\cos{t} $
$ f(x,y)=x^2y+2y$
$ \cfrac{df}{dt}=
\cfrac{\partial{f}}{\partial{x}}\cfrac{\partial{x}}{\partial{t}}+
\cfrac{\partial{f}}{\partial{y}}\cfrac{\partial{y}}{\partial{t}}$
であるとき$f(x,y)$の$x(t)$と$y(t)$を$t$の式にして$t$で微分したものと、公式を使って$x$、$y$、$t$で偏微分した結果が一緒であることを示します。
t=symbols('t')
(x,y)=(cos(t),sin(t))
f=x**2*y+2*y
eq1=diff(f,t)
eq2=diff(f,x)*diff(x,t)+diff(f,y)*diff(y,t)
(eq1,eq2,expand(eq2))
[eq1==eq2,eq1==expand(eq2)]
位置$\boldsymbol{x}=(x,y,z)$で$f(\boldsymbol{x})=f(x,y,z)$の値を持つスカラー場に対して、
ベクトル場$\mathrm{grad}f(\boldsymbol{x})$を
$\mathrm{grad}f(\boldsymbol{x})=\left(
\cfrac{\partial{}f(x,y,z)}{\partial{}x}+
\cfrac{\partial{}f(x,y,z)}{\partial{}y}+
\cfrac{\partial{}f(x,y,z)}{\partial{}z}
\right)
=\nabla{}f$
と定めたものを勾配という。
from sympy import *
init_printing()
$f(x,y,z)=e^{x} \cos{\left (y z \right )}$の勾配
x,y,z=symbols('x,y,z')
f=exp(x)*cos(y*z)
f
eq=Matrix([diff(f,x),diff(f,y),diff(f,z)])
eq
str='\\nabla{f}='+latex(eq)
print(str)
$\nabla{f}=\left[\begin{matrix}e^{x} \cos{\left (y z \right )}\\- z e^{x} \sin{\left (y z \right )}\\- y e^{x} \sin{\left (y z \right )}\end{matrix}\right] $
CoordSys3Dを使う場合
from sympy.vector import CoordSys3D
R=CoordSys3D('R')
R.i、R.j、R.kがx,y,z座標のベクトル、R.x、R.y、R.zがx,y,z座標の値となります。 R.i、R.j、R.kの内積は互いにゼロです。
[R.i.dot(R.j),R.j.dot(R.k),R.k.dot(R.i)]
R.i、R.j、R.kの3つのうちの1つの外積は残り1つと同じです。
[R.i.cross(R.j)-R.k,R.j.cross(R.k)-R.i,R.k.cross(R.i)-R.j]
f=exp(R.x)*cos(R.y*R.z)
f
from sympy.vector import gradient
eq=gradient(f)
eq
$\mathbf{\hat{i}_{R}}$、$\mathbf{\hat{j}_{R}}$、$\mathbf{\hat{k}_{R}}$でなくベクトル風にしてみます。
eq1=(eq.coeff(R.i),eq.coeff(R.j),eq.coeff(R.k))
eq1
str='\\nabla{f}='+latex(eq1)
str=str.replace('\\mathbf{{x}_{R}}','x').replace('\\mathbf{{y}_{R}}','y').replace('\\mathbf{{z}_{R}}','z')
print(str)
$\nabla{f}=\left ( e^{x} \cos{\left (y z \right )}, \quad - e^{x} \sin{\left (y z \right )} z, \quad - e^{x} \sin{\left (y z \right )} y\right )$
$\sin(yz)z$は$z\sin(yz)$です。
$n$次元の勾配
$\nabla{}f=\left(
\cfrac{\partial{}f(x_1,x_2,\cdots,x_n)}{\partial{x_1}},
\cfrac{\partial{}f(x_1,x_2,\cdots,x_n)}{\partial{x_2}},
\cdots,
\cfrac{\partial{}f(x_1,x_2,\cdots,x_n)}{\partial{x_n}},
\right)$
二次元スカラー場$f(x,y)$に対して
$\nabla{f}$と等高線$f=C$は直交する
$f(x(t),y(t))=C$を微分
$\cfrac{\partial{}f\left(x(t),y(t)\right)}{\partial{}x}\dot{}\cfrac{dx(t)}{dt}+
\cfrac{\partial{}f\left(x(t),y(t)\right)}{\partial{}y}\dot{}\cfrac{dy(t)}{dt}=0\\
\nabla{}f\left(x(t),y(t)\right)\dot{}f\left(x(t),y(t)\right)=0$
位置$\boldsymbol{x}=(x,y,z)$において、ベクトル
$\boldsymbol{A}(x,y,z)=\left(A_x(x,y,z),A_y(x,y,z),A_z(x,y,z)\right)$
を対応させるベクトル場に対して、スカラー場$\mathrm{div}\boldsymbol{A}(\boldsymbol{x})$を
$\mathrm{div}\boldsymbol{A}(\boldsymbol{x})=\cfrac{\partial{}A_x}{\partial{}x}+
\cfrac{\partial{}A_y}{\partial{}y}+\cfrac{\partial{}A_z}{\partial{}z}=
\nabla{}\dot{}\boldsymbol{A}(\boldsymbol{x})
$
と定めたものを発散という
reset
from sympy import *
init_printing()
$\mathbf{A}=\left[\begin{matrix}\operatorname{A_{x}}{\left (x,y,z \right )}\\\operatorname{A_{y}}{\left (x,y,z \right )}\\\operatorname{A_{z}}{\left (x,y,z \right )}\end{matrix}\right]$
A_x,A_y,A_z,x,y,z=symbols('A_x,A_y,A_z,x,y,z')
A=Matrix([A_x(x,y,z),A_y(x,y,z),A_z(x,y,z)])
A
$\nabla{}\dot{}\mathbf{A}=\frac{\partial}{\partial x} \operatorname{A_{x}}{\left (x,y,z \right )} + \frac{\partial}{\partial y} \operatorname{A_{y}}{\left (x,y,z \right )} + \frac{\partial}{\partial z} \operatorname{A_{z}}{\left (x,y,z \right )}$の計算
diff(A_x,x)+diff(A_y,y)+diff(A_z,z)
このままでは微分にならないので工夫します。
Matrix([A[0],A[1],A[2]])
diff(A[0],x)+diff(A[1],y)+diff(A[2],z)
CoordSys3Dを使う場合
from sympy.vector import CoordSys3D,divergence
R=CoordSys3D('R')
A_i,A_j,A_k=symbols('A_i,A_y,A_z')
A=A_x(R.x,R.y,R.z)*R.i+A_y(R.x,R.y,R.z)*R.j+A_z(R.x,R.y,R.z)*R.k
A
divergence(A)
str=latex(divergence(A))
str=str.replace('\\xi_{2}','\\mathbf{{x}_{R}}',3).replace('\\xi_{2}','\\mathbf{{y}_{R}}',3).replace('\\xi_{2}','\\mathbf{{z}_{R}}',3)
str=str.replace('\\mathbf{{x}_{R}}=\\mathbf{{x}_{R}}','').replace('\\mathbf{{y}_{R}}=\\mathbf{{y}_{R}}','').replace('\\mathbf{{z}_{R}}=\\mathbf{{z}_{R}}','')
str=str.replace('\\left.','').replace('\\right|_{\\substack{ }}','').replace('frac','cfrac')
print(str)
$\xi_2$を$\mathbf{X_R}$,$\mathbf{Y_R}$,$\mathbf{Z_R}$に置き換えると
$
\cfrac{\partial}{\partial \mathbf{{x}_{R}}} \operatorname{A_{x}}{\left (\mathbf{{x}_{R}},\mathbf{{y}_{R}},\mathbf{{z}_{R}} \right )} + \cfrac{\partial}{\partial \mathbf{{y}_{R}}} \operatorname{A_{y}}{\left (\mathbf{{x}_{R}},\mathbf{{y}_{R}},\mathbf{{z}_{R}} \right )} + \cfrac{\partial}{\partial \mathbf{{z}_{R}}} \operatorname{A_{z}}{\left (\mathbf{{x}_{R}},\mathbf{{y}_{R}},\mathbf{{z}_{R}} \right )}
$
$\xi_2$を$\mathbf{X_R}$,$\mathbf{Y_R}$,$\mathbf{Z_R}$に置き換えると
$\cfrac{\partial}{\partial\mathbf{X_R}}A_x(\mathbf{X_R},\mathbf{Y_R},\mathbf{Z_R})+
\cfrac{\partial}{\partial\mathbf{Y_R}}A_y(\mathbf{X_R},\mathbf{Y_R},\mathbf{Z_R})+
\cfrac{\partial}{\partial\mathbf{Z_R}}A_z(\mathbf{X_R},\mathbf{Y_R},\mathbf{Z_R})
$
となります。
見やすくするために${\left (\mathbf{{x}_{R}},\mathbf{{y}_{R}},\mathbf{{z}_{R}} \right )}$を無しにします。
str=str.replace('{\\left (\\mathbf{{x}_{R}},\\mathbf{{y}_{R}},\\mathbf{{z}_{R}} \\right )}','')
print(str)
$ \nabla{}\dot{}\mathbf{A}= \cfrac{\partial}{\partial \mathbf{{x}_{R}}} \operatorname{A_{x}} + \cfrac{\partial}{\partial \mathbf{{y}_{R}}} \operatorname{A_{y}} + \cfrac{\partial}{\partial \mathbf{{z}_{R}}} \operatorname{A_{z}} $
保存則
密度$\rho(\boldsymbol{x})$が一定であれば
$\cfrac{\partial\rho(\boldsymbol{x})}{\partial{t}}+\nabla\dot{}\boldsymbol{A}(\boldsymbol{x})=0
$
位置$\boldsymbol{x}=(x,y,z)$において
$\boldsymbol{A}(x,y,z)=\left(A_x(x,y,z),A_y(x,y,z),A_z(x,y,z)\right)$
と与えられるベクトル場に対して、ベクトル場$\mathrm{rot}\boldsymbol{A}(\boldsymbol{x})$を
$\mathrm{rot}\boldsymbol{A}(\boldsymbol{x})=\left(
\cfrac{\partial A_z}{\partial y}-\cfrac{\partial A_y}{\partial z},
\cfrac{\partial A_x}{\partial z}-\cfrac{\partial A_z}{\partial x},
\cfrac{\partial A_y}{\partial x}-\cfrac{\partial A_x}{\partial y}
\right)=\nabla \times \boldsymbol{A}(\boldsymbol{x})
$
と定めたものを$\boldsymbol{A}(\boldsymbol{x})$の回転という
reset
from sympy import *
init_printing()
A_x,A_y,A_z,x,y,z=symbols('A_x,A_y,A_z,x,y,z')
A=Matrix([A_x(x,y,z),A_y(x,y,z),A_z(x,y,z)])
A
$\nabla{}\times{}\mathbf{A}(\mathbf{x})$の計算
diff(A_z,y)にするとゼロになるので、diff(A[2],y)などとします。
rotA=Matrix([diff(A[2],y)-diff(A[1],z),diff(A[0],z)-diff(A[2],x),diff(A[1],x)-diff(A[0],y)])
eq=rotA
eq
str='\\nabla{}\\times{}\\mathbf{A}(\\mathbf{x})='+latex(eq).replace('frac','cfrac')
print(str)
$ \nabla{}\times{}\mathbf{A}(\mathbf{x})=\left[\begin{matrix}- \cfrac{\partial}{\partial z} \operatorname{A_{y}}{\left (x,y,z \right )} + \cfrac{\partial}{\partial y} \operatorname{A_{z}}{\left (x,y,z \right )}\\\cfrac{\partial}{\partial z} \operatorname{A_{x}}{\left (x,y,z \right )} - \cfrac{\partial}{\partial x} \operatorname{A_{z}}{\left (x,y,z \right )}\\- \cfrac{\partial}{\partial y} \operatorname{A_{x}}{\left (x,y,z \right )} + \cfrac{\partial}{\partial x} \operatorname{A_{y}}{\left (x,y,z \right )}\end{matrix}\right] $
CoordSys3Dを使う場合
from sympy.vector import CoordSys3D,curl
R=CoordSys3D('R')
A=A_x(R.x,R.y,R.z)*R.i+A_y(R.x,R.y,R.z)*R.j+A_z(R.x,R.y,R.z)*R.k
A
curl(A)
$\xi_2$を$\mathbf{X_R}$,$\mathbf{Y_R}$,$\mathbf{Z_R}$に置き換え、 見やすくするために${\left (\mathbf{{x}_{R}},\mathbf{{y}_{R}},\mathbf{{z}_{R}} \right )}$を無しにします。
str=latex(curl(A))
str=str.replace('\\xi_{2}','\\mathbf{{z}_{R}}',3).replace('\\xi_{2}','\\mathbf{{y}_{R}}',3).replace('\\xi_{2}','\\mathbf{{z}_{R}}',3)
str=str.replace('\\xi_{2}','\\mathbf{{x}_{R}}',3).replace('\\xi_{2}','\\mathbf{{y}_{R}}',3).replace('\\xi_{2}','\\mathbf{{x}_{R}}',3)
str=str.replace('\\mathbf{{x}_{R}}=\\mathbf{{x}_{R}}','').replace('\\mathbf{{y}_{R}}=\\mathbf{{y}_{R}}','').replace('\\mathbf{{z}_{R}}=\\mathbf{{z}_{R}}','')
str=str.replace('{\\left (\\mathbf{{x}_{R}},\\mathbf{{y}_{R}},\\mathbf{{z}_{R}} \\right )}','')
str=str.replace('\\left.','').replace('\\right|_{\\substack{ }}','').replace('frac','cfrac')
str=str.replace('(','\\left(').replace(')','\\right)')
print(str)
$ \left(- \cfrac{\partial}{\partial \mathbf{{z}_{R}}} \operatorname{A_{y}} + \cfrac{\partial}{\partial \mathbf{{y}_{R}}} \operatorname{A_{z}} \right)\mathbf{\hat{i}_{R}} + \left( \cfrac{\partial}{\partial \mathbf{{z}_{R}}} \operatorname{A_{x}} - \cfrac{\partial}{\partial \mathbf{{x}_{R}}} \operatorname{A_{z}} \right)\mathbf{\hat{j}_{R}} + \left(- \cfrac{\partial}{\partial \mathbf{{y}_{R}}} \operatorname{A_{x}} + \cfrac{\partial}{\partial \mathbf{{x}_{R}}} \operatorname{A_{y}} \right)\mathbf{\hat{k}_{R}} $
$xyz$座標でのスカラー場$f(x,y,z)$に関して、スカラー場$\Delta{}f$を
$\Delta{}f=\cfrac{\partial{}^2 f(x,y,z)}{\partial{x^2}}+\cfrac{\partial{}^2 f(x,y,z)}{\partial{y^2}}+
\cfrac{\partial{}^2 f(x,y,z)}{\partial{z^2}}$
と定める。$\Delta{f}$をラプラシアンという。
reset
from sympy import *
init_printing()
f,x,y,z=symbols('f,x,y,z')
$\mathrm{div}(\mathrm{grad} f)=\nabla{}\dot{}(\nabla{f})=\nabla\dot{}\left(\cfrac{\partial{f}}{\partial{x}},
\cfrac{\partial{f}}{\partial{y}},\cfrac{\partial{f}}{\partial{z}}\right)$
$=\cfrac{\partial^2{f}}{\partial{x^2}}+\cfrac{\partial^2{f}}{\partial{y^2}}+\cfrac{\partial^2{f}}{\partial{z^2}}=
\nabla{}^2 f=\Delta{f}$
になるのを見ていきます。
gradf=[diff(f(x,y,z),x),diff(f(x,y,z),y),diff(f(x,y,z),z)]
gradf
divgradf=diff(gradf[0],x)+diff(gradf[1],y)+diff(gradf[2],z)
divgradf
CoordSys3Dを使う場合
from sympy.vector import CoordSys3D,gradient,divergence
R=CoordSys3D('R')
eq=divergence(gradient(f(R.x,R.y,R.z)))
eq
見やすくします。
str='\\nabla{}^{2}f='+latex(eq)
str=str.replace('\\xi_{2}','\\mathbf{{x}_{R}}',3).replace('\\xi_{2}','\\mathbf{{y}_{R}}',3).replace('\\xi_{2}','\\mathbf{{z}_{R}}',3)
str=str.replace('\\mathbf{{x}_{R}}=\\mathbf{{x}_{R}}','').replace('\\mathbf{{y}_{R}}=\\mathbf{{y}_{R}}','').replace('\\mathbf{{z}_{R}}=\\mathbf{{z}_{R}}','')
str=str.replace('{\\left (\\mathbf{{x}_{R}},\\mathbf{{y}_{R}},\\mathbf{{z}_{R}} \\right )}','')
str=str.replace('\\left.','').replace('\\right|_{\\substack{ }}','').replace('frac','cfrac')
# str=str.replace('(','\\left(').replace(')','\\right)')
print(str)
$\nabla{}^{2}f= \cfrac{\partial^{2}}{\partial \mathbf{{x}_{R}}^{2}} f + \cfrac{\partial^{2}}{\partial \mathbf{{y}_{R}}^{2}} f + \cfrac{\partial^{2}}{\partial \mathbf{{z}_{R}}^{2}} f $