- 积分
- 0
- 注册时间
- 2007-6-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
下面是对一个由25杆组成的桁架进行可靠性分析的部分程序,因为在分析中我用的是“映射变化法”对桁架进行失效概率计算。但是在求导过程中没有目标函数,即不能用“diff”进行直接求导,所以我是引用子函数来求导,但总是出现问题,问题在下面已经标出。望各位老大帮忙给修改一下 ,小弟拜谢了。
function XBLMATLAB
clear;clc;
for i=1:21
muX(i)=5.2e3;
sigmaX(i)=0.26e3;
end
for i=22:25
muX(i)=5.2e3;
sigmaX(i)=0.2e3;
end
for i=18:21
sLn(i)=sqrt(log(1+(sigmaX(i)/muX(i))^2));mLn(i)=log(muX(i))-sLn(i)^2/2;
end
for i=22:25
aEv(i)=sqrt(6)*sigmaX(i)/pi;uEv(i)=-psi(1)*aEv(i)-muX(i);
end
aUn=[2.124e6;1.2344e6;];bUn=[2.324e6;1.4344e6];
muX(27)=(aUn(1)+bUn(1))/2;sigmaX(27)=(bUn(1)-aUn(1))/sqrt(12);
muX(29)=(aUn(2)+bUn(2))/2;sigmaX(29)=(bUn(2)-aUn(2))/sqrt(12);
muX(26)=1779e3;
muX(28)=1779e3;
x=muX;
for i=1:29
aa(i)=x(i)
end
fprintf(fid2,'%10.4f\r\n',aa)
fclose(fid2)
system('ansys100.exe -b -p ane3fl -i truss25.txt -o test.out')%功能函数值求解
fid3=fopen('result11.txt','r')
nline=0
while ~feof(fid3)
tline=fgetl(fid3);
nline=nline+1;
if nline==29
nnn=str2double(tline(16:28))
end
end
fclose(fid3)
fprintf(fit,'%s\n','功能函数值g:')
fprintf(fit,'%10.4f\r\n',nnn)
fprintf(fit,'%s\n','=================')
for i=1:29
gX=local_daoshu(x(i)) %这里开始调用子函数求解导数
end
%下面是调用的子函数....................................
function gX=local_daoshu(x)
nnn2=local_func(m)
gX=(nnn2-nnn)./(0.03*abs(x(i)))
%...................................................
function nnn2=local_func(m) %此子函数是求解nnn2值
fid2=fopen('shuju.txt','wt')
m(i)=x(i)+0.03*abs(x(i))
for i=1:29 %这里一直出现错误(错误提示):"i" previously appeared to be used as a function or command, conflicting with its use here as the name of a variable.A possible cause of this error is that you forgot to initialize thevariable, or you have initialized it implicitly using load or eval.
aa(i)=m(i)
end
fprintf(fid2,'%10.4f\r\n',aa)
fclose(fid2)
system('ansys100.exe -b -p ane3fl -i truss25.txt -o test.out') %功能函数值求解(nnn2是通过ansys求解,因为这是一个由25个杆组成的桁架,因此没有目标函数。nnn2只是桁架中一个点的位移值,是通过ansys求解的)
fid3=fopen('result.txt','r')
nline=0
while ~feof(fid3)
tline=fgetl(fid3);
nline=nline+1;
if nline==29
nnn2=str2double(tline(16:28))
end
end |
|