n20062776 发表于 2010-10-12 09:01:41

拓扑优化编程问题

请问:A 99 line topology optimization code written in Matlab
O. Sigmund   
这篇文章里,作者进行网格化分时,单元的大小和厚度分别是多少?

jsh06 发表于 2010-10-12 10:07:46

看后面的程序很好理解

n20062776 发表于 2010-10-12 11:13:30

我是按厚度为1,长度和宽度均为2来算,可以满足单元刚度矩阵的形式,但是在四十二行变量更新时,
42 xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid)))));
单元的体积Ve为4并未算入到其中。按我的理解应该为sqrt(-dc./lmid*Ve)?
请赐教

n20062776 发表于 2010-10-12 11:21:41

Be=-(dc/dxe)/(r*(dV/dxe));
dV/dxe=Ve

lysgreat 发表于 2010-10-12 22:56:06

嗯??说说我的理解啊。。。
1、Sigmund教授文章中公式Be=-(dc/dxe)/(r*(dV/dxe))dV/dxe=Ve,是正如楼主理解的那样,没有问题;
2、99行中的单元刚度矩阵看上去只是1*1尺寸的单元的刚度矩阵,事实上,只要是正方形,任意a*a的四节点单元的刚度矩阵都是一样,正如99行中的lk=KE;
3、如果楼主要划分并非1*1单元的网格,或者更密或者更疏,只要是a*a的四节点单元,都不用改刚度阵;很明显,如果网格更密,拓扑结果更好(杆更多,边界更清晰光滑);
4、事实上99行中并不指定单元是1*1还是2*2的尺寸的,它只关心x、y两个方向的单元数目(nelx、nely);比如说:原始矩阵结构是10*10的大小,我划分成nelx=10 nely=10,那么单元是标准的1*1;如果我划分成nelx=100nely=100,那么我的单元是0.1*0.1,前者体积Ve=1,后者体积是Ve=0.01(单位厚度),但是事实上不用去改变楼主说的42行中变量更新的表达式!如果加上去Ve也是没有问题的,只要function OC代码最后加上:
disp([' l1=' sprintf('%7.4f',l1) ' l2=' sprintf('%7.4f',l2) ' lmid=' sprintf('%7.4f',lmid)]);
观察两种情况下各个迭代步的lmid值,你会发现前一种网格情况的lmid与后一种网格情况有约100倍的关系!
即lmid(前)/lmid(后)约等于1/100,这个1/100就是体积的比值!但是两种情况的拓扑结果还是差不多的。这个差不多,就是说一般不会每一步都一样,但是很接近!
5、为什么会出现第四条所讲的情况呢?简单来说就是:dc(柔顺度对设计变量的灵敏度)确定后,x的变化方向在启发式迭代格式条件下也是确定的,以二次法就能得到!

不知道我讲的有没有错误,请各位朋友一起讨论!!谢谢!

n20062776 发表于 2010-10-13 09:38:14

多谢赐教啊,:),这个问题困扰我几天了。虽然并未完全理解,不过意思大概懂了,还要认真再看几遍啊!

n20062776 发表于 2010-10-13 15:55:18

5、为什么会出现第四条所讲的情况呢?简单来说就是:dc(柔顺度对设计变量的灵敏度)确定后,x的变化方向在启发式迭代格式条件下也是确定的,以二次法就能得到!

前面的都理解了,最重要的第五条还是不懂啊。我是学机械的,对一些名词很陌生,麻烦说的通俗易懂些吧,:)

lysgreat 发表于 2010-10-13 22:33:01

你可以下载一些硕士论文看下的。。。毕业论文中一般会说明的比较清楚!
关键词:拓扑优化、变密度法

n20062776 发表于 2010-10-14 14:59:40

非常感谢!我刚开始学习拓扑优化,以后还望多多指教啊:)

lysgreat 发表于 2010-10-14 21:25:34

我也是刚学不久。。。大家共同讨论共同学习!!
这里实际软件应用的会员更多些。。。拓扑优化基本研究的偏少些。

n20062776 发表于 2010-10-16 15:02:38

是啊,开始也是只使用软件,总觉得不是很相信结果,有些设置也不懂缘由,所以这段时间想好好补一下基本理论。
共同学习,共同进步啊!:)

keepfeeling 发表于 2012-2-2 18:13:02

赞一个!
页: [1]
查看完整版本: 拓扑优化编程问题