|
1 | 1 | import { Matrix, WrapperMatrix2D, NNMF } from './index';
|
2 | 2 |
|
3 |
| -function linearCombination(X, epsilon) { |
| 3 | +function linearCombination(X) { |
4 | 4 | if (X.rows > 1) {
|
5 | 5 | X = X.transpose();
|
6 | 6 | }
|
7 | 7 | let solutions = Matrix.zeros(1, X.columns);
|
8 | 8 | let notTheEnd = true;
|
9 | 9 | let vecVal = X.get(0, X.columns - 1);
|
10 | 10 | let tmp = 0;
|
11 |
| - while (vecVal > epsilon && notTheEnd) { |
| 11 | + while ((vecVal > 0) && notTheEnd) { |
12 | 12 | notTheEnd = false;
|
13 |
| - for (let i = 0; i < X.columns; i++) { |
| 13 | + for (let i = 0; i < X.columns - 1; i++) { |
14 | 14 | tmp = vecVal - X.get(0, i);
|
15 |
| - if (tmp > epsilon) { |
| 15 | + if (tmp >= 0 && X.get(0, i) > 0) { |
| 16 | + console.table(solutions); |
16 | 17 | solutions.set(0, i, solutions.get(0, i) + 1);
|
17 | 18 | vecVal = tmp;
|
18 | 19 | notTheEnd = true;
|
@@ -73,7 +74,19 @@ export function positiveLinearCombination(base, vector, options = {}) {
|
73 | 74 |
|
74 | 75 | console.table(nA.X);
|
75 | 76 |
|
76 |
| - solutions = linearCombination(nA.X, nA.X.min() - Number.EPSILON); |
| 77 | + solutions = linearCombination(nA.X, nA.X.min() + Number.EPSILON); |
77 | 78 | return (solutions);
|
78 | 79 | }
|
79 | 80 | }
|
| 81 | +let base = new Matrix([ |
| 82 | + [0, 20, 100, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
| 83 | + [0, 0, 0, 0, 0, 30, 100, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
| 84 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 100, 5, 0, 0, 0, 0, 0, 0], |
| 85 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 100, 15, 0, 0, 0], |
| 86 | + [0, 0, 0, 0, 0, 0, 0, 10, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0], |
| 87 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 100, 10], |
| 88 | +]); |
| 89 | +let vector = new Matrix([[0, 20, 100, 20, 0, 0, 0, 0, 0, 5, 100, 5, 0, 0, 0, 20, 200, 20]]); |
| 90 | +let solutions = Matrix.zeros(1, base.columns); |
| 91 | + |
| 92 | +solutions = positiveLinearCombination(base, vector); |
0 commit comments