4 % @brief AMVA joint-dependence function
for non-product-
form scaling.
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.
18function r = pfqn_jdfun(nvec, jdscaling, classIdx)
19% R = PFQN_JDFUN(NVEC, JDSCALING, CLASSIDX)
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.
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
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.
40% Copyright (c) 2012-2026, Imperial College London
42if nargin < 3 || isempty(classIdx)
49 if isempty(jdscaling{i})
52 v = jdscaling{i}(nvec(i,:));
54 % per-
class eta_{
i,r}: select the requested
class