# Generate a multiplicative cascade process

6 views (last 30 days)
Tchilabalo on 31 May 2019
Commented: darova on 3 Jun 2019
I am trying to simulate a multiplicative cascade process. At the first iteration i call four random numbers (between 0 and 1); these numbers are the initial probabilities. In the following step, i call again four random numbers and then multiply them by the parent probabilities as shown in the figure. I repeat the process 6 times. At each iteration, i want the four probabilities (x, y, z, and w) to satisfy the following conditions:
(1) x^2+y^2+z^2+w^2== m, where m is a constant
(2) x+y+z+w==1
I have tried to use the "solve" and "vapsolve" tools in matlab, but the problem is that i am getting negative numbers and zero values. I have also tried to set x and y so that i only have two unknowns, but it didn't help.
I will appreciate any help.

darova on 31 May 2019
Probably should think about initial m, w, z
m = 0.2;
z = rand;
w = rand;
syms x
y = -x-z-w+1;
eq = x^2+y^2+z^2+w^2 -m;
X = solve(eq,x);
x = double(X)
Y = matlabFunction(y);
Y(x)

darova on 1 Jun 2019
Are those numbers can be complex or negative?
while ((x<=0)&&(y<=0)&&(z<=0)&&(w<=0)&&((x+y+w+z)~=1)&&((x^2/m+y^2/m+w^2/m+z^2/m)~=1))
Also you don't have to write all those conditions in one line:
tol = 1E-3;
b(1) = x<= 0;
% ...
% 0.999 ~= 1. Introduce some tolerance
b(5) = abs(1-x-y-z-w) < tol;
b(6) = abs(m - x*x-y*y-z*z-w*w) < tol;
% if don't want complex number
b(7) = abs(imag(x)) < tol; % imiginary part smaller than tolerance
while any(b) == 0 % do loop if one of condition is not met
Remember also that not for any w or z exist such x and y that met the condition
k = 0; % some counter of iterations
while ...
if k > 1000
break;
end
k = k + 1;
end
Tchilabalo on 1 Jun 2019
Thanks very much for your help. It is working now.
darova on 3 Jun 2019
Z2(imag(Z2)~=0) = inf; % remove complex numbers
% should be
Z2(imag(Z2)~=0) = NaN; % remove complex numbers