LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
MEFromMoments.m
1% [alpha, A] = MEFromMoments(moms)
2%
3% Creates a matrix-exponential distribution that has the
4% same moments as given.
5%
6% Parameters
7% ----------
8% moms : vector of doubles, length(2*M-1)
9% The list of moments. The order of the resulting
10% matrix-exponential distribution is
11% determined based on the number of moments given. To
12% obtain a matrix exponential distribution of order M,
13% 2*M-1 moments are required.
14%
15% Returns
16% -------
17% alpha : matrix, shape (1,M)
18% The initial vector of the matrix-exponential
19% distribution.
20% A : matrix, shape (M,M)
21% The matrix parameter of the matrix-exponential
22% distribution.
23%
24% References
25% ----------
26% .. [1] A. van de Liefvoort. The moment problem for
27% continuous distributions. Technical report,
28% University of Missouri, WP-CM-1990-02, Kansas City,
29% 1990.
30
31function [alpha, A] = MEFromMoments (moms)
32
33 function K = appie (rmom)
34 m = length (rmom);
35 if rem(m,2)==0
36 rm = rmom(1:m-1);
37 m = m / 2;
38 else
39 rm = rmom;
40 m = ceil(m/2);
41 end
42 rm = [1 rm];
43 f = zeros(2*m, 1);
44 f(1) = 1;
45 y = zeros(2*m, 1);
46 dd = zeros(2*m, 2*m);
47 n = 0;
48 k = 0;
49 q = 1;
50 d = zeros(m, 1);
51 alpha = zeros(m, m);
52 beta = zeros(m, 1);
53 for i=2:2*m
54 dd(i,i-1) = 1;
55 end
56 for i=1:2*m
57 ro = q*rm*f;
58 nold = n;
59 n = nold + 1;
60 yold = y;
61 if n>0 && ro~=0
62 if k>0
63 beta(k) = ro / (rm(2).^(d(k)+n-1));
64 end
65 k = k+1;
66 d(k) = n;
67 n = -n;
68 q = q / ro;
69 y = dd*f;
70 elseif n<=0
71 j = nold + d(k) + 1;
72 alpha(k,j) = ro / rm(2).^(j-1);
73 end
74 f = dd*f - ro*yold;
75 end
76
77 if sum(d)~=m
78 error ('Insufficient matrix order!');
79 end
80
81 K = zeros(m,m);
82 K(1,1) = rm(2);
83 for i=1:m-1
84 K(i,i+1) = rm(2);
85 end
86 ind = d(1);
87 for i=2:m
88 if ind<m
89 inc = d(i);
90 ind = ind + inc;
91 if ind<=m
92 K(ind, ind-inc-d(i-1)+1) = beta(i-1);
93 for j=1:inc
94 K(ind, ind-j+1) = alpha(i,j);
95 end
96 end
97 end
98 end
99 end
100
101 K = appie (ReducedMomsFromMoms(moms));
102 N = ceil(length(moms)/2);
103
104 T = zeros(N,N);
105 for i=1:N
106 for j=1:i
107 T(i,j) = 1;
108 end
109 end
110
111 U = zeros(N,N);
112 for i=1:N
113 for j=i:N
114 U(i,j) = 1 / (N-i+1);
115 end
116 end
117
118 alpha = zeros(1,N);
119 alpha(1) = 1;
120 alpha = alpha * inv(T) * U;
121 A = inv(-inv(U)*T*K*inv(T)*U);
122end