赞
踩
安装包的下载与加载主要参考:
https://blog.csdn.net/moodytong/article/details/8122327
问题1:
简单案例运行后,图形绘制没有箭头,出现错误提示:
未定义与 ‘matlab.graphics.axis.Axes’ 类型的输入参数相对应的运算符 ‘*’。
出错 arrow (line 393) ax = o * gca;
出错 draw_graph (line 82) h = arrow([x(i)+dx1 y(i)+dy1],[x(k)-dx2 y(k)-dy2],‘BaseAngle’,30);
这个应该是arrow.m 这边有些出问题了,论坛上有人说更新arrow.m可以解决
找到新版本arrow.m替换后成功绘制出箭头。
新版本arrow.m见:
https://download.csdn.net/download/suiya_jessica/11104047
问题2:
使用BNT建造一个贝叶斯网,了解贝叶斯网的几个关键参数如何设定。
%使用BNT官方教程的示例 %建立N*N的matrix记录DAG N = 4; dag = zeros(N,N); C = 1; S = 2; R= 3; W =4; dag(C,[R S]) = 1; dag(R,W) = 1; dag(S,W)=1; %离散节点,节点为二值量 discrete_nodes = 1:N; node_sizes = 2*ones(1,N); %make the Bayes net bnet = mk_bnet(dag, node_sizes); %默认是离散节点 %bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes); bnet.CPD{C} = tabular_CPD(bnet,C,[0.5 0.5]);%手动输入的条件概率 bnet.CPD{R} = tabular_CPD(bnet,R,[0.8 0.2 0.2 0.8]); bnet.CPD{S} = tabular_CPD(bnet,S,[0.5 0.9 0.5 0.1]); bnet.CPD{W} = tabular_CPD(bnet,W,[1 0.1 0.1 0.01 0 0.9 0.9 0.99]); figure draw_graph(dag) engine = jtree_inf_engine(bnet); evidence = cell(1,N); evidence{W} = 2; [engine, loglik] = enter_evidence(engine, evidence); marg = marginal_nodes(engine, S); marg.T p = marg.T(2); evidence{R} = 2; [engine, loglik] = enter_evidence(engine, evidence); marg = marginal_nodes(engine, S); p = marg.T(2);
3,计算图的连通性
没有看到BNT中有此函数,参考教程自己写了个程序
%图的连通性计算 function[S,Q] = concom(G) n = size(G,1); m = sum(sum(G))/2; S = 0; j = 1; C = 1; Q = zeros(n,1); for i=1:n for j=(i+1):n if G(i,j) == 1 if Q(i) == Q(j) if Q(i) == 0 Q(i) = C;Q(j) = C; C = C+1; S = S+1; end else if Q(i) == 0 Q(i) = Q(j); elseif Q(j) == 0 Q(j) = Q(i); else for k=1:n if Q(k) == Q(i) Q(k) = Q(j); end end S = S-1; end end end end end S; Q;
后记:matlab中自带的图相关函数暂时够用,为了去掉一些不必要的警告,卸载了BNT
rmpath(genpath(‘D:\Program Files\MATLAB\R2018b\toolbox\FullBNT-1.0.4\BNT’));
savepath
这下打开再也没有警告了,清净了哈哈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。