Exemplo n.º 1
0
void bisection(all_data * data,double * w, double* v, prox_data * p_data, int i)
{
	double lambda = 0,lambda_old = 0, vi;
	double * wi = malloc(sizeof(double)*p_data->connections[i][0]);
	
	/******** Compute lower and upper bound (search region) *********/
	double sumu = testLambda(wi, &vi,w,*v,p_data,i,lambda);

	if ( sumu > vi ) {  /* Check condition */
		lambda = 1;
		sumu = testLambda(wi, &vi,w,*v,p_data,i,lambda);
		while ( sumu > vi ) {
			lambda_old = lambda;
			lambda *= 2;
			sumu = testLambda(wi,&vi,w,*v,p_data,i,lambda);
		}
	}
	double low = lambda_old;
	double up = lambda;

	/******** Bisection ********/
	double epsilon = 1e-3;

	while ( (up - low) > epsilon ) {
		lambda = (low + up) / 2;
		sumu = testLambda(wi,&vi,w,*v,p_data,i,lambda);
		if ( sumu <= vi ) up = lambda; 
		else low = lambda; 
	}
	for ( int k = 1; k <= *(p_data->connections[i]); k++ ){ 
		w[p_data->connections[i][k]] = wi[k-1];
	}
	*v = vi;
	free(wi);
}
Exemplo n.º 2
0
Arquivo: testgc.c Projeto: lborwell/gc
void testBasics(){
    runTest(testInt());
    runTest(testBool());
    runTest(testString());
    runTest(testData());
    runTest(testBigdata());
    runTest(testRange());
    runTest(testLambda());
    runTest(testSoft());
    runTest(testPhantom());
    runTest(testWeak());
}