- Timestamp:
- May 3, 2010, 8:41:49 AM (16 years ago)
- Location:
- branches/tap_branches
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/tap_branches
- Property svn:mergeinfo changed
-
branches/tap_branches/psModules
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk/psModules merged eligible /branches/eam_branches/stackphot.20100406/psModules 27623-27653 /branches/pap_delete/psModules 27530-27595
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/tap_branches/psModules/src/objects/models/pmModel_RGAUSS.c
r25754 r27838 46 46 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0, 1.25 }; 47 47 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0, 4.0 }; 48 49 // Moderate parameter limits 50 static float *paramsMinModerate = paramsMinLax; 51 static float *paramsMaxModerate = paramsMaxLax; 48 52 49 53 // Strict parameter limits … … 253 257 psF64 PM_MODEL_RADIUS (const psVector *params, psF64 flux) 254 258 { 255 psF64 z , f;259 psF64 z; 256 260 int Nstep = 0; 257 261 psEllipseShape shape; … … 287 291 z0 = 0.0; 288 292 289 // perform a type of bisection to find the value 290 float f0 = 1.0 / (1 + z0 + pow(z0, PAR[PM_PAR_7])); 291 float f1 = 1.0 / (1 + z1 + pow(z1, PAR[PM_PAR_7])); 292 while ((Nstep < 10) && (fabs(z1 - z0) > 0.5)) { 293 z = 0.5*(z0 + z1); 294 f = 1.0 / (1 + z + pow(z, PAR[PM_PAR_7])); 295 if (f > limit) { 296 z0 = z; 297 f0 = f; 298 } else { 299 z1 = z; 300 f1 = f; 301 } 302 Nstep ++; 303 } 293 // starting guess: 294 z = 0.5*(z0 + z1); 295 float dz = 1.0; 296 297 for (int i = 0; (i < 10) && (fabs(dz) > 0.0001); i++) { 298 // use Newton-Raphson to minimize f(z) - limit = 0 299 float q = (1 + z + pow(z,PAR[PM_PAR_7])); 300 float dqdz = (1.0 + PAR[PM_PAR_7]*pow(z,PAR[PM_PAR_7] - 1.0)); 301 302 float f = 1.0 / q; 303 float dfdz = -dqdz * f / q; 304 305 dz = (f - limit) / dfdz; 306 307 // fprintf (stderr, "%f %f %f : %f %f\n", f, z, dz, dfdz, q); 308 z -= dz; 309 z = PS_MAX(z, 0.0); 310 } 311 304 312 psF64 radius = sigma * sqrt (2.0 * z); 305 313 … … 440 448 limitsApply = true; 441 449 break; 450 case PM_MODEL_LIMITS_MODERATE: 451 paramsMinUse = paramsMinModerate; 452 paramsMaxUse = paramsMaxModerate; 453 limitsApply = true; 454 break; 442 455 case PM_MODEL_LIMITS_STRICT: 443 456 paramsMinUse = paramsMinStrict;
Note:
See TracChangeset
for help on using the changeset viewer.
