⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matlab_ansys.m

📁 使用matlab调用ansys完成优化分析
💻 M
字号:
function Matlab_ansys()
tic;
e = 0.1;
x(1,1) = 1000; x(2,1) = 1000; x(3,1) = 1000; x(4,1) = 1000; 
x(:,2) = linear(x(:,1));
i = 1;
while model_value(x(:,i+1)-x(:,i)) > e
    x(:,i+2) = linear(x(:,i+1));
    i = i+1;
end
x
x(:,i+1)
fun(x(:,i+1))
toc;

function y = model_value(x)
%计算向量的模量,用于收敛判断
n = length(x);
a = 0;
for i=1:n
    a = a + x(i)^2;
end
y = a^0.5;


function z = fun(x)
%目标函数
A1 = x(1); A2 = x(2); A3 = x(3); B = x(4);
p = 2.85/10000;
z = p*(1000*A2+((B*B+1000000)^0.5)*(A1+A3));


function y = linear(x)
%将非线性问题线性化后用工具箱函数linprog求解下一个解
h = 0.1;
g = sigma_fun(x);
x1 = [x(1)+h;x(2);x(3);x(4)];
g1 = sigma_fun(x1);
A11 = ( g1(1)-g(1) )/h;
A21 = ( g1(2)-g(2) )/h;
A31 = ( g1(3)-g(3) )/h;

x1 = [x(1);x(2)+h;x(3);x(4)];
g1 = sigma_fun(x1); 
A12 = ( g1(1)-g(1) )/h;
A22 = ( g1(2)-g(2) )/h;
A32 = ( g1(3)-g(3) )/h;

x1 = [x(1);x(2);x(3)+h;x(4)];
g1 = sigma_fun(x1); 
A13 = ( g1(1)-g(1) )/h;
A23 = ( g1(2)-g(2) )/h;
A33 = ( g1(3)-g(3) )/h;

x1 = [x(1);x(2);x(3);x(4)+h];
g1 = sigma_fun(x1); 
A14 = ( g1(1)-g(1) )/h; 
A24 = ( g1(2)-g(2) )/h;
A34 = ( g1(3)-g(3) )/h;

A = [A11,A12,A13,A14;A21,A22,A23,A24;A31,A32,A33,A34];

b1 = x(1)*A11 + x(2)*A12 + x(3)*A13 + x(4)*A14 - g(1);
b2 = x(1)*A21 + x(2)*A22 + x(3)*A23 + x(4)*A24 - g(2);
b3 = x(1)*A31 + x(2)*A32 + x(3)*A33 + x(4)*A34 - g(3);
b = [b1;b2;b3];

p = 2.85/10000;
f = [p*(1000000+x(4)*x(4))^0.5; p*1000; p*(1000000+x(4)*x(4))^0.5; p*(x(1)+x(3))*x(4)/((1000000+x(4)*x(4))^0.5)];
lb = [1; 1; 1; 400];
ub =[1000 ;1000;1000;2000];
y = linprog(f,A,b,[],[],lb,ub);

function sigma = sigma_fun(x)
%应力计算
A1 = x(1); A2 = x(2); A3 = x(3); B = x(4);
A1_str = num2str(A1);
A2_str = num2str(A2);
A3_str = num2str(A3);
B_str = num2str(B);

fid1 = fopen('test.txt','w');
fprintf(fid1,'/cle\n');
fprintf(fid1,'/title,simple truss\n') ;       

fprintf(fid1,'*set,A1,') ;
fprintf(fid1,'%s',A1_str) ;
fprintf(fid1,'\n');

fprintf(fid1,'*set,A2,') ;
fprintf(fid1,'%s',A2_str) ;
fprintf(fid1,'\n');

fprintf(fid1,'*set,A3,') ;
fprintf(fid1,'%s',A3_str) ;
fprintf(fid1,'\n');

fprintf(fid1,'*set,B,') ;
fprintf(fid1,'%s',B_str) ;
fprintf(fid1,'\n');

fprintf(fid1,'/prep7\n');
fprintf(fid1,'et,1,link1\n');
fprintf(fid1,'r,1,A1\n');
fprintf(fid1,'r,2,A2\n');
fprintf(fid1,'r,3,A3\n');
fprintf(fid1,'mp,ex,1,2.1e6\n');
fprintf(fid1,'n,1,-B,0\n');
fprintf(fid1,'n,2,0,0\n');
fprintf(fid1,'n,3,B,0\n');
fprintf(fid1,'n,4,0,-1000\n');
fprintf(fid1,'real,1\n');
fprintf(fid1,'e,1,4\n');
fprintf(fid1,'real,2\n');
fprintf(fid1,'e,2,4\n');
fprintf(fid1,'real,3\n');
fprintf(fid1,'e,3,4\n');
fprintf(fid1,'finish\n');
fprintf(fid1,'/solu\n');
fprintf(fid1,'d,1,all,0\n');
fprintf(fid1,'d,2,all,0\n');
fprintf(fid1,'d,3,all,0\n');
fprintf(fid1,'f,4,fx,200000\n');
fprintf(fid1,'f,4,fy,-200000\n');
fprintf(fid1,'solve\n');
fprintf(fid1,'finish\n');
fprintf(fid1,'/post1\n');
fprintf(fid1,'etable,axst,ls,1\n');
fprintf(fid1,'*get,sig1,elem,1,etab,axst\n');
fprintf(fid1,'*get,sig2,elem,2,etab,axst\n');
fprintf(fid1,'*get,sig3,elem,3,etab,axst\n');
fprintf(fid1,'*cfopen,out,txt\n');
fprintf(fid1,'*vwrite,sig1,sig2,sig3\n');
fprintf(fid1,'(F18.5,F18.5,F18.5)\n');
fprintf(fid1,'*cfclos\n');
fclose(fid1);
!"C:\Program Files\Ansys Inc\v90\ANSYS\bin\intel\ANSYS90" -b  -i C:\test.txt -o C:\result.out
load ('out.txt')
sigma = [abs(out(1))-400;abs(out(2))-400;abs(out(3))-400];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -