gusucode.com > 自编四参数法生成多孔介质的matlab程序代码 > main.m
max_i=200; max_j=200; % 定义生成域 d14=0.1; d58=0.025; %定义八个方向的生长概率 n=0.35; %多孔材料孔隙率 cdd=0.01; %固相生长核的分布概率 numtotal_need=(1-n)*max_i*max_j; %所有的固体相数目 numsolid=0; arrgrid=0; %遍历所有网格,生成固相内核 for i=1:max_i for j=1:max_j if rand()<cdd numsolid=numsolid+1; %当随机数小于cdd时设为固体相 arrgrid(i,j)=1; %固体相处设为1 solid(numsolid,1)=i; solid(numsolid,2)=j; %表示第numsolid个固体相的行号与列号 end end end Tnumsolid=numsolid; %第二步,固相内核向八个方向生长 while Tnumsolid<numtotal_need for index_solid=1:Tnumsolid index_i=solid(index_solid,1); index_j=solid(index_solid,2); %固体内核向1方向生长 if index_j<max_j i=index_i; j=index_j+1; if arrgrid(i,j)==0&rand()<d14 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向2方向生长 if index_i<max_i i=index_i+1; j=index_j; if arrgrid(i,j)==0&rand()<d14 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向3方向生长 if index_j>1 i=index_i; j=index_j-1; if arrgrid(i,j)==0&rand()<d14 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向4方向生长 if index_i>1 i=index_i-1; j=index_j; if arrgrid(i,j)==0&rand()<d14 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向5方向生长 if index_i<max_i&index_j<max_j i=index_i+1; j=index_j+1; if arrgrid(i,j)==0&rand()<d58 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向6方向生长 if index_i<max_i&index_j>1 i=index_i+1; j=index_j-1; if arrgrid(i,j)==0&rand()<d58 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向7方向生长 if index_i>1&index_j>1 i=index_i-1; j=index_j-1; if arrgrid(i,j)==0&rand()<d58 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end %固体内核向8方向生长 if index_i>1&index_j<max_j i=index_i-1; j=index_j+1; if arrgrid(i,j)==0&rand()<d58 numsolid=numsolid+1; arrgrid(i,j)=1; solid(numsolid,1)=i; solid(numsolid,2)=j; end end end %结束for index_solid循环 Tnumsolid=numsolid; end %结束while循环 x=1:max_i; y=1:max_j; z=arrgrid; %网格的横坐标,纵坐标,属性0-液体,1-固体 scatter(x,y,5,z)%绘制散点图 [c,h]=contour(x,y,arrgrid,[1,1]);