回 帖 发 新 帖 刷新版面

主题:[讨论]如何编写这个周期性边界条件,请高人指点,谢谢!!

如何编写这个程序的周期性边界条件,请高人指点,谢谢a=5;p=3;qq=0;
A=(rand(a,a)-0.5)/10;   %%得到一个a*a的初始矩阵
for x=1:a
    for y=1:a
        q(x,y)=A(x-1,y)+A(x+1,y)+A(x,y-1)+A(x,y+1)+A(x,y-1)-4*A(x,y)+A(x-1,y-1)+A(x+1,y-1)+A(x-1,y+1)+A(x+1,y+1)+A(x,y-1)-4*A(x,y);
        qq=qq+q(x,y);
    end
end


%周期性边界条件:
x,y的取值范围都是1到a;即
x=1:a  
y=1:a
内部点: x,y只要不取1或a,则x,y取值不变,即A(x,y)=A(x,y);
边界取值:x,y只要有一个或两个都取1或a,则
x+1,x-1,y+1,y-1中可能有超过1至a的范围,x+1,x-1,y+1,y-1中取值在1至a的范围内的,则不变;超范围的,处理方法如下:
x+1,x-1,y+1,y-1中,只要值等于0的,其值变成a; 
若x+1,x-1,y+1,y-1中,只要值等于a+1的,其值取1;
例如:
若x=1,y=1,则A(x,y)=A(x,y);A(x-1,y)=A(a,y);A(x-1,y-1)=A(a,a);A(x,y-1)=A(x,a);A(x+1,y+1)=A(x+1,y+1);
若x=a,y=1,则A(x,y)=A(x,y);A(x-1,y)=A(x-1,y);A(x-1,y-1)=A(x-1,a);A(x,y-1)=A(x,a);A(x+1,y+1)=A(1,y+1);
若x=a,y=a,则A(x,y)=A(x,y);A(x-1,y)=A(x-1,y);A(x-1,y-1)=A(x-1,y-1);A(x,y-1)=A(x,y-1);A(x+1,y+1)=A(1,1);
若x=1,y=a,则A(x,y)=A(x,y);A(x-1,y)=A(1,y);A(x-1,y-1)=A(1,y-1);A(x,y-1)=A(x,y-1);A(x+1,y+1)=A(x+1,1);

不知道如何编写这个周期性边界条件,请高人指点,谢谢!!

回复列表 (共1个回复)

沙发

%%--------------先处理中间的部分
A=(rand(a,a)-0.5)/10;   %%得到一个a*a的初始矩阵
for x=2:a-1            %
    for y=2:a-1        %%  矩阵(2:a-1,2:a-1)的部分
        q(x,y)=A(x-1,y)+A(x+1,y)+A(x,y-1)+A(x,y+1)+A(x,y-1)-4*A(x,y)+A(x-1,y-1)+A(x+1,y-1)+A(x-1,y+1)+A(x+1,y+1)+A(x,y-1)-4*A(x,y);
        qq=qq+q(x,y);
    end
end

%%-------------再单独处理边缘
for x=[1 a]
    for y=2:a-1
     %矩阵左右两列的元素(不包含角点)
    end
end
for y=[1 a]
    for x=2:a-1
     %矩阵上下两行的元素(不包含角点)
    end
end
%再单独处理四个角点

我来回复

您尚未登录,请登录后再回复。点此登录或注册