public void add(CMatrix m) { int n = _size; while ((n--) != 0) { _m[n].add(m[n]); } }
public void substract(CMatrix m) { int n = _size; while ((n--) != 0) { _m[n].substract(m[n]); } }
public CMatrix(CMatrix m) { _size = m.size; _m = new CVector[_size]; for (int i = 0; i < _size; i++) { _m[i] = new CVector(m._m[i]); } }
public static CEigen calculate(CMatrix covarian) { int n = covarian.size + 1; double [,] buff = new double[n, n]; double [,] z = new double[n, n]; double [] d = new double[n]; int [] flag = new int[n]; int i, j; for (i = 1; i < n; i++) { for (j = 1; j < n; j++) { buff[i, j] = covarian[i - 1][j - 1]; } } n--; sevd.symmetricevd(buff, n, 1, true, ref d, ref z); for (i = 0; i < n; i++) { d[i] = d[i + 1]; flag[i] = i; } d[i] = 0.0; // urutin dulu d dan z Array.Sort(d, flag, new CEigenComparer()); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { buff[i, j] = z[i + 1, flag[j] + 1]; } } return(new CEigen(n, buff, d)); }
public CMatrix inverse() { CMatrix a = new CMatrix(this); CMatrix b = new CMatrix(_size, false); int i, j, i1; for (j = 0; j < _size; j++) { i1 = j; for (i = j + 1; i < _size; i++) { if (Math.Abs(a[i][j]) > Math.Abs(a[i1][j])) { i1 = i; } } a.swapRow(i1, j); b.swapRow(i1, j); if (a[j][j] == 0) { return(null); } b[j].divide(a[j][j]); a[j].divide(a[j][j]); for (i = 0; i < _size; i++) { if (i != j) { b[i].substract(b[j].multiplyCopy(a[i][j])); a[i].substract(a[j].multiplyCopy(a[i][j])); } } } return(b); }