The input is the number of dimensions M and the parameter H.
The output is a point cloud W involving N points.
W is N uniformly distributed points with M dimensions on the unit hyperplane.
The relationship between M, H and point cloud size N is as follows.
In the case of M=3 dimensions, the results for cases where H is 1 to 6 are as follows.
Ex)
- [W,N] = SLD(M=3,H=2) -> W = [0 0 1; 0 .5 .5; 0 1 0; .5 0 .5; .5 .5 0; 1 0 0]; N = 6;
- [W,N] = SLD(M=5,H=2) -> W = [0 0 0 0 1; 0 0 0 .5 .5; 0 0 0 1 0; 0 0 .5 0 .5; 0 0 .5 .5 0; 0 0 1 0 0; 0 .5 0 0 .5; 0 .5 0 .5 0; 0 .5 .5 0 0; 0 1 0 0 0; .5 0 0 0 .5; .5 0 0 .5 0; .5 0 .5 0 0; .5 .5 0 0 0; 1 0 0 0 0]; N = 15;
Reference
- H. Scheffé, “Experiments with mixtures," Journal of the Royal Statistical Society: Series B (Methodological), Vol. 20, No. 2, pp. 344–360, 1958.
- I. Das and J. E. Dennis, “Normal-boundary intersection: A new method for generating the Pareto surface in nonlinear multicriteria optimization problems," SIAM Journal on Optimization, Vol. 8, No. 3, pp. 631–657, 1998.
Solution Stats
Problem Comments
1 Comment
Solution Comments
Show comments
Loading...
Problem Recent Solvers9
Suggested Problems
-
1323 Solvers
-
Return elements unique to either input
807 Solvers
-
Flip the vector from right to left
10664 Solvers
-
372 Solvers
-
Calculate Amount of Cake Frosting
28927 Solvers
More from this Author10
Problem Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
The tests for W are pitiful. I solved this for real, with some real checks in my scratch pad.
More specifically,
After the check of N, there is a brief, repeatable set of tests which can confirm if W is valid, without providing W in the test. I'm pretty sure any edge cases it misses would be harder to exploit than actually solving the stated problem.
assert(isequal(size(W),[N M]))
assert(all(ismembertol(W*H,0:H),'all'))
WNI=round(W*H); % pretty safe now
assert(all(sum(WNI,2)==H))
assert(isequal(size(unique(WNI,'rows')),[N,M]))
assert(isequal(unique(WNI,'rows'),WNI))