/*********************************************************************** * mexqops.c : C mex file * * z = mexqops(blk,x,y,options); * * Input: blk = [n1, n2, ... nk] * x = n-vector or k-vector * y = n-vector, where n = n1+...+nk * * options = 1, z = k-vector, z(i) = * = 2, z = k-vector, z(i) = 2*xi(1)yi(1) - * = 3, z = n-vector, zi = x(i)*yi * = 4, z = n-vector, zi = x(i)*yi, zi(1) = -zi(1). * * SDPT3: version 3.0 * Copyright (c) 1997 by * K.C. Toh, M.J. Todd, R.H. Tutuncu * Last Modified: 2 Feb 01 ***********************************************************************/ #include #include /********************************************************** * ops1 **********************************************************/ void ops1(double *x, double *y, double *z, int numblk, int *cumblk, int options) { int j, l, jstart, jend; double tmp; if (options == 1) { for (l=0; l 1){ mexErrMsgTxt("mexqops: requires 1 output argument."); } /* CHECK THE DIMENSIONS */ numblk = mxGetN(prhs[0]); blksize = mxGetPr(prhs[0]); cumblk = (int*)mxCalloc(numblk+1,sizeof(int)); for (l=0; l= 3 && mxGetM(prhs[1]) != numblk) { mexErrMsgTxt("mexqops: dim not compatible..."); } if (mxIsSparse(prhs[1])) { irx = mxGetIr(prhs[1]); jcx = mxGetJc(prhs[1]); xtmp = mxGetPr(prhs[1]); x = (double*)mxCalloc(n,sizeof(double)); for (k=0; k= 3) { plhs[0] = mxCreateDoubleMatrix(n,1,mxREAL); z = mxGetPr(plhs[0]); ops3(x,y,z,numblk,cumblk,options); } return; } /**********************************************************/