格林函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章典型方程及其解法
第四节格林函数法
1 格林公式
在电磁学中我们学过两个定理:高斯定理和安培环路定理,数学上称为奥-高公式和司托克斯公式,它们分别把体积分化为面积分和把面积分化为线积分。物理上其意义是用矢量场的通量与环量来解释,然而,它们更为重要的数学物理思想是边界的信息决定了内部的信息。高斯定
理 (2-4.1)
安培环路定理 (2-4.2)
以上规律对所有矢量场都适用,现在我们利用两个标量函数和构造一个矢量场,最简单的方
法是取其中一个函数的梯度与另一个函数的乘积,于是我们能得到两个矢量场和
,分别对其使用高斯定理有
(2-4.3)
(2-4.4)
将体积分中的散度展开得
或 (2-4.5)
称为第一格林公式;
同理可得 (2-4.6)
两式相减得
(2-4.7)
称为第二格林公式。
利用格林公式我们依据边界面上的信息来求解拉普拉斯方程,选取积分体域为,
其中为以有点源为心,为半径的球体,即为挖去点源的无源空间。
取,,显然
对于,在域中,如果,则第二格林公式左方体积分为零,
剩下右边在两个边界面和上的积分:
在上 (2-4.8)
(2-4.9)
所以 (2-4.10)
其中,是的界面。
一般地
对于二维情况也有相应的格林公式,取二维拉普拉斯方程的解,
,,则以为心挖去半径的圆面,是该圆面的边
界围线,在域中,如果则
在上
所以 (2-4.11)
以上求解方法表明,我们借助一个满足拉普拉斯方程的点源函数,利用格林公式边界决定内
部的思想,能求解关于另一个函数的定解问题。
2 格林函数
我们定义:
定解问题
的解是狄利克雷问题
的格林函数。
用格林函数直接可表示解
(2-4.11)
由此看来,格林函数法就是把在域中求解的问题,转变成在域中求解格林函数
的问题。
一般域的格林函数不容易求解,利用镜像法可求半空间域和球体域的格林函数。
(1)半空间域的格林函数
静电学中,一点电荷放在无限大真空中,该真空置入无限大平面边界的半空间金属导体(),
要求解真空中各点的电势的问题即等同于求半空间域的格林函数。设导体表面()及整体
电势为零,对应,点电荷的位置为,于是由镜像法得
(2-4.12)
(2)球体域的格林函数
(2-4.13) 其中,
(3)二维上半平面域的格林函数
(2-4.14)
(4)二维圆域的格林函数
(2-4.15)
3 应用举例
例 1 圆域上格林函数的直接应用在半径为的圆外,距圆心处有一电量为的点电荷,求电场的分布。解:可归结为求定解问
题
得解 (2-4.16)
于是由得
, (2-4.17)
其中
下面是借助镜像法并用计算机绘制的电场线分布图
参考源程序
float EE,FF, A,B=100,I,x,y,z,a,d,t=0.12,S,r,r1,r2,dt,Ey,Ez,E,PI=3.1415926; float b,c;
static Point3f q[2],q1[2],q2[2],q3[2],O[3],w;
Orient dir;
int i,j,n;
Color4f color[200],color1;
dir.phi=90;dir.theta=0;
A=P_omega; b=V; c=X*X/b;
S=P_radius; d=(b-c)/2;
w.x=1;w.y=0;w.z=-d-c;
glt::SetLineWidth(2);
for(j=0;j { I=2*PI*j/int(4*A); z=d+S*cos(I)/2; y=S*sin(I)/2; for(i=0;i<200;i++) { wiz::Assign(color[i], 0,0,0,1); if(I!=PI) { r1=sqrt(y*y+(d-z)*(d-z)); r2=sqrt(y*y+(d+z)*(d+z)); r=sqrt(y*y+(z+d+c)*(z+d+c)); Ez=B*((z-d)/(r1*r1*r1)-X*(z+d)/(r2*r2*r2)/b); Ey=B*y*(1/(r1*r1*r1)-X/(r2*r2*r2)/b); E=sqrt(Ez*Ez+Ey*Ey); dt=0.9/E; q[1].x=0; q[1].y=y; q[1].z=z; } if((i>0)&&(r>X)) draw::Line(q[0],q[1],color[i]); q[0]=q[1]; z+=Ez*dt; y+=Ey*dt; } } for(j=-int(2*A);j { I=2*PI*j/int(4*A); z=d+S*cos(I)/2; y=S*sin(I)/2; for(i=0;i<200;i++) { wiz::Assign(color[i], 0,0,0,1); if(I!=PI) { r1=sqrt(y*y+(d-z)*(d-z)); r2=sqrt(y*y+(d+z)*(d+z)); r=sqrt(y*y+(-z+d+c)*(-z+d+c)); Ez=B*((z-d)/(r1*r1*r1)-X*(z+d)/(r2*r2*r2)/b); Ey=B*y*(1/(r1*r1*r1)-X/(r2*r2*r2)/b); E=sqrt(Ez*Ez+Ey*Ey); dt=0.4/E; q1[1].x=0; q1[1].y=y; q1[1].z=-z; } if((i>0)&&(j<1)&&(j>-1)&&(r>X)) draw::Line(q1[0],q1[1],color[i]); q1[0]=q1[1]; z+=Ez*dt; y+=Ey*dt; } } glt::EnableLight(); wiz::Assign(color1,1,0.35,0.35,1); wiz::Assign(O[1],0,0,d); wiz::Assign(O[2],0,0,-d+X-c); draw::Balls(1,O+1, 2*S, 32, 32, color1); glt::DisableLight(); draw::Line(O[1],O[2],color[50]);