行业新闻

三维拓扑优化柔顺机构的问题?

Kai Liu写的这篇《An efficient 3D topology optimization code written in Matlab》,其中柔顺机构那一节的程序,我照着敲的,为什么运行出来提示


无法执行赋值,因为左侧的大小为 14385-by-1,右侧的大小为 14385-by-2。

出错 top3dmechanism (line 95)

U(freedofs,:)=K(freedofs,freedofs)\\F(freedofs,:);


看了好几遍,确实没哪个地方敲错,源程序跑悬臂梁的没问题,有没有人遇到过这个问题?

根据matlab的错误提示,我刚才把

U=U(:,1);

ce=reshape(sum((U(edofMat)*KE).*Ud(edofMat),2),[nely,nelx,nelz]);

改成

Ue=U(:,1);

ce=reshape(sum((Ue(edofMat)*KE).*Ud(edofMat),2),[nely,nelx,nelz]);

然后就算出来了,但是拓扑图有一点点的不一样,不过问题应该不大

这么做是对的吗?还是说作者那个地方写错了


xdm我还有个问题,文章中给OC法改了下增加了收敛性,我试了下原OC法确实算不出来,那么我

换个优化方法比如SQP,那么我应该怎么增加收敛性呢?

作者的代码不一定对...明显维数不一样

能跑起来就对了呗……


话说专业不一样我真的不太懂...不晓得你做的啥

收敛性的话只有改参数了呗 改步进系数?换个算法?

是line 74b弄错了,U从nx2变成了nx1。 换一个变量就行,不影响灵敏度计算。

原OC只适合全负灵敏度问题,OC用于柔顺机构的话必须用一些artifact,比如人为的把正灵敏度变成一个很小的负数,或者直接取绝对值。

据我所知,柔顺机构收敛性不是很好,建议用一些自适应的优化方法比如MMA。SQP很容易很快收敛到局部最优,其效果可能还不如MMA和OC.

平台注册入口