Matlab故障树的最小割集的计算

文章目录

  • Matlab故障树的最小割集的计算
  • 一、项目描述
  • 二、求解思路
    • 1.代码如下:
    • 2.读入数据
  • 结果

一、项目描述

来源于上课时教员要求我们编一个可以自动计算一颗故障树最小割集的程序,程序的输入为矩阵模式,输出为该故障树的最小割集。

二、求解思路

故障树求解最小割集有很多种方法,主要简单介绍一下上行法和下行法。上行法是从底层事件和中间事件出发,不断的由下面的公式迭代,最终得到顶事件的表达。
下行法顾名思义,从顶事件出发,将中间事件不断向下迭代,最终得到一个全部由底事件表达关于顶事件的等式。

故障树由四类有效元素构成:顶事件、中间事件、底层事件、逻辑门。其中,顶事件、中间事件、底层事件也可以归属到一起,为了方便求解,我们分开计算。

1.代码如下:

clc
clear
prompt='How many bottom events are there?\n ';
num_variables=input(prompt);
syms variables intermediates T intermedia
for i=1:num_variablessyms (['x',num2str(i)]); variables(i)=['x',num2str(i)];
end
prompt2='How many intermediate events are there?\n';
num_mediate=input(prompt2);
intermedia(1)=T;
for j=1:num_mediatesyms (['M',num2str(j)]); variables(num_variables+j)=['M',num2str(j)];intermedia(j+1)=['M',num2str(j)];
end
prompt3='Please input the Adjacency Matrix of bottom and intermediate events\n';
prompt4='邻接矩阵为((中间事件个数+顶事件)*(底事件个数+中间事件个数)),本案例中即为7*14的矩阵';
disp(prompt4);
ad_mat=input(prompt3);
prompt5='Please input the relationships of all events in order\n';
disp('输入的格式为0 1 向量的格式,1 代表 +,0 代表 - 输入数量与邻接矩阵行数一样,即为 1*7 个');
disp('输入的门的顺序为顶事件、M1、M2···案例中为[1 1 0 1 1 1 1]');
relationship=input(prompt5);
for v_num=1:num_mediate+1[row,col]=find(ad_mat(v_num,:)==1);if relationship(v_num)==1eq_variable_nums = (1:length(row));intermediates(v_num) =  sum(variables(col(eq_variable_nums)));elseeq_variable_nums = (1:length(row));intermediates(v_num) = prod(variables(col(eq_variable_nums)));end
end
for mm=1:v_numeval([char(intermedia(v_num+1-mm)),['=',char(intermediates(v_num+1-mm))]]);
end
T=expand(T);
str_eq=char(T);
S = regexp(str_eq, '+', 'split');
S=strtrim(S);%去除底事件的次方项数(^2,^3,……,^n)
for i = 1:length(S)cifang=strfind(S(i),'^');if isempty(cifang{1})==0str=cell2mat(S(i));start=cifang{1};while str(start)~='x' && str(start)~='*' && start<(length(str)+1)start=start+1;endS(i)=erase(S(i),str(cifang{1}:start-1));end
end
%去除被包含的事件
min_=[];
for i =1:length(S)-1for j=i+1:length(S)temp_str=strsplit(S{j},'*');temp_str_2=strsplit(S{i},'*');# 判断temp_str_2 是否是temp_str的子集,是则返回1,否则返回0judge=all(ismember(temp_str_2,temp_str));if judge==1min_(end+1)=j;endend
end
%清除S中不能作为最小割集子元素的集合并输出
S(min_)=[];
fprintf('该故障树的最小割集为:\n');
for i = 1:length(S)disp(S(i))
end

2.读入数据

输入的中间事件和顶事件之间的关系矩阵为[1 1 0 0 0 0 0 0 1 0 0 0 0 0;0 0 0 0 0 0 0 0 0 1 1 0 0 0;0 0 0 0 0 0 0 0 0 0 0 1 1 0;0 0 1 0 0 0 0 0 0 0 0 0 0 1;0 0 0 1 1 0 0 0 0 0 0 0 0 0;0 0 0 0 0 1 1 0 0 0 0 0 0 0;0 0 0 0 0 1 0 1 0 0 0 0 0 0];输入的门的顺序为顶事件、M1、M2···案例中为[1 1 0 1 1 1 1]


结果


最后,讲讲其中的一些处理要点。
最开始我犯了几个错误:
一是没有考虑到表达式中会存在平方项,所以要把最终顶事件的表达中的平方或者更高阶项去掉以后,再去求最小割集。
二是matlab相对而言更加人性化,它会把所有的顶事件基于一定的规则进行排序,这点有利于后期对一些非最小割集进行判断。
三是最小割集判断中会存在这样的情况:比如一个割集为{‘x2’,‘x6’},另一个为{‘x2’,‘x3’,‘x4’,‘x6’}最开始的代码没有考虑这样的情况,只是简单的用了某个字符串是否被包含在另一个字符串中,面对这种情况就无法判断出来。所有更好的办法是把每个割集的底事件都单独列出,判断一个cell数组是否为另一个的子集。这里由于每个割集都不会为空,所以使用ismember不用去考虑空集是任何集合的子集的情况。

