[
https://issues.apache.org/jira/browse/MATH-519?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gilles updated MATH-519:
------------------------
Attachment: GaussianFitter.java
I guess that the clean solution would be to be able to specify constraints such
that the optimizer won't try invalid parameters.
An ugly workaround would be that the "CurveFitter" internally catches all
"RuntimeException"s generated by the function, and consider the residuals to be
infinite. But this would violate the stated policy that CM does not catch
"MathUserException"s (and could have nasty side-effects when the exception is
really unexpected).
I've tried another workaround in "GaussianFitter" (see attached file) whereby
an invalid parameter is turned into the function returning "NaN"
("POSITIVE_INFINITY" also works).
Let me know if you see any issues with this solution or if would be an adequate
solution for this problem.
> GaussianFitter Unexpectedly Throws NotStrictlyPositiveException
> ---------------------------------------------------------------
>
> Key: MATH-519
> URL: https://issues.apache.org/jira/browse/MATH-519
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.0
> Reporter: Ole Ersoy
> Fix For: 3.0
>
> Attachments: GaussianFitter.java, GaussianFitter2Test.java
>
> Original Estimate: 4h
> Remaining Estimate: 4h
>
> Running the following:
> double[] observations =
> {
> 1.1143831578403364E-29,
> 4.95281403484594E-28,
> 1.1171347211930288E-26,
> 1.7044813962636277E-25,
> 1.9784716574832164E-24,
> 1.8630236407866774E-23,
> 1.4820532905097742E-22,
> 1.0241963854632831E-21,
> 6.275077366673128E-21,
> 3.461808994532493E-20,
> 1.7407124684715706E-19,
> 8.056687953553974E-19,
> 3.460193945992071E-18,
> 1.3883326374011525E-17,
> 5.233894983671116E-17,
> 1.8630791465263745E-16,
> 6.288759227922111E-16,
> 2.0204433920597856E-15,
> 6.198768938576155E-15,
> 1.821419346860626E-14,
> 5.139176445538471E-14,
> 1.3956427429045787E-13,
> 3.655705706448139E-13,
> 9.253753324779779E-13,
> 2.267636001476696E-12,
> 5.3880460095836855E-12,
> 1.2431632654852931E-11
> };
>
> GaussianFitter g =
> new GaussianFitter(new LevenbergMarquardtOptimizer());
>
> for (int index = 0; index < 27; index++)
> {
> g.addObservedPoint(index, observations[index]);
> }
> g.fit();
> Results in:
> org.apache.commons.math.exception.NotStrictlyPositiveException: -1.277 is
> smaller than, or equal to, the minimum (0)
> at
> org.apache.commons.math.analysis.function.Gaussian$Parametric.validateParameters(Gaussian.java:184)
> at
> org.apache.commons.math.analysis.function.Gaussian$Parametric.value(Gaussian.java:129)
> I'm guessing the initial guess for sigma is off.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira