24小时热门版块排行榜    

CyRhmU.jpeg
查看: 7510  |  回复: 26
【奖励】 本帖被评价16次,作者dbb627增加金币 11.8

[资源] matlab生成随机行走网格 模拟材料生长

这个板块帖子太少,发一个增加点人气,原始问题见
http://muchong.com/bbs/viewthread.php?tid=3723739
算法如下:
随机生长的步骤如下:
1) 建立材料生长的初始网格,并设定所有网格材料皆为主相;
2) 定义生长相的生长核分布概率数,Cd,其大小不大于此生长相的体积分数。对系统网格的每个单元采用在(0,1)内均匀分布的随机函数赋随机数,其值若小于Cd,则认为此单元为生长相的一个生长核。其次,对每一个生长核,使其从各个方向上向其周围临近网格单元扩张,生长时,每一个方向上需设定一个方向增长概率数,Di,下标i代表方向。每一个生长核,其周围各个单元均会被赋值一个随机数,其值若不大于该方向上的方向增长概率数,则此单元同样成为一个新的生长相。
3)重复步骤二直至此生长相的体积分数到达其给定值。
原帖给的程序不完整,这里重写,并优化了
CODE:
function growth
%作者:dbb627
%2011.10.27
%======设定初值=============
clc;clear;
rand('state',0);
set(gcf,'DoubleBuffer','on');%消除振动
Cd=0.01;%生长核分布概率数
Vr=0.3;%生长相的体积分数
global kn
kn=500;
p=[1/8 1/8 1/8 1/8 1/4 1/4 1/4 1/4];%方向增长概率数
A=rand(kn,kn);%初始网格kn×kn
A(find(A<=Cd))=0;%黑色,生长核
A(find(A>Cd))=1;%白色
imshow(A,'InitialMagnification','fit')%初始图像
k=0;%迭代步骤
N=kn*kn;%格点数
[x,y]=find(A==0);%生长核脚标
Ixy=sub2ind([kn,kn],x,y); % 转化脚标为索引
gn=length(Ixy);%生长核计数
Vs=gn/N;       %体积分数
ti=title(['time = 0 体积分数=',num2str(Vs)],'Fontsize',14,'Fontname','Times new roman'); % 在图题处实时显示时间
%===========================
while Vs     xL=x-1;xR=x+1;
    xL(xL==0)=1;% 对近邻进行边界条件处理
    xR(xR==kn+1)=kn;% 对近邻进行边界条件处理
    yD=y-1;yU=y+1;
    yD(yD==0)=1;% 对近邻进行边界条件处理
    yU(yU==kn+1)=kn;% 对近邻进行边界条件处理
   
    InE=sub2ind([kn,kn],xR,y); % 右方转化脚标为索引
    InS=sub2ind([kn,kn],x,yD); % 下方转化脚标为索引
    InW=sub2ind([kn,kn],xL,y); % 左方转化脚标为索引
    InN=sub2ind([kn,kn],x,yU); % 上方转化脚标为索引
   
    InEN=sub2ind([kn,kn],xR,yU); % 右上方转化脚标为索引
    InES=sub2ind([kn,kn],xR,yD); % 右下方转化脚标为索引
    InWS=sub2ind([kn,kn],xL,yD); % 左下方转化脚标为索引
    InWN=sub2ind([kn,kn],xL,yU); % 左上方转化脚标为索引
     %===用函数的方法写八个方向的生长迭代=====
          [A,Ixy]=growthmod(InE,Ixy,p(5),A);  
          [A,Ixy]=growthmod(InS,Ixy,p(6),A);
          [A,Ixy]=growthmod(InW,Ixy,p(7),A);
          [A,Ixy]=growthmod(InN,Ixy,p(8),A);
          [A,Ixy]=growthmod(InEN,Ixy,p(1),A);
          [A,Ixy]=growthmod(InES,Ixy,p(2),A);
          [A,Ixy]=growthmod(InWS,Ixy,p(3),A);
          [A,Ixy]=growthmod(InWN,Ixy,p(4),A);
  %==========做图========   
    [x,y]=find(A==0);
    Ixy=sub2ind([kn,kn],x,y);
    gn=length(Ixy);
    Vs=gn/N %体积分数
    k=k+1
    pause(0.1)
    imshow(A,'InitialMagnification','fit')%更新图像
    title(['time = ',num2str(k),'体积分数=',num2str(Vs)],'Fontsize',14,'Fontname','Times new roman'); % 更新时间参数
   
