示例#1
0
int jmi_init_opt_dh(jmi_init_opt_t *jmi_init_opt, jmi_real_t *jac) {
    jmi_t* jmi;
    int retval;
    
    if (jmi_init_opt->jmi->init == NULL || jmi_init_opt->jmi->dae == NULL)  {
        return -1;
    }
    
    jmi = jmi_init_opt->jmi;

    /* Copy values into jmi->z */
    /* Copy free paramters */
    copy_p(jmi_init_opt);
    /* Copy variables */
    copy_v(jmi_init_opt);

    /* Evaluate jacobian */
    retval = jmi_init_dF0 (jmi, jmi_init_opt->der_eval_alg,
            JMI_DER_SPARSE, JMI_DER_PI | JMI_DER_PD | JMI_DER_DX | JMI_DER_X | JMI_DER_W,
            jmi_init_opt->der_mask_v, jac);

    if (jmi_init_opt->stat==1 && jmi_init_opt->jmi->opt->Ffdp->n_eq_F>0) {
        jmi_opt_dFfdp (jmi, jmi_init_opt->der_eval_alg,
                    JMI_DER_SPARSE, JMI_DER_PI | JMI_DER_PD | JMI_DER_DX | JMI_DER_X | JMI_DER_W,
                    jmi_init_opt->der_mask_v, jac + jmi_init_opt->dF0_n_nz);
    }

    return retval;

}
示例#2
0
int jmi_init_opt_h(jmi_init_opt_t *jmi_init_opt, jmi_real_t *res) {
    int retval;
    
    if (jmi_init_opt->jmi->init == NULL || jmi_init_opt->jmi->dae == NULL)  {
        return -1;
    }
    /*int i; */

    /* Copy values into jmi->z */
    /* Copy free paramters */
    copy_p(jmi_init_opt);
    /* Copy variables */
    copy_v(jmi_init_opt);
/*
    for (i=0;i<jmi_init_opt->n_x;i++) {
        printf("%f\n",jmi_init_opt->x[i]);
    }
*/
    retval = jmi_init_F0(jmi_init_opt->jmi, res);

    if (jmi_init_opt->stat==1 && jmi_init_opt->jmi->opt->Ffdp->n_eq_F>0) {
        retval = jmi_opt_Ffdp(jmi_init_opt->jmi, res+jmi_init_opt->jmi->init->F0->n_eq_F);
    }

/*
    printf("F0\n");
    for (i=0;i<jmi_init_opt->jmi->init->F1->n_eq_F;i++) {
        printf("%f\n",res[i]);
    }
*/
    return retval;
}
示例#3
0
int jmi_init_opt_f(jmi_init_opt_t *jmi_init_opt, jmi_real_t *f) {
    int i;
    int retval;
    
    if (jmi_init_opt->jmi->init == NULL) {
        return -1;
    }

    /* Copy values into jmi->z */
    /* Copy free paramters */
    copy_p(jmi_init_opt);
    /* Copy variables */
    copy_v(jmi_init_opt);

    *f = 0.0;

    if (jmi_init_opt->stat==1) {
        retval = jmi_opt_J(jmi_init_opt->jmi, f);
    } else {

        retval = jmi_init_F1(jmi_init_opt->jmi, jmi_init_opt->res_F1);
        if (retval<0) {
            return retval;
        }
        for (i=0;i<jmi_init_opt->jmi->init->F1->n_eq_F;i++) {
            /* Call cost function evaluation */
            *f += 0.5*jmi_init_opt->res_F1[i]*jmi_init_opt->res_F1[i];
        }
    }
    return retval;

}
示例#4
0
int jmi_init_opt_df(jmi_init_opt_t *jmi_init_opt, jmi_real_t *df) {
    int i;
    int retval;
    jmi_t* jmi;
    
    if (jmi_init_opt->jmi->init == NULL) {
        return -1;
    }

    jmi = jmi_init_opt->jmi;

    /* Copy values into jmi->z */
    /* Copy free paramters */
    copy_p(jmi_init_opt);
    /* Copy variables */
    copy_v(jmi_init_opt);

    for (i=0;i<jmi_init_opt->n_x;i++) {
        df[i] = 0;
        /*printf("%f\n",jmi_init_opt->x[i]); */
    }

    if (jmi_init_opt->stat==1) {
        retval = jmi_opt_dJ(jmi_init_opt->jmi, jmi_init_opt->der_eval_alg, JMI_DER_DENSE_COL_MAJOR,
                    JMI_DER_PI | JMI_DER_PD | JMI_DER_DX | JMI_DER_X | JMI_DER_W, jmi_init_opt->der_mask_v,df);

    } else {

        /* Evaluate jacobian */
        retval = jmi_init_dF1(jmi, jmi_init_opt->der_eval_alg,
            JMI_DER_SPARSE, JMI_DER_PI | JMI_DER_PD | JMI_DER_DX | JMI_DER_X | JMI_DER_W,
            jmi_init_opt->der_mask_v, jmi_init_opt->dF1_dv);
        if (retval<0) {
            return retval;
        }
/*
        printf("dF1\n");
        for (i=0;i<jmi_init_opt->dF1_dv_n_nz;i++) {
            printf("%f\n",jmi_init_opt->dF1_dv[i]);
        }
*/
        /* Evaluate residual */
        retval = jmi_init_F1(jmi, jmi_init_opt->res_F1);
        if (retval<0) {
            return retval;
        }

        /* Initialize the gradient vector */
        for (i=0;i<jmi_init_opt->n_x;i++) {
            df[i] = 0.;
        }

        /* Compute gradient */
        for (i=0;i<jmi_init_opt->dF1_dv_n_nz;i++) {
            df[jmi_init_opt->dF1_dv_icol[i]-1] +=
                jmi_init_opt->dF1_dv[i]*
                jmi_init_opt->res_F1[jmi_init_opt->dF1_dv_irow[i]-1];
/*          printf("** %d %d %d %f %f \n",i,jmi_init_opt->dF1_dv_irow[i],jmi_init_opt->dF1_dv_icol[i],jmi_init_opt->dF1_dv[i],jmi_init_opt->res_F1[jmi_init_opt->dF1_dv_irow[i]-1]); */
        }

/*
        for(i=0;i<jmi_init_opt->n_x;i++) {
            printf("%f\n",df[i]);
        }
*/
    }
    return retval;

}
示例#5
0
void
mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
{
	int buflen, status;
	char *input_buf;
	
	if (nrhs<1){
		mexErrMsgTxt("Input 1 must be a row vector string");
	}
		
	
	/* 1. input must be a string and row vector */
	if (mxIsChar(prhs[0]) && (mxGetM(prhs[0]) == 1)) {
	/* get the length of the input string */
		buflen = mxGetN(prhs[0]) + 1;
		/* allocate memory for input and output strings */
    		input_buf=mxCalloc(buflen, sizeof(char));
		/* copy the string data from prhs[0] into a C string input_ buf. */
    		status = mxGetString(prhs[0], input_buf, buflen);
		if (strcmp(input_buf,"hull\0") == 0) {
			hull(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"extreme\0") == 0) {
			extreme(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"reduce_h\0") == 0) {
			reduce_h(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"reduce_v\0") == 0) {
			reduce_v(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"copy_v\0") == 0) {
			copy_v(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"copy_h\0") == 0) {
			copy_h(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"v_hull_extreme\0") == 0) {
			v_hull_extreme(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"adj_extreme\0") == 0) {
			adj_extreme(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"solve_lp\0") == 0) {
			solve_lp(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"solve_lp_DS\0") == 0) {
			solve_lp_DS(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"find_interior\0") == 0) {
			find_interior(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"find_interior_DS\0") == 0) {
			find_interior_DS(nlhs, plhs, nrhs -1, prhs + 1);
			return;
		}
		if (strcmp(input_buf,"version\0") == 0) {
			printf("Version %s\n", CDDMEX_VERSION);
			return;
		}
		mexErrMsgTxt("Unknown function");		
	} else {
		mexErrMsgTxt("Input 1 must be a row vector string");
	}	
}
示例#6
0
static void copy_v(void* dst, const S* src, int n, Rest&&... rest) {
    SkASSERTF(((uintptr_t)dst & (alignof(S)-1)) == 0,
              "Expected %p to be aligned for at least %zu bytes.", dst, alignof(S));
    sk_careful_memcpy(dst, src, n*sizeof(S));
    copy_v(SkTAddOffset<void>(dst, n*sizeof(S)), std::forward<Rest>(rest)...);
}