Consider an Matrix of dimension n1xn1
. I would like to get a list with n2
distinct matrix (of dimension n1xn1
), because it involves random numbers. The elements of matrix are numbers 0 or 1. The rules are:
1- The elements of main diagonal of matrix is all 0;
2- The elemnts of first line are 1 with probability z/j and 0 with probability 1 - z/j, where z is a random integer between [1,j-1];
3- The elements of first column are 1 with probability k/i and 0 with probability 1 - k/i, where k is a random integer between [1,i-1];
4- The elements of matrix for i>1, j>1 and i≠j are z/j with prabability 1 and 1-z/j with probability 0, where z is a random integer between [1,j-1].
n1 = 5; (*dimension of matrix*)
n2 = 10; (*number of matrix*)
z[j_] := RandomInteger[{1, j - 1}];(*generate random number integer to first line*)
k[i_] := RandomInteger[{1, i - 1}];(*generate random number integer to first column*)
l[i_, j_] :=
If[j == 1 && i > 1, RandomChoice[{k[i]/i, 1 - k[i]/i} -> {1, 0}],
If[i == 1 && j > 1, RandomChoice[{z[j]/j, 1 - z[j]/j} -> {1, 0}],
RandomChoice[{k[i]/i, 1 - k[i]/i} -> {1, 0}]]];
Generating a matrix using SparseArray
s = SparseArray[{{i_, i_} -> 0, {i_, j_} -> l[i, j]}, {n1, n1}]
For generate a list with n2 matrix (n1 x n1) I used table:
t= Table[s, {k,10}]
However, the output returns n2 identical matrices. I need different matrices.
So, I decided to use the following command:
s = Table[
SparseArray[{{i_, i_} -> 0, {i_, j_} -> l[i, j]}, {n1, n1}], {n, n2}]
That returns the mistake/error
RandomChoice::weightv: The weights given on the left-hand side of {0,0}->{1,0} should be a list of positive numerical quantities having the same length as the list given on the right-hand side. >>
RandomChoice::weightv: The weights given on the left-hand side of {0,0}->{1,0} should be a list of positive numerical quantities having the same length as the list given on the right-hand side. >>
Can anybody help me?
{k[1], 1-k[1]}
can evaluate to{0, 0}
. $\endgroup$ – vapor Apr 2 '17 at 15:07