To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / _FullBNT / BNT / CPDs / @gaussian_CPD / sample_node.m @ 8:b5b38998ef3b
History | View | Annotate | Download (599 Bytes)
| 1 |
function y = sample_node(CPD, pev) |
|---|---|
| 2 |
% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i) (gaussian) |
| 3 |
% y = sample_node(CPD, parent_evidence) |
| 4 |
% |
| 5 |
% pev{i} is the value of the i'th parent (if there are any parents)
|
| 6 |
% y is the sampled value (a scalar or vector) |
| 7 |
|
| 8 |
if length(CPD.dps)==0 |
| 9 |
i = 1; |
| 10 |
else |
| 11 |
dpvals = cat(1, pev{CPD.dps});
|
| 12 |
i = subv2ind(CPD.sizes(CPD.dps), dpvals(:)'); |
| 13 |
end |
| 14 |
|
| 15 |
if length(CPD.cps) == 0 |
| 16 |
y = gsamp(CPD.mean(:,i), CPD.cov(:,:,i), 1); |
| 17 |
else |
| 18 |
pev = pev(:); |
| 19 |
x = cat(1, pev{CPD.cps});
|
| 20 |
y = gsamp(CPD.mean(:,i) + CPD.weights(:,:,i)*x(:), CPD.cov(:,:,i), 1); |
| 21 |
end |
| 22 |
y = y(:); |