1classdef TaylorSeriesClassic < handle
2 properties (Access =
private)
5 is_process_not_binded = true
9 function obj = TaylorSeriesClassic(proc, order, step)
14 obj.bind(proc, order, step);
18 function bind(obj, proc, order, step)
24 obj.h = step / proc.get_min_element();
28 libqbd.raise_error('step must be not equal 0.');
31 obj.B = libqbd.QInPow(proc);
32 obj.B = obj.B.mull_by_const(obj.h);
33 obj.compute_right_matrix(order);
34 obj.is_process_not_binded = false;
37 function value = get_step(obj)
42 function dist = get_dist(obj, max_time, pi_0)
48 pi = obj.B.mull_by_vector(pi);
57 function values = get_mean_clients(obj, max_time, pi_0)
60 values = obj.compute_clients(pi);
63 pi = obj.B.mull_by_vector(pi);
64 values(end + 1) = obj.compute_clients(pi); %#ok<AGROW>
72 function values = get_mean_queue(obj, queue_size_vector, max_time, pi_0)
75 values = obj.compute_queue(queue_size_vector, pi);
78 pi = obj.B.mull_by_vector(pi);
79 values(end + 1) = obj.compute_queue(queue_size_vector, pi); %#ok<AGROW>
88 methods (Access =
private)
90 if obj.is_process_not_binded
91 libqbd.raise_error('Not binded to the process.');
96 function compute_right_matrix(obj, order)
97 order = min(order, libqbd.get_max_factor());
100 P =
P.inc_power(obj.h);
101 tmp =
P.mull_by_const(libqbd.get_one_div_by_factor(k));
102 obj.B = obj.B.plus_assign(tmp);
104 obj.B = obj.B.add_identity_matrix();
107 function value = compute_clients(~, pi)
110 value = value + (k - 1) * sum(pi{k});
114 function value = compute_queue(~, queue_size_vector, pi)
116 qvec = libqbd.as_row_vector(queue_size_vector{1});
118 if k <= numel(queue_size_vector)
119 qvec = libqbd.as_row_vector(queue_size_vector{k});
123 value = value + sum(libqbd.as_row_vector(pi{k}) .* qvec);