MATLAB Answers

Generate a multiplicative cascade process

6 views (last 30 days)
Tchilabalo
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.

  0 Comments

Sign in to comment.

Accepted Answer

darova
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)

  6 Comments

Show 3 older comments
darova
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
disp('1000 iterations. X and y was not found')
break;
end
k = k + 1;
end
Tchilabalo
Tchilabalo on 1 Jun 2019
Thanks very much for your help. It is working now.
darova
darova on 3 Jun 2019
I made a mistake before
Z2(imag(Z2)~=0) = inf; % remove complex numbers
% should be
Z2(imag(Z2)~=0) = NaN; % remove complex numbers

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by