commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gilles (JIRA)" <j...@apache.org>
Subject [jira] Updated: (MATH-519) GaussianFitter Unexpectedly Throws NotStrictlyPositiveException
Date Sat, 19 Feb 2011 22:12:38 GMT

     [ 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

        

Mime
View raw message