mxArray * FT_set_H_MatrixPtr(const dd_MatrixPtr M) { mxArray * P; mxArray * tmpa; mxArray * tmpb; mxArray * tmpl; int i, j; double * a; double * b; double * l; int k=0; dd_rowrange ii; if ((M !=NULL) && (M->representation == dd_Inequality)) { const char *f[] = {"A", "B", "lin"}; int dims[] = {1}; P = mxCreateStructArray(1, dims, 3, f); if (set_card(M->linset)) { tmpl = mxCreateDoubleMatrix(1, set_card(M->linset), mxREAL); l = mxGetPr(tmpl); for (ii=1; ii<=M->rowsize; ii++) { if (set_member(ii, M->linset)) { l[k] = (int)ii; k ++; } } mxSetField(P, 0, "lin", tmpl); } tmpb = mxCreateDoubleMatrix(M->rowsize, 1, mxREAL); b = mxGetPr(tmpb); tmpa = mxCreateDoubleMatrix(M->rowsize, M->colsize - 1, mxREAL); a = mxGetPr(tmpa); for (i = 0 ; i < (int)(M->rowsize); i++) { b[i] = dd_get_d(M->matrix[i][0]); for (j = 0; j < (int)(M->colsize) - 1; j++) { a[i + j * (int)(M->rowsize)] = - dd_get_d(M->matrix[i][j + 1]); } } mxSetField(P, 0, "A", tmpa); mxSetField(P, 0, "B", tmpb); return P; } return 0; }
void dd_MLWriteAmatrix(dd_Amatrix A, long rowmax, long colmax) { long i,j; double a; if (A==NULL){ rowmax=0; colmax=0; } MLPutFunction(stdlink,"List",rowmax); for (i=0; i < rowmax; i++) { MLPutFunction(stdlink,"List",colmax); for (j=0; j < colmax; j++) { a=dd_get_d(A[i][j]); MLPutDouble(stdlink, a); } } }
void dd_MLWriteAmatrix(dd_Amatrix A, long rowmax, long colmax) { long i,j; double a; char *str=NULL; if (A==NULL){ rowmax=0; colmax=0; } MLPutFunction(stdlink,"List",rowmax); for (i=0; i < rowmax; i++) { MLPutFunction(stdlink,"List",colmax); for (j=0; j < colmax; j++) { #if defined GMPRATIONAL str=dd_MLGetStrForNumber(A[i][j]); MLPutString(stdlink, str); if (str!=NULL) free(str); #else a=dd_get_d(A[i][j]); MLPutDouble(stdlink, a); #endif } } }
mxArray * FT_set_V_MatrixPtr(const dd_MatrixPtr M) { mxArray * P; int mr, mv, m, i, j; int ir, iv; mxArray * tmpv; mxArray * tmpr; mxArray * tmpvpos; mxArray * tmprpos; mxArray * tmpl; double * v; double * r; double * vpos; double * rpos; double * l; int k=0; dd_rowrange ii; if ((M !=NULL) && (M->representation == dd_Generator)) { const char *f[] = {"V", "R", "rpos", "vpos", "lin"}; int dims[] = {1}; P = mxCreateStructArray(1, dims, 5, f); if (set_card(M->linset)) { tmpl = mxCreateDoubleMatrix(1, set_card(M->linset), mxREAL); l = mxGetPr(tmpl); for (ii=1; ii<=M->rowsize; ii++) { if (set_member(ii, M->linset)) { l[k] = (double)ii; k ++; } } mxSetField(P, 0, "lin", tmpl); } /* Count the rays and vertices */ mr = 0; mv = 0; for (i = 0 ; i < (int)(M->rowsize); i++) { if (dd_get_d(M->matrix[i][0]) == 0) { mr++; } else { mv++; } } m = mr + mv; /* Allocate the space in MATLAB */ tmpr = mxCreateDoubleMatrix(mr, M->colsize - 1, mxREAL); r = mxGetPr(tmpr); tmpv = mxCreateDoubleMatrix(mv, M->colsize - 1, mxREAL); v = mxGetPr(tmpv); tmprpos = mxCreateDoubleMatrix(mr, 1, mxREAL); rpos = mxGetPr(tmprpos); tmpvpos = mxCreateDoubleMatrix(mv, 1, mxREAL); vpos = mxGetPr(tmpvpos); ir = 0; iv = 0; for (i = 0 ; i < m; i++) { if (dd_get_d(M->matrix[i][0]) == 0) { /* This is a ray */ for (j = 0; j < (int)(M->colsize) - 1; j++) { r[ir + j * mr] = dd_get_d(M->matrix[i][j + 1]); } rpos[ir] = i + 1; ir++; } else { /* This is a vertex*/ for (j = 0; j < (int)(M->colsize) - 1; j++) { v[iv + j * mv] = dd_get_d(M->matrix[i][j + 1]); } vpos[iv] = i + 1; iv++; } } mxSetField(P, 0, "V", tmpv); mxSetField(P, 0, "R", tmpr); mxSetField(P, 0, "vpos", tmpvpos); mxSetField(P, 0, "rpos", tmprpos); return P; } return 0; }