資源簡介
可靠性算法,改進一次二階矩法的Matlab源代碼,里面包含部分測試例子,可直接在Matlab軟件中調用執行,文件中包含詳細的注釋。
function?AFOSM(NE)
%改進一次二階矩法
%適用范圍:隨機變量為正態分布,變量間獨立
%特點:線性功能函數獲得失效概率精確解,非線性程度不高的功能函數獲得失效概率較高精度的近似解
%特點:對于物理意義相同而數學表達是不同的問題具有統一的解
%缺點:不能反映功能函數的非線性對失效概率的影響
%缺點:在功能函數的非線性程度較大時,迭代算法受初始點影響較大
%缺點:對具有多個設計點問題,可能會陷入局部最優,甚至不收斂
%缺點:屬基于功能函數梯度的方法,對極限狀態方程表達式具有一定的依賴性,隱式函數梯度求解較困難
%缺點:設計點迭代可能不收斂,可能陷入局部最優,可使用遺傳算法計算設計點
%輸入參數: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.判斷方法適用性
????for?i=1:Prob.Nx
????????if?strcmp(Prob.Dist{i}?‘norm‘)==0?&&?strcmp(Prob.Dist{i}?‘Normal‘)==0
???????? error(‘This?method?can?only?be?used?for?normal?distributed?variables?please?use?AFOSMJC?method?instead\n‘);
???? end;
????end;
????
????%4.獲得相應參數
????gFun=Prob.Fung;?????????????????????????????????????????%用符號變量表示極限狀態函數
????for?i=1:Prob.Nx?????????????????????????????????????????
????????muX(i:)=Prob.Para{i}(1);
????????sigmaX(i:)=Prob.Para{i}(2);
????end;
????%5.推導偏導函數,符號變量賦值
????for?i=1:Prob.Nx
????????dgFun(i:)=diff(gFunX(i));?????????????????????????%求極限狀態函數偏導數表達式
???? eval([XX(i:)?‘=muX(i:);‘]);???????????????????????%為符號變量賦值?-?變量均值
????end;
????
????%6.計算功能函數值及導數值
????gValue=eval(gFun);??????????????????????????????????????%求解極限狀態函數在均值點處函數值
????for?i=1:Prob.Nx????????????????????????????????????????
????????dgValue(i:)=eval(subs(dgFun(i)));??????????????????%求解極限狀態函數在均值點處導數值
????end;
????
????%7.迭代求解MPP點
????x=muX;
????x0=repmat(epslength(muX)1);
????IteratingStep=0;
????while?norm(x-x0)/norm(x0)?>?1e-6
????????IteratingStep=IteratingStep+1;
????????x0=x;
????????%7.1符號變量賦值
????????for?i=1:Prob.Nx
????????????eval([XX(i:)?‘=x(i);‘]);???????????????????????%為符號變量賦值?-?xi迭代值
????????end;
????????%7.2計算功能函數值及導數值
????????gValue=eval(gFun);
????????dgValue=eval(subs(dgFun));??????????????????????????%求在xi點的偏導數值dg/dxi|xi
????????%7.3計算加權標準差
????????gs=dgValue.*sigmaX;
????????%如果gs值為零,需要偏移當前點位置,重新計算
????????if(norm(gs))?==?0
????????????x=x+0.1;
????????????continue;
????????end
????????%7.4計算靈敏度系數
????????alphaX=-gs/norm(gs);
????????%7.5計算可靠度指標
????????beta=(gValue+dgValue.‘*(muX-x))/norm(gs);
????????%7.6計算新的x向量值
????????x=muX+sigmaX.*alphaX*beta;
????end
????%8.求解函數值及失效概率
????MPP=eval(subs(x));???????????????????????????????????????%求解基本變量x的值
????Pf=normcdf(-beta);???????????????????????????????????????%失效概率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
????fprintf(‘××××××AFOSM?失效模式可靠性分析結果××××××\n‘);?
????fprintf(‘設計點迭代步數為:??%d\n‘IteratingStep);?
????fprintf(‘設計點坐標:‘);
????for?i=1:Prob.Nx
????????fprintf(‘????????%10.8f‘MPP(i));
????end????
評論
共有 條評論