Matlab故障树的最小割集的求解相关推荐

  1. 下行法求最小割集案例_机械产品典型失效分析案例

    原标题:机械产品典型失效分析案例 长期以来,机械结构设计习惯于传统的静强度设计,然而实际工作中,多数机械产品不属于静载工作范畴.大量的产品失效案例表明,百分之70以上的产品失效属于疲劳问题,另外有百分 ...

  2. matlab求解常系数线性差分方程,用matlab实现线性常系数差分方程的求解

    用matlab实现线性常系数差分方程的求解 数字信号处理课程设计 题目: 试实现线性常系数差分方程的求解 学院: 专业: 班级: 学号: 组员: 指导教师: 题目:用Matlab实现线性常系数差分方程 ...

  3. 共轭梯度下降法matlab,用matlab实现最速下降法,牛顿法和共轭梯度法求解实例

    用matlab实现最速下降法,牛顿法和共轭梯度法求解实例 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验的题目和要求 1.所属 ...

  4. matlab x12,用MATLAB最优化工具箱的相关函数编程求解: minf(X)=x12+2x22一2x1x2—4x1,X0=[0,0]T...

    用MATLAB最优化工具箱的相关函数编程求解: minf(X)=x12+2x22一2x1x2-4x1,X0=[0,0]T 更多相关问题 红旗H5的核心卖点:()A. 时尚B. 驾控C. 科技D. 安全 ...

  5. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...

  6. MATLAB进行不定积分和定积分的求解

    声明:本文章中数据来自清风老师数学建模课程 文章目录 MATLAB进行不定积分和定积分的求解 1.不定积分的求解 2.定积分的求解 MATLAB进行不定积分和定积分的求解 1.不定积分的求解 使用in ...

  7. 【Matlab DVRP】蚁群算法求解带距离的车辆路径规划问题【含源码 1040期】

    一.代码运行视频(哔哩哔哩) [Matlab DVRP]蚁群算法求解带距离的车辆路径规划问题[含源码 1040期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  8. matlab采用粒子群优化算法求解含压缩储能设备的综合能源系统运行优化

    matlab采用粒子群优化算法求解含压缩储能设备的综合能源系统运行优化. 结果包含储能设备24时出力,内燃机发电和发热出力,电制冷机出力等. 代码包含相关注释,方便对算法进行改进. 附相关参考文献. ...

  9. 1、Matlab线性规划(线性约束下极值求解)

    1.Matlab线性规划(线性约束下极值求解) 参考MATLAB数学建模经典案例实战(余胜威2015)

  10. matlab中带参数定积分的求解

    原文地址为: matlab中带参数定积分的求解 点击打开链接 1.首先,如果要对quad函数传递附加参数(Extra Parameters),应该先搞清楚quad函数的调用格式: 1 q = qu ...

最新文章

  1. 如何固化预训练模型的参数
  2. requests与urllib.request
  3. 异常php有必要吗,关于php异常的问题,到底有什么好处?
  4. 【代码实现接口测试】Requests库
  5. c#小游戏_C#小游戏—钢铁侠VS太空侵略者
  6. 项目管理:项目经理要具备的技能
  7. 写出高效优美的C语言代码(单片机)
  8. 现代汉语常用汉字3500表
  9. DVWA安装以及模块使用教程(一)
  10. @DependsOn
  11. 通过Ubuntu16.04编译Android下的osip动态库
  12. android 遥控器配置文件,[转载]android万能遥控器之一--前言及发射部分的简单实现...
  13. 请教dalao,为什么运行时二三步会合并到一起?
  14. 网站运行原理及开发流程
  15. 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于物联网的GY906红外测温门禁刷卡系统
  16. bat批量修改文件后缀
  17. 小程序 - 接入支付宝预授权支付 笔记
  18. 数据库修改表中的数据(SqlServer)
  19. JavaScript(JS)的DOM对象(JS的Document对象)----什么是DOM对象?
  20. 漫画:二分法系列篇(第一讲)

热门文章

  1. 树莓派+超声波模块测距
  2. android 投屏 版本号,安卓设备投屏画质模糊及投屏延迟的调整方法
  3. Switch使用方法
  4. python检测excel表是否存在空值
  5. IT男改变生活之12306选择上,中,下铺
  6. VBlog项目代码理解之后端
  7. 什么是数据库防火墙 数据库防火墙作用是什么
  8. Word手工双面打印
  9. Windows开启winrm
  10. 通过motion实现摄像头远程监控(转)