Matlab网格划分程序Distmesh讲解 一.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Matlab网格划分程序Distmesh讲解 一

Matlab网格划分程序Distmesh讲解 一 [转载]Matlab网格划分程序Distmesh讲解(一)2010-09-20 15:58是一个matlab语言写的网格划分软件。 源文件可以从上面的网址获取。 这里按行讲解各个算例。 p01_demo: 概算例是一个单位圆(半径为1)的网格划分,划分后的网格为: 以下逐行讲解该算例: function p01_demo(iteration_max,h) %Parameters: %Input,integer ITERATION_MAX,the maximum number of iterations that DISTMESH %should take.(The program might take fewer iterations if it detects convergence.) %Input,real h,the mesh spacing parameter. %这里有两个输入参数,一个是ITERATION_MAX,迭代的最大次数。 %另一个是h,网格划分的大小。0 h1 %默认参数值为:ITERATION=200 h=0.1 [p,t]=distmesh_2d(fd,fh,h0,box,iteration_max,fixed); 函数需要至少六个参数。 d=fd(p),p=[x y] fd给定任一点到边界的距离函数,本例中定义为:d=sqrt(x^2+y^2)-1; fh,scaled edge length function h(x,y).也就是网格大小的函数。 h0也就是h,网格的大小 real BOX(2,2),the bounding box[xmin,ymin;xmax,ymax]. 最大外围矩形范围。本例中为[0,0;1,1] ITERATION_MAX,the maximum number of iterations. real PFIX(NFIX,2),the fixed node positions.网格中需要固定的点坐标,也就是一定需要出现在网格中的点。 输出参数: real P(N,2),the node positions.网格点的x,y坐标 integer T(NT,3),the triangle indices.输出网格任一一个三角形的三个顶点。 第一步: [x,y]=meshgrid(box(1,1):h0:box(2,1),. box(1,2):h0*sqrt(3)/2:box(2,2)); 根据h0,网格的大小,先把能涵盖欲划分区域的最大矩形划分为结构网格。 然后把偶数行的点整体向右平移半格, x(2:2:end,:)=x(2:2:end,:)+h0/2; 效果如下: 第二步: 根据fd的函数定义,移除边界外的点。 p=p(feval_r(fd,p,varargin{:})=geps,:); varagin为fd,fh的附加参数,这里为空。 geps=0.001*h0; 也就是保留了到边界的距离以外0.001*h0以内的点。 根据网格密度函数fh,每个点上产生一个0-1随机数,判断是否小于r0/max(r0) 大于的话,改点被删除。 p=[pfix;p(rand(size(p,1),1)r0./max(r0),:)]; [nfix,dummy]=size(pfix); 当指定了某些点要保留的时候,把保留的点加入,删除重复的点。 %Especially when the user has included fixed points,we may have afew %duplicates.Get rid of any you spot. % p=unique(p,rows); N=size(p,1); 这个时候产生的网格如下: 第三步:迭代 pold=inf;%第一次迭代前设置旧的点的坐标为无穷 while(iteration iteration_max) iteration=iteration+1; %先判断上次移动后的点和旧的点之间的移动距离,如果小于某个阀值,停止迭代 if(ttol max(sqrt(sum((p-pold).^2,2))/h0)) pold=p;%如果还可以移动,保存当前的节点 t=delaunayn(p);%利用delauny算法,生成三角形网格 triangulation_count=triangulation_count+1; pmid=(p(t(:,1),:)+p(t(:,2),:)+p(t(:,3),:))/3;%计算三角形的重心。 t=t(feval_r(fd,pmid,varargin{:})=-geps,:);%移除重心在边界外部的三角形 %4.Describe each bar by a

您可能关注的文档

文档评论(0)

2017meng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档