-
大小: 9KB文件类型: .m金币: 1下载: 0 次发布日期: 2022-06-01
- 语言: Matlab
- 标签: 可靠性 Rackwitz-Fie Matlab
资源简介
可靠性算法,改进一次二阶矩法的Matlab源代码,结合Rackwitz-Fiessler方法,能够考虑任意分布的随机变量,里面包含部分测试例子,可直接在Matlab软件中调用执行,文件中包含详细的注释。
代码片段和文件信息
function AFOSMJC(NE)
%AFOSM法+JC法(Rackwitz-Fiessler方法)
%适用范围:随机变量为任意分布,变量间独立
%特点:保证等价前后失效概率具有较高的近似精度,特征点取MPP点
%缺点:设计点迭代可能不收敛,可能陷入局部最优,可使用遗传算法计算设计点
%输入参数:NE - 极限状态函数索引,整数
global Prob
tic
if nargin<1 NE = 0; end %如果未定义方程索引,默认使用索引0
%1.定义符号变量
syms x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf xg;
X=[ x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf xg ];
XX=[‘x1‘; ‘x2‘; ‘x3‘ ;‘x4‘ ; ‘x5‘; ‘x6‘ ;‘x7‘; ‘x8‘; ‘x9‘; ‘xa‘; ‘xb‘; ‘xc‘; ‘xd‘; ‘xe‘; ‘xf‘; ‘xg‘];
%2.获得方程相关公式、变量数目、变量分布、变量参数
Prob = FunDist( NE );
%3.获得相应参数
gFun=Prob.Fung; %用符号变量表示极限状态函数
for i=1:Prob.Nx
[muX(i:)sigmaX(i:)]=RandomVariableStat(Probi);
end;
%4.推导偏导函数,符号变量赋值
for i=1:Prob.Nx
dgFun(i:)=diff(gFunX(i)); %求极限状态函数偏导数表达式
eval([XX(i:) ‘=muX(i:);‘]); %为符号变量赋值 - 变量均值
end;
%5.计算功能函数值及导数值
gValue=eval(gFun); %求解极限状态函数在均值点处函数值
for i=1:Prob.Nx
dgValue(i:)=eval(subs(dgFun(i))); %求解极限状态函数在均值点处导数值
end;
%6.迭代求解MPP点
x=muX;
x0=repmat(epslength(muX)1);
IteratingStep=0;
while norm(x-x0)/norm(x0) > 1e-6
IteratingStep=IteratingStep+1;
x0=x;
%6.1符号变量赋值
for i=1:Prob.Nx
eval([XX(i:) ‘=x(i);‘]); %为符号变量赋值 - xi迭代值
end;
%6.2计算功能函数值及导数值
gValue=eval(gFun);
dgValue=eval(subs(dgFun)); %求在xi点的偏导数值dg/dxi|xi
%%%%%%%%%%%%%%%%%%%%
%6.3 JC法对非正态分布变量进行转换处理
[muXsigmaX]=JCMethod(Prob x);
%%%%%%%%%%%%%%%%%%%%
%6.4计算加权标准差
gs=dgValue.*sigmaX;
%如果gs值为零,需要偏移当前点位置,重新计算
if(norm(gs)) == 0
x=x+0.1;
continue;
end
%6.5计算灵敏度系数
alphaX=-gs/norm(gs);
%6.6计算可靠度指标
beta=(gValue+dgValue.‘*(muX-x))/norm(gs);
%6.7计算新的x向量值
x=muX+sigmaX.*alphaX*beta;
end
%7.求解函数值及失效概率
MPP=eval(subs(x)); %求解基本变量x的值
Pf=normcdf(-beta); %失效概率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(‘××××××AFOSMJC 失效模式可靠性分析结果××××××\n‘);
fprintf(‘设计点迭代步数: %d\n‘IteratingStep);
fprintf(‘设计点坐标:‘);
for i=1:Prob.Nx
fprintf(‘ %10.8f‘MPP(i));
end
fprintf(‘\n‘);
fprintf(‘设计点g值: g(x)=%10.10f\n‘gValue);
fprintf(‘可靠度指标: β=%10.10f\n‘beta);
fprintf(‘失效概率: Pf=%10.10f\n‘Pf);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
toc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
评论
共有 条评论