使用Maltab中的system函数,实现Matlab与Ansys的交互,即可实现相同模型计算数千遍并输出数据。
MATLAB调用ANSYS进行有限元分析步骤如下:
%% 将matlab中的样本数据以科学计数法的形式导出成txt文件
% the samples 厚悬臂梁在不同参数下的顶端最大位移 荷载P/kN 弹性模量E/GPa 泊松比v 截面宽b 截面高h 截面长L
Mu = [ 2.5,200,0.225,1.0,3,3.5 ]; % mean value
Std = Mu*0.1; % standard deviation 标准差
Sigma = diag(Std.^2); % standard deviation;
N = 10;
input = lhsnorm(Mu, Sigma, N); %拉丁超立方抽样
a = input;
% fid = fopen('F:\matlabtoansys1\beam.txt', 'wt'); % -t模式按照文本而非二进制模式读写 名为beam.txt储存100*6个参数数据
% fprintf(fid,[repmat('%.4e ', 1, size(a,2)), '\n'], a'); % 转置并适时(写完一列后)添加换行
% fclose(fid);
%% 该代码为基于遗传算法利用matlab与ansys的数据传递最优化
% 清空环境变量
input_test=input; %input(9:end,:)';
%output_test=output';%output(9:end)';
%% 遗传算法参数初始化
maxgen=40; %进化代数,即迭代次数
sizepop=10; %种群规模
pcross=[0.4]; %交叉概率选择,0和1之间
pmutation=[0.2]; %变异概率选择,0和1之间
%节点总数
lenchrom=ones(1,6); %注意染色体长度
bound=[0.7*Mu(1),1.3*Mu(1);0.7*Mu(2),1.3*Mu(2);0.7*Mu(3),1.3*Mu(3);
0.7*Mu(4),1.3*Mu(4);0.7*Mu(5),1.3*Mu(5);0.7*Mu(6),1.3*Mu(6)]; %数据范围
%------------------------------------------------------种群初始化--------------------------------------------------------
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体
avgfitness=[]; %每一代种群的平均适应度
bestfitness=[]; %每一代种群的最佳适应度
bestchrom=[]; %适应度最好的染色体
%初始化种群
for i=1:sizepop
individuals.chrom(i,:) = Code(lenchrom,bound);
x(i,:) = individuals.chrom(i,:);
end
fid = fopen('F:\matlabtoansys1\beam.txt', 'wt'); % -t模式按照文本而非二进制模式读写 名为beam.txt储存100*6个参数数据
fprintf(fid,[repmat('%.4e ', 1, size(x,2)), '\n'], x'); % 转置并适时(写完一列后)添加换行
fclose(fid);
%计算适应度 (不知道为什么这里贴代码就上传不上去,显示系统繁忙)
后面为遗传算法迭代寻优过程
运行之后,在文件夹中会出现以下文件,其中beam.txt为100*6个参数数据,weiyi.txt为每次计算时不同参数下位移的值,Dataread.mac和datawrite.mac两个宏文件分别为数据读取和写入功能,bestvalue写出最佳参数值,而test1.mac则是APDL语言写成的批处理文件,以下给出部分文件截图,有的图片没有截全
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删