Index: /trunk/psLib/test/math/tst_psMinimizeLMM.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimizeLMM.c	(revision 7159)
+++ /trunk/psLib/test/math/tst_psMinimizeLMM.c	(revision 7160)
@@ -13,5 +13,5 @@
 #define NUM_ITERATIONS 100
 #define ERR_TOL 1e-6
-#define NUM_DATA_POINTS 100
+#define NUM_DATA_POINTS 300
 #define NUM_PARAMS 3
 float expectedParm[NUM_PARAMS];
@@ -23,5 +23,5 @@
 {
     return params->data.F32[0] *
-           expf(- params->data.F32[1] * (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1]))) +
+           expf(- (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1]) / 2.0 / PS_SQR(params->data.F32[1]))) +
            params->data.F32[2];
 }
@@ -32,7 +32,6 @@
                 )
 {
-    deriv->data.F32[0] = expf(- params->data.F32[1] * (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1])));
-    deriv->data.F32[1] = - params->data.F32[0] * (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1])) *
-                         expf(- params->data.F32[1] * (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1])));
+    deriv->data.F32[0] = expf(- (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1]) / 2.0 / PS_SQR(params->data.F32[1])));
+    deriv->data.F32[1] = params->data.F32[0] * (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1]) / 2.0 / PS_SQR(params->data.F32[1])) / params->data.F32[1] / params->data.F32[1] / params->data.F32[1] * expf(- (PS_SQR(x->data.F32[0]) + PS_SQR(x->data.F32[1]) / 2.0 / PS_SQR(params->data.F32[1])));
     deriv->data.F32[2] = 1.0;
 }
@@ -80,5 +79,5 @@
 
     trueParams->data.F32[0] = 100.0;    // Normalisation
-    trueParams->data.F32[1] = 0.1;      // Shape
+    trueParams->data.F32[1] = 3.0;      // Width
     trueParams->data.F32[2] = 10.0;     // Background
 
@@ -94,5 +93,6 @@
         x->data.F32[1] = 10.0 * psRandomUniform(rng) - 5.0;
         ordinates->data[i] = x;
-        coordinates->data.F32[i] = function(params, x) + 0.1 * psRandomGaussian(rng); // Add some noise
+        // Add some noise
+        coordinates->data.F32[i] = function(params, x) + 0.1 * (2.0 * psRandomGaussian(rng) - 1.0);
         errors->data.F32[i] = 0.1;
         printf("Data %ld: (%f, %f) --> %f\n", i, x->data.F32[0], x->data.F32[1], coordinates->data.F32[i]);