end
   
function [A,Ixy]=growthmod(Ind1,Indxy,p,A)
%Ind1 当前方向索引
%,Indxy 当前生长核索引的
%p 当前方向的概率值
%A 当前的生长矩阵
global kn
    CInE=setdiff(Ind1,Indxy);%提取非生长核边界格点索引
    En=rand(1,length(CInE));%各个单元均会被赋值一个随机数
    [i,j]=find(En<=p);%大于该方向上的方向增长概率数,则此单元同样成为一个新的生长相
    pE=sub2ind([1,length(CInE)],i,j);%新的生长相索引的下标
    A(CInE(pE))=0; %更新生长矩阵
    [x,y]=find(A==0);%更新生长核坐标
    Ixy=sub2ind([kn,kn],x,y);%更新生长核索引


生长动画

[ Last edited by dbb627 on 2011-10-27 at 10:19 ]
回复此楼

» 收录本帖的淘帖专辑推荐

科研工具资源Nick 资源收集 小木虫matlab全部资源 科研工具专辑
科研相关 Matlab Study 自己阅读 晶粒长大及相关模拟

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)


本帖仅楼主可见
2楼2011-10-27 09:49:32
已阅   申请计算强帖   回复此楼   编辑   查看我的主页

★★★★★ 五星级,优秀推荐

学习!
3楼2011-10-27 10:28:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cxguo

新虫 (正式写手)


★★★★★ 五星级,优秀推荐

引用回帖:
1楼: Originally posted by dbb627 at 2011-10-27 09:20:06:
这个板块帖子太少,发一个增加点人气,原始问题见
http://muchong.com/bbs/viewthread.php?tid=3723739
算法如下:
随机生长的步骤如下:
1) 建立材料生长的初始网格,并设定所有网格材料皆为主相; ...

楼主高手啊,请教以下可以用Matalab画原子生长模拟图不?三位岛状生长的。
4楼2011-10-28 12:41:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
4楼: Originally posted by cxguo at 2011-10-28 12:41:57:
楼主高手啊,请教以下可以用Matalab画原子生长模拟图不?三位岛状生长的。

有生长的模式吗,你写出来看看,我不是研究材料。不太知道三位岛状生长。
5楼2011-10-28 13:53:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cxguo

新虫 (正式写手)


引用回帖:
5楼: Originally posted by dbb627 at 2011-10-28 13:53:10:
有生长的模式吗,你写出来看看,我不是研究材料。不太知道三位岛状生长。

神速啊,太感谢了,好人,我QQ:547500313 上面说方便一些,谢谢了
6楼2011-10-28 15:09:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cxguo

新虫 (正式写手)


引用回帖:
5楼: Originally posted by dbb627 at 2011-10-28 13:53:10:
有生长的模式吗,你写出来看看,我不是研究材料。不太知道三位岛状生长。

是Volmer-Weber 生长模式,下面是别人做的模拟图

Proposed mechanism for water-mediated carbon removal on the anode with BaO/Ni interfaces.

7楼2011-10-28 15:29:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
你是要做模式图,还是模拟计算呢,模式图的话可以用CHEMOFFICE等专业软件绘制
8楼2011-10-28 16:17:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hedonistful

至尊木虫 (著名写手)


★★★★★ 五星级,优秀推荐

LZ在吗?
想请教你问题呀。
9楼2011-10-29 15:58:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
9楼: Originally posted by hedonistful at 2011-10-29 15:58:30:
LZ在吗?
想请教你问题呀。

在,有什么问题啊,欢迎讨论
10楼2011-10-29 16:10:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hedonistful

至尊木虫 (著名写手)


想请教你一个模拟材料生长的问题,你方便告诉我你QQ吗?
11楼2011-10-29 16:36:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaoaq

金虫 (著名写手)


★★★★★ 五星级,优秀推荐

神人呀,可以科研合作呀,告诉我你QQ
12楼2011-11-09 18:36:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

张曙亮

铁虫 (小有名气)


