登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
能帮忙看看我这easy的程序么?为什么出来的 ..
发帖
回复
660
阅读
0
回复
[
求助
]
能帮忙看看我这easy的程序么?为什么出来的图总是发散的?
离线
lovie
lovie
UID :74467
注册:
2011-03-25
登录:
2011-05-30
发帖:
11
等级:
仿真新人
0楼
发表于: 2011-04-30 10:09:52
200步是达到10^57了 散的厉害
ECq(i(
;Ih:$"$!
Q7u/k$qN
%定义几个常量
2Fwp\I;
c=3*10^8;
J0xV\O !e
e0=8.854*10^(-12);
[1Cs
u0=4*pi*10^(-7);
jhU'UAn
pGS!Nn;K2
deta_x=0.001;%定义空间网格长度,为1/20波长
7Aj o9
deta_y=0.001;
gl k-: #
deta_z=0.001;
N$cm;G=]
x_max=50;%定义总的网格数
1< 22,
y_max=50;
:xqhPr]e
z_max=50;
T["(wPrt
%定义时间步长
;h|zNx0
deta_t=1/c/sqrt((1/deta_x)^2+(1/deta_y)^2+(1/deta_z)^2);
,mkXUW
%定义迭代的次数
aNd6#yU$
step=100;
$Sz@u"ig%
%场量置零
OQl7#`G!H%
hx1=zeros(x_max+1,y_max,z_max);
9 GEMmo3
hx2=zeros(x_max+1,y_max,z_max);
b8Bf,&:ys
hy1=zeros(x_max,y_max+1,z_max);
Ph{7S43
hy2=zeros(x_max,y_max+1,z_max);
^t X}5i`P
hz1=zeros(x_max,y_max,z_max+1);
`XT8}9z!
hz2=zeros(x_max,y_max,z_max+1);
[diUO1p
ez1=zeros(x_max+1,y_max+1,z_max);
E]T>m!6
ez2=zeros(x_max+1,y_max+1,z_max);
ST'eJ5P7!5
ex1=zeros(x_max,y_max+1,z_max+1);
=~qQ?;on
ex2=zeros(x_max,y_max+1,z_max+1);
;/hR#>ib
ey1=zeros(x_max+1,y_max,z_max+1);
<]{$XcNm
ey2=zeros(x_max+1,y_max,z_max+1);
&d5n_:^
%定义电流源的位置
j6Msbq[
source_x=25;
v2Lx4:dzi
source_y=25;
]yg3|C;
source_z=25;
VTM*=5|c
%定义观察点的位置
+MHsdeGU1W
field_x=23;
c*fMWtPp
field_y=23;
Xaz`L
field_z=23;
g7Xjo )
%定义激励源
G)<NzZo
%时谐源
a| w.G "W
frequency=15*10^9;%波长为0.02
5~BM+ja
omiga=2*pi*frequency;
L$T23*9XY
%高斯源
. #+ N?D<
t0=0.0667*10^(-9);
{0~ Sj%Ze
tt=0.0667*10^(-9);
F6g)2&e{/
%定义保存结果的变量
Gcu[G]D
result=zeros(step,1,1);
I[P43>F3
%迭代开始
)1E[CIaXK
for t=1:1:step
)(^L*
t
3 VNPdXsh
% current(t)=sin(omiga*t*deta_t);
"e)C.#3
current(t)=exp(-4*pi*(t*deta_t-t0)^2/tt^2);
Q:nBx[%
%ex的计算;
g4p-$WyT8>
for i=1:1:x_max
%8U/!(.g
for j=2:1:y_max
3mmp5 d
for k=2:1:z_max
NoSq:e
if i==source_x&j==source_y&k==source_z%判断是不是源点
WD`z\{hcom
ex2(i,j,k)=ex1(i,j,k)+deta_t/e0*((hz2(i,j,k)-hz2(i,j-1,k))/deta_y-(hy2(i,j,k)-hy2(i,j,k-1))/deta_z)-deta_t/e0*current(t);
cD&Q