| 1 | |
| 2 | |
| 3 | double square_test (VSArray p, void* _dat){ |
| 4 | double val=0; |
| 5 | for(int k=0; k<p.len;k++){ |
| 6 | val+=(k+1)*3*(p.dat[k]-k)*(p.dat[k]-k); |
| 7 | } |
| 8 | return val; |
| 9 | } |
| 10 | |
| 11 | void test_gradientoptimizer(){ |
| 12 | int numruns=10; |
| 13 | |
| 14 | fprintf(stderr,"********** Gradient Optimizer Test:\n"); |
| 15 | |
| 16 | for(int i=0; i<numruns; i++){ |
| 17 | double residual; |
| 18 | VSArray params = vs_array_new(i+1); |
| 19 | VSArray stepsizes = vs_array_new(i+1); |
| 20 | for(int k=0; k<i+1; k++){ |
| 21 | params.dat[k]= 20-k; |
| 22 | stepsizes.dat[k]= 0.1; |
| 23 | } |
| 24 | |
| 25 | VSArray result = vsGradientDescent(square_test, params, NULL, 50, stepsizes, 1e-15, &residual); |
| 26 | fprintf(stderr,"** %iD: residual %lg :", i+1, residual); |
| 27 | vs_array_print(result, stderr); |
| 28 | fprintf(stderr,"***\n"); |
| 29 | test_bool(residual<1e-10); |
| 30 | vs_array_free(result); |
| 31 | vs_array_free(params); |
| 32 | } |
| 33 | } |