★★★★★ 五星级,优秀推荐

??? Error using ==> imshow>ParseInputs
Unknown option string "fit"

Error in ==> imshow at 85
[cdata, cdatamapping, clim, map, xdata, ydata, filename, ...

Error in ==> growth at 16
imshow(A,'InitialMagnification','fit')%初始图像
新手入门,运行文件时出现这种错误提示,楼主有时间给解释一下。谢谢。
13楼2012-04-12 11:32:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
4522277楼: Originally posted by 张曙亮 at 2012-04-12 11:32:18:
??? Error using ==> imshow>ParseInputs
Unknown option string "fit"

Error in ==> imshow at 85
[cdata, cdatamapping, clim, map, xdata, ydata, filename, ...

Error in ==>  ...

这个可能是你的matlab版本比较早,我实在2010b上运行的没问题
你可以把代码作下修改
找到对应两部分改为
A(find(A<=Cd))=0;%黑色,生长核
A(find(A>Cd))=255;%白色
image(A)%初始图像


  pause(0.5)
   image(A)
14楼2012-04-12 14:15:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

howell26

木虫 (初入文坛)


★★★★★ 五星级,优秀推荐

很棒的帖。
楼主知道怎么做成三维的吗?小弟最近在研究三维的颗粒。
15楼2012-04-17 14:57:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

howell26

木虫 (初入文坛)


送鲜花一朵
楼主在吗?那想请教楼主,能生成三维的模型吗?
16楼2012-04-23 10:08:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

李宝秀

新虫 (初入文坛)


★★★★★ 五星级,优秀推荐

楼主,我想请教你,我在做PECVD制备薄膜的计算机模拟,只模拟薄膜生长,可我不知道该如何下手,能否赐教啊?怎么把等离子体的作用考虑进去呢?
17楼2012-05-11 10:55:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huppid

铁虫 (小有名气)


★★★★★ 五星级,优秀推荐

这段程序有几个问题:
(1)p的总和应该等于1;
(2)对Vs的循环没有添加上限;
(3)画图程序应该放在循环的开头,避免大于上限。
18楼2014-01-03 16:27:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huppid

铁虫 (小有名气)


这个过程有些问题,没有考虑到原子扩散
19楼2014-01-04 17:09:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

林外听涛

新虫 (初入文坛)


★★★★★ 五星级,优秀推荐

版主,我想问一下为什么我运行你的程序出来的是静态图,就显示的0时刻的。想请问一下你的动态生长图是怎么处理的。楼主方便留个联系方式吗。
我的Q是:335469407
20楼2014-12-27 14:46:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maminmin

新虫 (初入文坛)


★ 一星级,一般

楼主,你好请问如何生成六边形网格在matlab中,谢谢!
22楼2015-07-02 15:30:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

killeey

新虫 (初入文坛)


★★★★★ 五星级,优秀推荐

新手一枚,请教楼主如果已知材料的孔隙数据(也就是说多大的孔隙对应占总孔隙的百分数),如何模拟孔隙的分布?望提供帮助,非常感谢
23楼2015-11-25 16:43:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

秀川

铁虫 (初入文坛)


★★★★★ 五星级,优秀推荐

版主,我按着你的程序运行下来,好像根本停不下来啊
24楼2016-01-07 13:44:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锦年gy

新虫 (初入文坛)


★ 一星级,一般

引用回帖:
24楼: Originally posted by 秀川 at 2016-01-07 13:44:23
版主,我按着你的程序运行下来,好像根本停不下来啊

你好,我也在看这个,能互相交流一下么?
25楼2016-03-11 20:34:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mengyuqiya

新虫 (初入文坛)


★★★★★ 五星级,优秀推荐

mark
26楼2016-06-08 14:08:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mengyuqiya

新虫 (初入文坛)


引用回帖:
25楼: Originally posted by 锦年gy at 2016-03-11 20:34:42
你好,我也在看这个,能互相交流一下么?...

你在while 后面加个结束条件就好了
27楼2016-06-22 20:10:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
osd188821楼
2015-01-27 03:48   回复  
三星好评  顶一下,感谢分享!
相关版块跳转 我要订阅楼主 dbb627 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复(可上传附件)
信息提示
请填处理意见