The number of solutions is infinity. Explanation:
In your case you have 5 eqt and 45 unknowns, and
confirms your matrix is full row-rank. meaning all the 5 rows of A are independent vectors in R^45.
One particular solution can be obtained with backshlash (or lsqnonneg if you prefer)
>> fprintf('x0 = %s\n', mat2str(x0));
x0 = [0;0;5.93708057585062e-17;0.77741935483871;0;0;0;0;0;0;0;0.863636363636363;0;0.974789915966387;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0.999999999999998;0;0;0;0;0;0;0;0;0;0;0]
The kernel of a, meaning a basis of equation A*X = 0 can be obtained with NULL command.
It tells that the kernel has dimension 40 and a maths theorem tells it's equals to size(a,2)-rank(a).
To confirm X is the kernel, you can check with frobenus norm of max values (they are 0 at the numerical precision)
Now all solutions of a*x=b can be written as
where r is any arbitrary vector of size 40 x 1. The set of solutions is an affine space of dimension 40 and there are of course an infinity vectors in this huge space. To check it try:
r = rand(40,1);
x = x0 + X*r;
check if a*x = b
If you add the constraints (x >= 0), meaning
x(i) >= 0 for all i = 1,...
Then the general solution is the intersection of 45 half-hyperspace and the affine space of dimension 40.
It will be a polytope of dimension 40 living in R^45. It is still huge. This polytope is actually a an interior of the convex combination of n vertices, n can be as high as:
each of them is one particular solution of
There is no way you can enumerate them all and make on top of that an arbitrary sub-convex combination if that is your intention.