LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_jdfun.m
1%{
2%{
3 % @file pfqn_jdfun.m
4 % @brief AMVA joint-dependence function for non-product-form scaling.
5%}
6%}
7
8%{
9%{
10 % @brief AMVA joint-dependence function for non-product-form scaling.
11 % @fn pfqn_jdfun(nvec, jdscaling, classIdx)
12 % @param nvec Population state vector.
13 % @param jdscaling Cell array of joint-dependent scaling functions.
14 % @param classIdx Optional class index selecting eta_{i,r} (default: 1).
15 % @return r Scaling factor vector for each station.
16%}
17%}
18function r = pfqn_jdfun(nvec, jdscaling, classIdx)
19% R = PFQN_JDFUN(NVEC, JDSCALING, CLASSIDX)
20%
21% AMVA joint-dependence function. Returns, for every station i, the
22% reciprocal of the joint-dependent scaling
23% eta_i(n_i1, ..., n_iR)
24% evaluated at the per-class population vector NVEC(i,:), for class r=CLASSIDX.
25%
26% JDSCALING{i} is a function handle of the joint per-class population vector at
27% station i. It may return either
28% - a scalar, i.e. a scaling eta_i(n) shared by every class (broadcast, as
29% in the flagship min(ni(1),c)), or
30% - a vector of length R, i.e. per-class scalings [eta_{i,1}(n), ...,
31% eta_{i,R}(n)], of which element CLASSIDX is taken (Sauer chain-dependent
32% rate mu_{r,i}(n)).
33% Unlike PFQN_CDFUN (product-form beta_{i,r} depending on the own-class
34% marginal n_{i,r}), eta may read the joint vector arbitrarily and is
35% therefore NON-product-form: the AMVA result is an approximation with no
36% exactness/uniqueness guarantee. The numerical evaluation matches PFQN_CDFUN;
37% the distinction is semantic (product-form vs joint) and is carried by the
38% separate sn.jdscaling field.
39%
40% Copyright (c) 2012-2026, Imperial College London
41% All rights reserved.
42if nargin < 3 || isempty(classIdx)
43 classIdx = 1;
44end
45M = size(nvec,1);
46r = ones(M,1);
47if ~isempty(jdscaling)
48 for i = 1:M
49 if isempty(jdscaling{i})
50 continue
51 end
52 v = jdscaling{i}(nvec(i,:));
53 if numel(v) > 1
54 % per-class eta_{i,r}: select the requested class
55 v = v(classIdx);
56 end
57 r(i) = 1 / v;
58 end
59end
60end