📄 bvr_delta.c
字号:
/* * [delta] = bvr_delta(beacon_vectors, C_k) * * * Inputs: * Outputs: */#include <mex.h>#include <string.h>void bvr_delta(double * delta, double* beacon_vectors, double *C_k,int n, int k, int r){ int i,j, index, src, dest, offset, idx; double delta_plus; double delta_minus, diff; double *C_k_dest; /*mexPrintf("n=%d,r=%d,k=%d\n",n,r,k); mexPrintf("beacon(1,1)%f,(2,1)%f\n",beacon_vectors[0],beacon_vectors[1]); */ for (dest=0; dest<n ; dest++){ C_k_dest = C_k + dest; for (src=0,offset=dest*n; src<n; src++){ delta_plus =0.0; delta_minus = 0.0; for (i=0; i<k; i++){ idx = (int)(C_k_dest[i*n]-1); diff = beacon_vectors[src+idx*n]-beacon_vectors[dest+idx*n]; if (diff>0.) delta_plus += diff; else delta_minus -= diff; delta[offset+i*n*n]=10*delta_plus+delta_minus; /* mexPrintf("src,%d,dest %d, i%d,%f(offset %d)\n",src,dest,i, delta[offset+i*n*n],offset+i*n*n); */ } offset+=1; } } return;}void mexFunction(int nlhs, mxArray** plhs, int nrhs, const mxArray** prhs){ int n, k, r, n1; int dims[3]; if (nrhs != 2) mxErrMsgTxt("Too few arguments"); n = mxGetM(prhs[0]); r = mxGetN(prhs[0]); n1 = mxGetM(prhs[1]); k = mxGetN(prhs[1]); if (n1!=n) mxErrMsgTxt("Beacons numbers don't match"); dims[0]=n; dims[1]=n; dims[2]=k; plhs[0] = mxCreateNumericArray(3, dims, mxDOUBLE_CLASS, mxREAL); bvr_delta(mxGetPr(plhs[0]), mxGetPr(prhs[0]), mxGetPr(prhs[1]), n,k,r); /*dijkstra(mxGetPr(plhs[0]), mxGetPr(plhs[1]), mxGetPr(plhs[2]), mxGetJc(prhs[0]), mxGetIr(prhs[0]), mxGetPr(prhs[0]), s, n);*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -