http://git-wip-us.apache.org/repos/asf/commons-complex/blob/b3576eeb/site-content/.svn/pristine/04/0400f403db78a35ecc7c09ac8968ab156cf0bd43.svn-base ---------------------------------------------------------------------- diff --git a/site-content/.svn/pristine/04/0400f403db78a35ecc7c09ac8968ab156cf0bd43.svn-base b/site-content/.svn/pristine/04/0400f403db78a35ecc7c09ac8968ab156cf0bd43.svn-base deleted file mode 100644 index c90851c..0000000 --- a/site-content/.svn/pristine/04/0400f403db78a35ecc7c09ac8968ab156cf0bd43.svn-base +++ /dev/null @@ -1,247 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<!-- NewPage --> -<html lang="en"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<title>ValueAndJacobianFunction (Apache Commons Math 3.6.1 API)</title> -<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style"> -</head> -<body> -<script type="text/javascript"><!-- - if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ValueAndJacobianFunction (Apache Commons Math 3.6.1 API)"; - } -//--> -</script> -<noscript> -<div>JavaScript is disabled on your browser.</div> -</noscript> -<!-- ========= START OF TOP NAVBAR ======= --> -<div class="topNav"><a name="navbar_top"> -<!-- --> -</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow"> -<!-- --> -</a> -<ul class="navList" title="Navigation"> -<li><a href="../../../../../../overview-summary.html">Overview</a></li> -<li><a href="package-summary.html">Package</a></li> -<li class="navBarCell1Rev">Class</li> -<li><a href="class-use/ValueAndJacobianFunction.html">Use</a></li> -<li><a href="package-tree.html">Tree</a></li> -<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li> -<li><a href="../../../../../../index-all.html">Index</a></li> -<li><a href="../../../../../../help-doc.html">Help</a></li> -</ul> -<div class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div> -</div> -<div class="subNav"> -<ul class="navList"> -<li><a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/ParameterValidator.html" title="interface in org.apache.commons.math3.fitting.leastsquares"><span class="strong">Prev Class</span></a></li> -<li>Next Class</li> -</ul> -<ul class="navList"> -<li><a href="../../../../../../index.html?org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html" target="_top">Frames</a></li> -<li><a href="ValueAndJacobianFunction.html" target="_top">No Frames</a></li> -</ul> -<ul class="navList" id="allclasses_navbar_top"> -<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li> -</ul> -<div> -<script type="text/javascript"><!-- - allClassesLink = document.getElementById("allclasses_navbar_top"); - if(window==top) { - allClassesLink.style.display = "block"; - } - else { - allClassesLink.style.display = "none"; - } - //--> -</script> -</div> -<div> -<ul class="subNavList"> -<li>Summary: </li> -<li>Nested | </li> -<li>Field | </li> -<li>Constr | </li> -<li><a href="#method_summary">Method</a></li> -</ul> -<ul class="subNavList"> -<li>Detail: </li> -<li>Field | </li> -<li>Constr | </li> -<li><a href="#method_detail">Method</a></li> -</ul> -</div> -<a name="skip-navbar_top"> -<!-- --> -</a></div> -<!-- ========= END OF TOP NAVBAR ========= --> -<!-- ======== START OF CLASS DATA ======== --> -<div class="header"> -<div class="subTitle">org.apache.commons.math3.fitting.leastsquares</div> -<h2 title="Interface ValueAndJacobianFunction" class="title">Interface ValueAndJacobianFunction</h2> -</div> -<div class="contentContainer"> -<div class="description"> -<ul class="blockList"> -<li class="blockList"> -<dl> -<dt>All Superinterfaces:</dt> -<dd><a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/MultivariateJacobianFunction.html" title="interface in org.apache.commons.math3.fitting.leastsquares">MultivariateJacobianFunction</a></dd> -</dl> -<hr> -<br> -<pre>public interface <a href="../../../../../../src-html/org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html#line.28">ValueAndJacobianFunction</a> -extends <a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/MultivariateJacobianFunction.html" title="interface in org.apache.commons.math3.fitting.leastsquares">MultivariateJacobianFunction</a></pre> -<div class="block">A interface for functions that compute a vector of values and can compute their - derivatives (Jacobian).</div> -<dl><dt><span class="strong">Since:</span></dt> - <dd>3.4</dd></dl> -</li> -</ul> -</div> -<div class="summary"> -<ul class="blockList"> -<li class="blockList"> -<!-- ========== METHOD SUMMARY =========== --> -<ul class="blockList"> -<li class="blockList"><a name="method_summary"> -<!-- --> -</a> -<h3>Method Summary</h3> -<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation"> -<caption><span>Methods</span><span class="tabEnd"> </span></caption> -<tr> -<th class="colFirst" scope="col">Modifier and Type</th> -<th class="colLast" scope="col">Method and Description</th> -</tr> -<tr class="altColor"> -<td class="colFirst"><code><a href="../../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a></code></td> -<td class="colLast"><code><strong><a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html#computeJacobian(double[])">computeJacobian</a></strong>(double[] params)</code> -<div class="block">Compute the Jacobian.</div> -</td> -</tr> -<tr class="rowColor"> -<td class="colFirst"><code><a href="../../../../../../org/apache/commons/math3/linear/RealVector.html" title="class in org.apache.commons.math3.linear">RealVector</a></code></td> -<td class="colLast"><code><strong><a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html#computeValue(double[])">computeValue</a></strong>(double[] params)</code> -<div class="block">Compute the value.</div> -</td> -</tr> -</table> -<ul class="blockList"> -<li class="blockList"><a name="methods_inherited_from_class_org.apache.commons.math3.fitting.leastsquares.MultivariateJacobianFunction"> -<!-- --> -</a> -<h3>Methods inherited from interface org.apache.commons.math3.fitting.leastsquares.<a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/MultivariateJacobianFunction.html" title="interface in org.apache.commons.math3.fitting.leastsquares">MultivariateJacobianFunction</a></h3> -<code><a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/MultivariateJacobianFunction.html#value(org.apache.commons.math3.linear.RealVector)">value</a></code></li> -</ul> -</li> -</ul> -</li> -</ul> -</div> -<div class="details"> -<ul class="blockList"> -<li class="blockList"> -<!-- ============ METHOD DETAIL ========== --> -<ul class="blockList"> -<li class="blockList"><a name="method_detail"> -<!-- --> -</a> -<h3>Method Detail</h3> -<a name="computeValue(double[])"> -<!-- --> -</a> -<ul class="blockList"> -<li class="blockList"> -<h4>computeValue</h4> -<pre><a href="../../../../../../org/apache/commons/math3/linear/RealVector.html" title="class in org.apache.commons.math3.linear">RealVector</a> <a href="../../../../../../src-html/org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html#line.35">computeValue</a>(double[] params)</pre> -<div class="block">Compute the value.</div> -<dl><dt><span class="strong">Parameters:</span></dt><dd><code>params</code> - Point.</dd> -<dt><span class="strong">Returns:</span></dt><dd>the value at the given point.</dd></dl> -</li> -</ul> -<a name="computeJacobian(double[])"> -<!-- --> -</a> -<ul class="blockListLast"> -<li class="blockList"> -<h4>computeJacobian</h4> -<pre><a href="../../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a> <a href="../../../../../../src-html/org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html#line.43">computeJacobian</a>(double[] params)</pre> -<div class="block">Compute the Jacobian.</div> -<dl><dt><span class="strong">Parameters:</span></dt><dd><code>params</code> - Point.</dd> -<dt><span class="strong">Returns:</span></dt><dd>the Jacobian at the given point.</dd></dl> -</li> -</ul> -</li> -</ul> -</li> -</ul> -</div> -</div> -<!-- ========= END OF CLASS DATA ========= --> -<!-- ======= START OF BOTTOM NAVBAR ====== --> -<div class="bottomNav"><a name="navbar_bottom"> -<!-- --> -</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow"> -<!-- --> -</a> -<ul class="navList" title="Navigation"> -<li><a href="../../../../../../overview-summary.html">Overview</a></li> -<li><a href="package-summary.html">Package</a></li> -<li class="navBarCell1Rev">Class</li> -<li><a href="class-use/ValueAndJacobianFunction.html">Use</a></li> -<li><a href="package-tree.html">Tree</a></li> -<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li> -<li><a href="../../../../../../index-all.html">Index</a></li> -<li><a href="../../../../../../help-doc.html">Help</a></li> -</ul> -<div class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div> -</div> -<div class="subNav"> -<ul class="navList"> -<li><a href="../../../../../../org/apache/commons/math3/fitting/leastsquares/ParameterValidator.html" title="interface in org.apache.commons.math3.fitting.leastsquares"><span class="strong">Prev Class</span></a></li> -<li>Next Class</li> -</ul> -<ul class="navList"> -<li><a href="../../../../../../index.html?org/apache/commons/math3/fitting/leastsquares/ValueAndJacobianFunction.html" target="_top">Frames</a></li> -<li><a href="ValueAndJacobianFunction.html" target="_top">No Frames</a></li> -</ul> -<ul class="navList" id="allclasses_navbar_bottom"> -<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li> -</ul> -<div> -<script type="text/javascript"><!-- - allClassesLink = document.getElementById("allclasses_navbar_bottom"); - if(window==top) { - allClassesLink.style.display = "block"; - } - else { - allClassesLink.style.display = "none"; - } - //--> -</script> -</div> -<div> -<ul class="subNavList"> -<li>Summary: </li> -<li>Nested | </li> -<li>Field | </li> -<li>Constr | </li> -<li><a href="#method_summary">Method</a></li> -</ul> -<ul class="subNavList"> -<li>Detail: </li> -<li>Field | </li> -<li>Constr | </li> -<li><a href="#method_detail">Method</a></li> -</ul> -</div> -<a name="skip-navbar_bottom"> -<!-- --> -</a></div> -<!-- ======== END OF BOTTOM NAVBAR ======= --> -<p class="legalCopy"><small>Copyright © 2003–2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p> -</body> -</html>
http://git-wip-us.apache.org/repos/asf/commons-complex/blob/b3576eeb/site-content/.svn/pristine/04/0408a9222bbb2ed0a2dc0d095371a6aec9f05114.svn-base ---------------------------------------------------------------------- diff --git a/site-content/.svn/pristine/04/0408a9222bbb2ed0a2dc0d095371a6aec9f05114.svn-base b/site-content/.svn/pristine/04/0408a9222bbb2ed0a2dc0d095371a6aec9f05114.svn-base deleted file mode 100644 index 2685b76..0000000 --- a/site-content/.svn/pristine/04/0408a9222bbb2ed0a2dc0d095371a6aec9f05114.svn-base +++ /dev/null @@ -1,219 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html lang="en"> -<head> -<title>Source code</title> -<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style"> -</head> -<body> -<div class="sourceContainer"> -<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a> -<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a> -<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a> -<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a> -<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a> -<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a> -<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a> -<span class="sourceLineNo">008</span> *<a name="line.8"></a> -<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a> -<span class="sourceLineNo">010</span> *<a name="line.10"></a> -<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a> -<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a> -<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a> -<span class="sourceLineNo">014</span> * See the License for the specific language governing permissions and<a name="line.14"></a> -<span class="sourceLineNo">015</span> * limitations under the License.<a name="line.15"></a> -<span class="sourceLineNo">016</span> */<a name="line.16"></a> -<span class="sourceLineNo">017</span>package org.apache.commons.math3.analysis.interpolation;<a name="line.17"></a> -<span class="sourceLineNo">018</span><a name="line.18"></a> -<span class="sourceLineNo">019</span>import org.apache.commons.math3.exception.NonMonotonicSequenceException;<a name="line.19"></a> -<span class="sourceLineNo">020</span>import org.apache.commons.math3.exception.DimensionMismatchException;<a name="line.20"></a> -<span class="sourceLineNo">021</span>import org.apache.commons.math3.exception.NumberIsTooSmallException;<a name="line.21"></a> -<span class="sourceLineNo">022</span>import org.apache.commons.math3.TestUtils;<a name="line.22"></a> -<span class="sourceLineNo">023</span>import org.apache.commons.math3.analysis.UnivariateFunction;<a name="line.23"></a> -<span class="sourceLineNo">024</span>import org.apache.commons.math3.analysis.polynomials.PolynomialFunction;<a name="line.24"></a> -<span class="sourceLineNo">025</span>import org.apache.commons.math3.analysis.polynomials.PolynomialSplineFunction;<a name="line.25"></a> -<span class="sourceLineNo">026</span>import org.junit.Assert;<a name="line.26"></a> -<span class="sourceLineNo">027</span>import org.junit.Test;<a name="line.27"></a> -<span class="sourceLineNo">028</span><a name="line.28"></a> -<span class="sourceLineNo">029</span>/**<a name="line.29"></a> -<span class="sourceLineNo">030</span> * Test the LinearInterpolator.<a name="line.30"></a> -<span class="sourceLineNo">031</span> */<a name="line.31"></a> -<span class="sourceLineNo">032</span>public class LinearInterpolatorTest {<a name="line.32"></a> -<span class="sourceLineNo">033</span><a name="line.33"></a> -<span class="sourceLineNo">034</span> /** error tolerance for spline interpolator value at knot points */<a name="line.34"></a> -<span class="sourceLineNo">035</span> protected double knotTolerance = 1E-12;<a name="line.35"></a> -<span class="sourceLineNo">036</span><a name="line.36"></a> -<span class="sourceLineNo">037</span> /** error tolerance for interpolating polynomial coefficients */<a name="line.37"></a> -<span class="sourceLineNo">038</span> protected double coefficientTolerance = 1E-6;<a name="line.38"></a> -<span class="sourceLineNo">039</span><a name="line.39"></a> -<span class="sourceLineNo">040</span> /** error tolerance for interpolated values */<a name="line.40"></a> -<span class="sourceLineNo">041</span> protected double interpolationTolerance = 1E-12;<a name="line.41"></a> -<span class="sourceLineNo">042</span><a name="line.42"></a> -<span class="sourceLineNo">043</span> @Test<a name="line.43"></a> -<span class="sourceLineNo">044</span> public void testInterpolateLinearDegenerateTwoSegment()<a name="line.44"></a> -<span class="sourceLineNo">045</span> {<a name="line.45"></a> -<span class="sourceLineNo">046</span> double x[] = { 0.0, 0.5, 1.0 };<a name="line.46"></a> -<span class="sourceLineNo">047</span> double y[] = { 0.0, 0.5, 1.0 };<a name="line.47"></a> -<span class="sourceLineNo">048</span> UnivariateInterpolator i = new LinearInterpolator();<a name="line.48"></a> -<span class="sourceLineNo">049</span> UnivariateFunction f = i.interpolate(x, y);<a name="line.49"></a> -<span class="sourceLineNo">050</span> verifyInterpolation(f, x, y);<a name="line.50"></a> -<span class="sourceLineNo">051</span><a name="line.51"></a> -<span class="sourceLineNo">052</span> // Verify coefficients using analytical values<a name="line.52"></a> -<span class="sourceLineNo">053</span> PolynomialFunction polynomials[] = ((PolynomialSplineFunction) f).getPolynomials();<a name="line.53"></a> -<span class="sourceLineNo">054</span> double target[] = {y[0], 1d};<a name="line.54"></a> -<span class="sourceLineNo">055</span> TestUtils.assertEquals(polynomials[0].getCoefficients(), target, coefficientTolerance);<a name="line.55"></a> -<span class="sourceLineNo">056</span> target = new double[]{y[1], 1d};<a name="line.56"></a> -<span class="sourceLineNo">057</span> TestUtils.assertEquals(polynomials[1].getCoefficients(), target, coefficientTolerance);<a name="line.57"></a> -<span class="sourceLineNo">058</span><a name="line.58"></a> -<span class="sourceLineNo">059</span> // Check interpolation<a name="line.59"></a> -<span class="sourceLineNo">060</span> Assert.assertEquals(0.0,f.value(0.0), interpolationTolerance);<a name="line.60"></a> -<span class="sourceLineNo">061</span> Assert.assertEquals(0.4,f.value(0.4), interpolationTolerance);<a name="line.61"></a> -<span class="sourceLineNo">062</span> Assert.assertEquals(1.0,f.value(1.0), interpolationTolerance);<a name="line.62"></a> -<span class="sourceLineNo">063</span> }<a name="line.63"></a> -<span class="sourceLineNo">064</span><a name="line.64"></a> -<span class="sourceLineNo">065</span> @Test<a name="line.65"></a> -<span class="sourceLineNo">066</span> public void testInterpolateLinearDegenerateThreeSegment()<a name="line.66"></a> -<span class="sourceLineNo">067</span> {<a name="line.67"></a> -<span class="sourceLineNo">068</span> double x[] = { 0.0, 0.5, 1.0, 1.5 };<a name="line.68"></a> -<span class="sourceLineNo">069</span> double y[] = { 0.0, 0.5, 1.0, 1.5 };<a name="line.69"></a> -<span class="sourceLineNo">070</span> UnivariateInterpolator i = new LinearInterpolator();<a name="line.70"></a> -<span class="sourceLineNo">071</span> UnivariateFunction f = i.interpolate(x, y);<a name="line.71"></a> -<span class="sourceLineNo">072</span> verifyInterpolation(f, x, y);<a name="line.72"></a> -<span class="sourceLineNo">073</span><a name="line.73"></a> -<span class="sourceLineNo">074</span> // Verify coefficients using analytical values<a name="line.74"></a> -<span class="sourceLineNo">075</span> PolynomialFunction polynomials[] = ((PolynomialSplineFunction) f).getPolynomials();<a name="line.75"></a> -<span class="sourceLineNo">076</span> double target[] = {y[0], 1d};<a name="line.76"></a> -<span class="sourceLineNo">077</span> TestUtils.assertEquals(polynomials[0].getCoefficients(), target, coefficientTolerance);<a name="line.77"></a> -<span class="sourceLineNo">078</span> target = new double[]{y[1], 1d};<a name="line.78"></a> -<span class="sourceLineNo">079</span> TestUtils.assertEquals(polynomials[1].getCoefficients(), target, coefficientTolerance);<a name="line.79"></a> -<span class="sourceLineNo">080</span> target = new double[]{y[2], 1d};<a name="line.80"></a> -<span class="sourceLineNo">081</span> TestUtils.assertEquals(polynomials[2].getCoefficients(), target, coefficientTolerance);<a name="line.81"></a> -<span class="sourceLineNo">082</span><a name="line.82"></a> -<span class="sourceLineNo">083</span> // Check interpolation<a name="line.83"></a> -<span class="sourceLineNo">084</span> Assert.assertEquals(0,f.value(0), interpolationTolerance);<a name="line.84"></a> -<span class="sourceLineNo">085</span> Assert.assertEquals(1.4,f.value(1.4), interpolationTolerance);<a name="line.85"></a> -<span class="sourceLineNo">086</span> Assert.assertEquals(1.5,f.value(1.5), interpolationTolerance);<a name="line.86"></a> -<span class="sourceLineNo">087</span> }<a name="line.87"></a> -<span class="sourceLineNo">088</span><a name="line.88"></a> -<span class="sourceLineNo">089</span> @Test<a name="line.89"></a> -<span class="sourceLineNo">090</span> public void testInterpolateLinear() {<a name="line.90"></a> -<span class="sourceLineNo">091</span> double x[] = { 0.0, 0.5, 1.0 };<a name="line.91"></a> -<span class="sourceLineNo">092</span> double y[] = { 0.0, 0.5, 0.0 };<a name="line.92"></a> -<span class="sourceLineNo">093</span> UnivariateInterpolator i = new LinearInterpolator();<a name="line.93"></a> -<span class="sourceLineNo">094</span> UnivariateFunction f = i.interpolate(x, y);<a name="line.94"></a> -<span class="sourceLineNo">095</span> verifyInterpolation(f, x, y);<a name="line.95"></a> -<span class="sourceLineNo">096</span><a name="line.96"></a> -<span class="sourceLineNo">097</span> // Verify coefficients using analytical values<a name="line.97"></a> -<span class="sourceLineNo">098</span> PolynomialFunction polynomials[] = ((PolynomialSplineFunction) f).getPolynomials();<a name="line.98"></a> -<span class="sourceLineNo">099</span> double target[] = {y[0], 1d};<a name="line.99"></a> -<span class="sourceLineNo">100</span> TestUtils.assertEquals(polynomials[0].getCoefficients(), target, coefficientTolerance);<a name="line.100"></a> -<span class="sourceLineNo">101</span> target = new double[]{y[1], -1d};<a name="line.101"></a> -<span class="sourceLineNo">102</span> TestUtils.assertEquals(polynomials[1].getCoefficients(), target, coefficientTolerance);<a name="line.102"></a> -<span class="sourceLineNo">103</span> }<a name="line.103"></a> -<span class="sourceLineNo">104</span><a name="line.104"></a> -<span class="sourceLineNo">105</span> @Test<a name="line.105"></a> -<span class="sourceLineNo">106</span> public void testIllegalArguments() {<a name="line.106"></a> -<span class="sourceLineNo">107</span> // Data set arrays of different size.<a name="line.107"></a> -<span class="sourceLineNo">108</span> UnivariateInterpolator i = new LinearInterpolator();<a name="line.108"></a> -<span class="sourceLineNo">109</span> try {<a name="line.109"></a> -<span class="sourceLineNo">110</span> double xval[] = { 0.0, 1.0 };<a name="line.110"></a> -<span class="sourceLineNo">111</span> double yval[] = { 0.0, 1.0, 2.0 };<a name="line.111"></a> -<span class="sourceLineNo">112</span> i.interpolate(xval, yval);<a name="line.112"></a> -<span class="sourceLineNo">113</span> Assert.fail("Failed to detect data set array with different sizes.");<a name="line.113"></a> -<span class="sourceLineNo">114</span> } catch (DimensionMismatchException iae) {<a name="line.114"></a> -<span class="sourceLineNo">115</span> // Expected.<a name="line.115"></a> -<span class="sourceLineNo">116</span> }<a name="line.116"></a> -<span class="sourceLineNo">117</span> // X values not sorted.<a name="line.117"></a> -<span class="sourceLineNo">118</span> try {<a name="line.118"></a> -<span class="sourceLineNo">119</span> double xval[] = { 0.0, 1.0, 0.5 };<a name="line.119"></a> -<span class="sourceLineNo">120</span> double yval[] = { 0.0, 1.0, 2.0 };<a name="line.120"></a> -<span class="sourceLineNo">121</span> i.interpolate(xval, yval);<a name="line.121"></a> -<span class="sourceLineNo">122</span> Assert.fail("Failed to detect unsorted arguments.");<a name="line.122"></a> -<span class="sourceLineNo">123</span> } catch (NonMonotonicSequenceException iae) {<a name="line.123"></a> -<span class="sourceLineNo">124</span> // Expected.<a name="line.124"></a> -<span class="sourceLineNo">125</span> }<a name="line.125"></a> -<span class="sourceLineNo">126</span> // Not enough data to interpolate.<a name="line.126"></a> -<span class="sourceLineNo">127</span> try {<a name="line.127"></a> -<span class="sourceLineNo">128</span> double xval[] = { 0.0 };<a name="line.128"></a> -<span class="sourceLineNo">129</span> double yval[] = { 0.0 };<a name="line.129"></a> -<span class="sourceLineNo">130</span> i.interpolate(xval, yval);<a name="line.130"></a> -<span class="sourceLineNo">131</span> Assert.fail("Failed to detect unsorted arguments.");<a name="line.131"></a> -<span class="sourceLineNo">132</span> } catch (NumberIsTooSmallException iae) {<a name="line.132"></a> -<span class="sourceLineNo">133</span> // Expected.<a name="line.133"></a> -<span class="sourceLineNo">134</span> }<a name="line.134"></a> -<span class="sourceLineNo">135</span> }<a name="line.135"></a> -<span class="sourceLineNo">136</span><a name="line.136"></a> -<span class="sourceLineNo">137</span> /**<a name="line.137"></a> -<span class="sourceLineNo">138</span> * verifies that f(x[i]) = y[i] for i = 0..n-1 where n is common length.<a name="line.138"></a> -<span class="sourceLineNo">139</span> */<a name="line.139"></a> -<span class="sourceLineNo">140</span> protected void verifyInterpolation(UnivariateFunction f, double x[], double y[])<a name="line.140"></a> -<span class="sourceLineNo">141</span> {<a name="line.141"></a> -<span class="sourceLineNo">142</span> for (int i = 0; i < x.length; i++) {<a name="line.142"></a> -<span class="sourceLineNo">143</span> Assert.assertEquals(f.value(x[i]), y[i], knotTolerance);<a name="line.143"></a> -<span class="sourceLineNo">144</span> }<a name="line.144"></a> -<span class="sourceLineNo">145</span> }<a name="line.145"></a> -<span class="sourceLineNo">146</span><a name="line.146"></a> -<span class="sourceLineNo">147</span>}<a name="line.147"></a> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</pre> -</div> -</body> -</html> http://git-wip-us.apache.org/repos/asf/commons-complex/blob/b3576eeb/site-content/.svn/pristine/04/040d8672c2f4c64bcb6d584b7bf1580b30bfbf82.svn-base ---------------------------------------------------------------------- diff --git a/site-content/.svn/pristine/04/040d8672c2f4c64bcb6d584b7bf1580b30bfbf82.svn-base b/site-content/.svn/pristine/04/040d8672c2f4c64bcb6d584b7bf1580b30bfbf82.svn-base deleted file mode 100644 index bea8d6f..0000000 --- a/site-content/.svn/pristine/04/040d8672c2f4c64bcb6d584b7bf1580b30bfbf82.svn-base +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<!-- NewPage --> -<html lang="en"> -<head> -<meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> -<title>Uses of Class org.apache.commons.math3.geometry.euclidean.threed.PLYParser (Apache Commons Math 3.5 Test API)</title> -<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style"> -</head> -<body> -<script type="text/javascript"><!-- - if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class org.apache.commons.math3.geometry.euclidean.threed.PLYParser (Apache Commons Math 3.5 Test API)"; - } -//--> -</script> -<noscript> -<div>JavaScript is disabled on your browser.</div> -</noscript> -<!-- ========= START OF TOP NAVBAR ======= --> -<div class="topNav"><a name="navbar_top"> -<!-- --> -</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow"> -<!-- --> -</a> -<ul class="navList" title="Navigation"> -<li><a href="../../../../../../../../overview-summary.html">Overview</a></li> -<li><a href="../package-summary.html">Package</a></li> -<li><a href="../../../../../../../../org/apache/commons/math3/geometry/euclidean/threed/PLYParser.html" title="class in org.apache.commons.math3.geometry.euclidean.threed">Class</a></li> -<li class="navBarCell1Rev">Use</li> -<li><a href="../package-tree.html">Tree</a></li> -<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li> -<li><a href="../../../../../../../../index-all.html">Index</a></li> -<li><a href="../../../../../../../../help-doc.html">Help</a></li> -</ul> -<div class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div> -</div> -<div class="subNav"> -<ul class="navList"> -<li>PREV</li> -<li>NEXT</li> -</ul> -<ul class="navList"> -<li><a href="../../../../../../../../index.html?org/apache/commons/math3/geometry/euclidean/threed//class-usePLYParser.html" target="_top">FRAMES</a></li> -<li><a href="PLYParser.html" target="_top">NO FRAMES</a></li> -</ul> -<ul class="navList" id="allclasses_navbar_top"> -<li><a href="../../../../../../../../allclasses-noframe.html">All Classes</a></li> -</ul> -<div> -<script type="text/javascript"><!-- - allClassesLink = document.getElementById("allclasses_navbar_top"); - if(window==top) { - allClassesLink.style.display = "block"; - } - else { - allClassesLink.style.display = "none"; - } - //--> -</script> -</div> -<a name="skip-navbar_top"> -<!-- --> -</a></div> -<!-- ========= END OF TOP NAVBAR ========= --> -<div class="header"> -<h2 title="Uses of Class org.apache.commons.math3.geometry.euclidean.threed.PLYParser" class="title">Uses of Class<br>org.apache.commons.math3.geometry.euclidean.threed.PLYParser</h2> -</div> -<div class="classUseContainer">No usage of org.apache.commons.math3.geometry.euclidean.threed.PLYParser</div> -<!-- ======= START OF BOTTOM NAVBAR ====== --> -<div class="bottomNav"><a name="navbar_bottom"> -<!-- --> -</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow"> -<!-- --> -</a> -<ul class="navList" title="Navigation"> -<li><a href="../../../../../../../../overview-summary.html">Overview</a></li> -<li><a href="../package-summary.html">Package</a></li> -<li><a href="../../../../../../../../org/apache/commons/math3/geometry/euclidean/threed/PLYParser.html" title="class in org.apache.commons.math3.geometry.euclidean.threed">Class</a></li> -<li class="navBarCell1Rev">Use</li> -<li><a href="../package-tree.html">Tree</a></li> -<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li> -<li><a href="../../../../../../../../index-all.html">Index</a></li> -<li><a href="../../../../../../../../help-doc.html">Help</a></li> -</ul> -<div class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div> -</div> -<div class="subNav"> -<ul class="navList"> -<li>PREV</li> -<li>NEXT</li> -</ul> -<ul class="navList"> -<li><a href="../../../../../../../../index.html?org/apache/commons/math3/geometry/euclidean/threed//class-usePLYParser.html" target="_top">FRAMES</a></li> -<li><a href="PLYParser.html" target="_top">NO FRAMES</a></li> -</ul> -<ul class="navList" id="allclasses_navbar_bottom"> -<li><a href="../../../../../../../../allclasses-noframe.html">All Classes</a></li> -</ul> -<div> -<script type="text/javascript"><!-- - allClassesLink = document.getElementById("allclasses_navbar_bottom"); - if(window==top) { - allClassesLink.style.display = "block"; - } - else { - allClassesLink.style.display = "none"; - } - //--> -</script> -</div> -<a name="skip-navbar_bottom"> -<!-- --> -</a></div> -<!-- ======== END OF BOTTOM NAVBAR ======= --> -<p class="legalCopy"><small>Copyright © 2003–2015 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p> -</body> -</html> http://git-wip-us.apache.org/repos/asf/commons-complex/blob/b3576eeb/site-content/.svn/pristine/04/04143e6999813b2e28d1fed504f92a10d8ab1cfa.svn-base ---------------------------------------------------------------------- diff --git a/site-content/.svn/pristine/04/04143e6999813b2e28d1fed504f92a10d8ab1cfa.svn-base b/site-content/.svn/pristine/04/04143e6999813b2e28d1fed504f92a10d8ab1cfa.svn-base deleted file mode 100644 index 163badb..0000000 --- a/site-content/.svn/pristine/04/04143e6999813b2e28d1fed504f92a10d8ab1cfa.svn-base +++ /dev/null @@ -1,367 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>LogNormalDistribution.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons Math</a> > <a href="index.source.html" class="el_package">org.apache.commons.math3.distribution</a> > <span class="el_source">LogNormalDistr ibution.java</span></div><h1>LogNormalDistribution.java</h1><pre class="source lang-java linenums">/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.commons.math3.distribution; - -import org.apache.commons.math3.exception.NotStrictlyPositiveException; -import org.apache.commons.math3.exception.NumberIsTooLargeException; -import org.apache.commons.math3.exception.util.LocalizedFormats; -import org.apache.commons.math3.random.RandomGenerator; -import org.apache.commons.math3.random.Well19937c; -import org.apache.commons.math3.special.Erf; -import org.apache.commons.math3.util.FastMath; - -/** - * Implementation of the log-normal (gaussian) distribution. - * - * <p> - * <strong>Parameters:</strong> - * {@code X} is log-normally distributed if its natural logarithm {@code log(X)} - * is normally distributed. The probability distribution function of {@code X} - * is given by (for {@code x > 0}) - * </p> - * <p> - * {@code exp(-0.5 * ((ln(x) - m) / s)^2) / (s * sqrt(2 * pi) * x)} - * </p> - * <ul> - * <li>{@code m} is the <em>scale</em> parameter: this is the mean of the - * normally distributed natural logarithm of this distribution,</li> - * <li>{@code s} is the <em>shape</em> parameter: this is the standard - * deviation of the normally distributed natural logarithm of this - * distribution. - * </ul> - * - * @see <a href="http://en.wikipedia.org/wiki/Log-normal_distribution"> - * Log-normal distribution (Wikipedia)</a> - * @see <a href="http://mathworld.wolfram.com/LogNormalDistribution.html"> - * Log Normal distribution (MathWorld)</a> - * - * @since 3.0 - */ -public class LogNormalDistribution extends AbstractRealDistribution { - /** Default inverse cumulative probability accuracy. */ - public static final double DEFAULT_INVERSE_ABSOLUTE_ACCURACY = 1e-9; - - /** Serializable version identifier. */ - private static final long serialVersionUID = 20120112; - - /** &radic;(2 &pi;) */ -<span class="fc" id="L63"> private static final double SQRT2PI = FastMath.sqrt(2 * FastMath.PI);</span> - - /** &radic;(2) */ -<span class="fc" id="L66"> private static final double SQRT2 = FastMath.sqrt(2.0);</span> - - /** The scale parameter of this distribution. */ - private final double scale; - - /** The shape parameter of this distribution. */ - private final double shape; - /** The value of {@code log(shape) + 0.5 * log(2*PI)} stored for faster computation. */ - private final double logShapePlusHalfLog2Pi; - - /** Inverse cumulative probability accuracy. */ - private final double solverAbsoluteAccuracy; - - /** - * Create a log-normal distribution, where the mean and standard deviation - * of the {@link NormalDistribution normally distributed} natural - * logarithm of the log-normal distribution are equal to zero and one - * respectively. In other words, the scale of the returned distribution is - * {@code 0}, while its shape is {@code 1}. - * <p> - * <b>Note:</b> this constructor will implicitly create an instance of - * {@link Well19937c} as random generator to be used for sampling only (see - * {@link #sample()} and {@link #sample(int)}). In case no sampling is - * needed for the created distribution, it is advised to pass {@code null} - * as random generator via the appropriate constructors to avoid the - * additional initialisation overhead. - */ - public LogNormalDistribution() { -<span class="nc" id="L94"> this(0, 1);</span> -<span class="nc" id="L95"> }</span> - - /** - * Create a log-normal distribution using the specified scale and shape. - * <p> - * <b>Note:</b> this constructor will implicitly create an instance of - * {@link Well19937c} as random generator to be used for sampling only (see - * {@link #sample()} and {@link #sample(int)}). In case no sampling is - * needed for the created distribution, it is advised to pass {@code null} - * as random generator via the appropriate constructors to avoid the - * additional initialisation overhead. - * - * @param scale the scale parameter of this distribution - * @param shape the shape parameter of this distribution - * @throws NotStrictlyPositiveException if {@code shape <= 0}. - */ - public LogNormalDistribution(double scale, double shape) - throws NotStrictlyPositiveException { -<span class="fc" id="L113"> this(scale, shape, DEFAULT_INVERSE_ABSOLUTE_ACCURACY);</span> -<span class="fc" id="L114"> }</span> - - /** - * Create a log-normal distribution using the specified scale, shape and - * inverse cumulative distribution accuracy. - * <p> - * <b>Note:</b> this constructor will implicitly create an instance of - * {@link Well19937c} as random generator to be used for sampling only (see - * {@link #sample()} and {@link #sample(int)}). In case no sampling is - * needed for the created distribution, it is advised to pass {@code null} - * as random generator via the appropriate constructors to avoid the - * additional initialisation overhead. - * - * @param scale the scale parameter of this distribution - * @param shape the shape parameter of this distribution - * @param inverseCumAccuracy Inverse cumulative probability accuracy. - * @throws NotStrictlyPositiveException if {@code shape <= 0}. - */ - public LogNormalDistribution(double scale, double shape, double inverseCumAccuracy) - throws NotStrictlyPositiveException { -<span class="fc" id="L134"> this(new Well19937c(), scale, shape, inverseCumAccuracy);</span> -<span class="fc" id="L135"> }</span> - - /** - * Creates a log-normal distribution. - * - * @param rng Random number generator. - * @param scale Scale parameter of this distribution. - * @param shape Shape parameter of this distribution. - * @throws NotStrictlyPositiveException if {@code shape <= 0}. - * @since 3.3 - */ - public LogNormalDistribution(RandomGenerator rng, double scale, double shape) - throws NotStrictlyPositiveException { -<span class="fc" id="L148"> this(rng, scale, shape, DEFAULT_INVERSE_ABSOLUTE_ACCURACY);</span> -<span class="fc" id="L149"> }</span> - - /** - * Creates a log-normal distribution. - * - * @param rng Random number generator. - * @param scale Scale parameter of this distribution. - * @param shape Shape parameter of this distribution. - * @param inverseCumAccuracy Inverse cumulative probability accuracy. - * @throws NotStrictlyPositiveException if {@code shape <= 0}. - * @since 3.1 - */ - public LogNormalDistribution(RandomGenerator rng, - double scale, - double shape, - double inverseCumAccuracy) - throws NotStrictlyPositiveException { -<span class="fc" id="L166"> super(rng);</span> - -<span class="fc bfc" id="L168" title="All 2 branches covered."> if (shape <= 0) {</span> -<span class="fc" id="L169"> throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);</span> - } - -<span class="fc" id="L172"> this.scale = scale;</span> -<span class="fc" id="L173"> this.shape = shape;</span> -<span class="fc" id="L174"> this.logShapePlusHalfLog2Pi = FastMath.log(shape) + 0.5 * FastMath.log(2 * FastMath.PI);</span> -<span class="fc" id="L175"> this.solverAbsoluteAccuracy = inverseCumAccuracy;</span> -<span class="fc" id="L176"> }</span> - - /** - * Returns the scale parameter of this distribution. - * - * @return the scale parameter - */ - public double getScale() { -<span class="fc" id="L184"> return scale;</span> - } - - /** - * Returns the shape parameter of this distribution. - * - * @return the shape parameter - */ - public double getShape() { -<span class="fc" id="L193"> return shape;</span> - } - - /** - * {@inheritDoc} - * - * For scale {@code m}, and shape {@code s} of this distribution, the PDF - * is given by - * <ul> - * <li>{@code 0} if {@code x <= 0},</li> - * <li>{@code exp(-0.5 * ((ln(x) - m) / s)^2) / (s * sqrt(2 * pi) * x)} - * otherwise.</li> - * </ul> - */ - public double density(double x) { -<span class="fc bfc" id="L208" title="All 2 branches covered."> if (x <= 0) {</span> -<span class="fc" id="L209"> return 0;</span> - } -<span class="fc" id="L211"> final double x0 = FastMath.log(x) - scale;</span> -<span class="fc" id="L212"> final double x1 = x0 / shape;</span> -<span class="fc" id="L213"> return FastMath.exp(-0.5 * x1 * x1) / (shape * SQRT2PI * x);</span> - } - - /** {@inheritDoc} - * - * See documentation of {@link #density(double)} for computation details. - */ - @Override - public double logDensity(double x) { -<span class="fc bfc" id="L222" title="All 2 branches covered."> if (x <= 0) {</span> -<span class="fc" id="L223"> return Double.NEGATIVE_INFINITY;</span> - } -<span class="fc" id="L225"> final double logX = FastMath.log(x);</span> -<span class="fc" id="L226"> final double x0 = logX - scale;</span> -<span class="fc" id="L227"> final double x1 = x0 / shape;</span> -<span class="fc" id="L228"> return -0.5 * x1 * x1 - (logShapePlusHalfLog2Pi + logX);</span> - } - - /** - * {@inheritDoc} - * - * For scale {@code m}, and shape {@code s} of this distribution, the CDF - * is given by - * <ul> - * <li>{@code 0} if {@code x <= 0},</li> - * <li>{@code 0} if {@code ln(x) - m < 0} and {@code m - ln(x) > 40 * s}, as - * in these cases the actual value is within {@code Double.MIN_VALUE} of 0, - * <li>{@code 1} if {@code ln(x) - m >= 0} and {@code ln(x) - m > 40 * s}, - * as in these cases the actual value is within {@code Double.MIN_VALUE} of - * 1,</li> - * <li>{@code 0.5 + 0.5 * erf((ln(x) - m) / (s * sqrt(2))} otherwise.</li> - * </ul> - */ - public double cumulativeProbability(double x) { -<span class="fc bfc" id="L247" title="All 2 branches covered."> if (x <= 0) {</span> -<span class="fc" id="L248"> return 0;</span> - } -<span class="fc" id="L250"> final double dev = FastMath.log(x) - scale;</span> -<span class="fc bfc" id="L251" title="All 2 branches covered."> if (FastMath.abs(dev) > 40 * shape) {</span> -<span class="pc bpc" id="L252" title="1 of 2 branches missed."> return dev < 0 ? 0.0d : 1.0d;</span> - } -<span class="fc" id="L254"> return 0.5 + 0.5 * Erf.erf(dev / (shape * SQRT2));</span> - } - - /** - * {@inheritDoc} - * - * @deprecated See {@link RealDistribution#cumulativeProbability(double,double)} - */ - @Override@Deprecated - public double cumulativeProbability(double x0, double x1) - throws NumberIsTooLargeException { -<span class="fc" id="L265"> return probability(x0, x1);</span> - } - - /** {@inheritDoc} */ - @Override - public double probability(double x0, - double x1) - throws NumberIsTooLargeException { -<span class="fc bfc" id="L273" title="All 2 branches covered."> if (x0 > x1) {</span> -<span class="fc" id="L274"> throw new NumberIsTooLargeException(LocalizedFormats.LOWER_ENDPOINT_ABOVE_UPPER_ENDPOINT,</span> - x0, x1, true); - } -<span class="pc bpc" id="L277" title="1 of 4 branches missed."> if (x0 <= 0 || x1 <= 0) {</span> -<span class="fc" id="L278"> return super.probability(x0, x1);</span> - } -<span class="fc" id="L280"> final double denom = shape * SQRT2;</span> -<span class="fc" id="L281"> final double v0 = (FastMath.log(x0) - scale) / denom;</span> -<span class="fc" id="L282"> final double v1 = (FastMath.log(x1) - scale) / denom;</span> -<span class="fc" id="L283"> return 0.5 * Erf.erf(v0, v1);</span> - } - - /** {@inheritDoc} */ - @Override - protected double getSolverAbsoluteAccuracy() { -<span class="fc" id="L289"> return solverAbsoluteAccuracy;</span> - } - - /** - * {@inheritDoc} - * - * For scale {@code m} and shape {@code s}, the mean is - * {@code exp(m + s^2 / 2)}. - */ - public double getNumericalMean() { -<span class="fc" id="L299"> double s = shape;</span> -<span class="fc" id="L300"> return FastMath.exp(scale + (s * s / 2));</span> - } - - /** - * {@inheritDoc} - * - * For scale {@code m} and shape {@code s}, the variance is - * {@code (exp(s^2) - 1) * exp(2 * m + s^2)}. - */ - public double getNumericalVariance() { -<span class="fc" id="L310"> final double s = shape;</span> -<span class="fc" id="L311"> final double ss = s * s;</span> -<span class="fc" id="L312"> return (FastMath.expm1(ss)) * FastMath.exp(2 * scale + ss);</span> - } - - /** - * {@inheritDoc} - * - * The lower bound of the support is always 0 no matter the parameters. - * - * @return lower bound of the support (always 0) - */ - public double getSupportLowerBound() { -<span class="fc" id="L323"> return 0;</span> - } - - /** - * {@inheritDoc} - * - * The upper bound of the support is always positive infinity - * no matter the parameters. - * - * @return upper bound of the support (always - * {@code Double.POSITIVE_INFINITY}) - */ - public double getSupportUpperBound() { -<span class="fc" id="L336"> return Double.POSITIVE_INFINITY;</span> - } - - /** {@inheritDoc} */ - public boolean isSupportLowerBoundInclusive() { -<span class="fc" id="L341"> return true;</span> - } - - /** {@inheritDoc} */ - public boolean isSupportUpperBoundInclusive() { -<span class="fc" id="L346"> return false;</span> - } - - /** - * {@inheritDoc} - * - * The support of this distribution is connected. - * - * @return {@code true} - */ - public boolean isSupportConnected() { -<span class="fc" id="L357"> return true;</span> - } - - /** {@inheritDoc} */ - @Override - public double sample() { -<span class="fc" id="L363"> final double n = random.nextGaussian();</span> -<span class="fc" id="L364"> return FastMath.exp(scale + shape * n);</span> - } -} -</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.5.201505241946</span></div></body></html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/commons-complex/blob/b3576eeb/site-content/.svn/pristine/04/041ddc1c191707212f28b391f180201164050cf6.svn-base ---------------------------------------------------------------------- diff --git a/site-content/.svn/pristine/04/041ddc1c191707212f28b391f180201164050cf6.svn-base b/site-content/.svn/pristine/04/041ddc1c191707212f28b391f180201164050cf6.svn-base deleted file mode 100644 index 733f6c3..0000000 --- a/site-content/.svn/pristine/04/041ddc1c191707212f28b391f180201164050cf6.svn-base +++ /dev/null @@ -1,454 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>SchurTransformer.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons Math</a> > <a href="index.source.html" class="el_package">org.apache.commons.math3.linear</a> > <span class="el_source">SchurTransformer.java</sp an></div><h1>SchurTransformer.java</h1><pre class="source lang-java linenums">/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.commons.math3.linear; - -import org.apache.commons.math3.exception.MaxCountExceededException; -import org.apache.commons.math3.exception.util.LocalizedFormats; -import org.apache.commons.math3.util.FastMath; -import org.apache.commons.math3.util.Precision; - -/** - * Class transforming a general real matrix to Schur form. - * <p>A m &times; m matrix A can be written as the product of three matrices: A = P - * &times; T &times; P<sup>T</sup> with P an orthogonal matrix and T an quasi-triangular - * matrix. Both P and T are m &times; m matrices.</p> - * <p>Transformation to Schur form is often not a goal by itself, but it is an - * intermediate step in more general decomposition algorithms like - * {@link EigenDecomposition eigen decomposition}. This class is therefore - * intended for internal use by the library and is not public. As a consequence - * of this explicitly limited scope, many methods directly returns references to - * internal arrays, not copies.</p> - * <p>This class is based on the method hqr2 in class EigenvalueDecomposition - * from the <a href="http://math.nist.gov/javanumerics/jama/">JAMA</a> library.</p> - * - * @see <a href="http://mathworld.wolfram.com/SchurDecomposition.html">Schur Decomposition - MathWorld</a> - * @see <a href="http://en.wikipedia.org/wiki/Schur_decomposition">Schur Decomposition - Wikipedia</a> - * @see <a href="http://en.wikipedia.org/wiki/Householder_transformation">Householder Transformations</a> - * @since 3.1 - */ -class SchurTransformer { - /** Maximum allowed iterations for convergence of the transformation. */ - private static final int MAX_ITERATIONS = 100; - - /** P matrix. */ - private final double matrixP[][]; - /** T matrix. */ - private final double matrixT[][]; - /** Cached value of P. */ - private RealMatrix cachedP; - /** Cached value of T. */ - private RealMatrix cachedT; - /** Cached value of PT. */ - private RealMatrix cachedPt; - - /** Epsilon criteria taken from JAMA code (originally was 2^-52). */ -<span class="fc" id="L60"> private final double epsilon = Precision.EPSILON;</span> - - /** - * Build the transformation to Schur form of a general real matrix. - * - * @param matrix matrix to transform - * @throws NonSquareMatrixException if the matrix is not square - */ -<span class="fc" id="L68"> SchurTransformer(final RealMatrix matrix) {</span> -<span class="fc bfc" id="L69" title="All 2 branches covered."> if (!matrix.isSquare()) {</span> -<span class="fc" id="L70"> throw new NonSquareMatrixException(matrix.getRowDimension(),</span> - matrix.getColumnDimension()); - } - -<span class="fc" id="L74"> HessenbergTransformer transformer = new HessenbergTransformer(matrix);</span> -<span class="fc" id="L75"> matrixT = transformer.getH().getData();</span> -<span class="fc" id="L76"> matrixP = transformer.getP().getData();</span> -<span class="fc" id="L77"> cachedT = null;</span> -<span class="fc" id="L78"> cachedP = null;</span> -<span class="fc" id="L79"> cachedPt = null;</span> - - // transform matrix -<span class="fc" id="L82"> transform();</span> -<span class="fc" id="L83"> }</span> - - /** - * Returns the matrix P of the transform. - * <p>P is an orthogonal matrix, i.e. its inverse is also its transpose.</p> - * - * @return the P matrix - */ - public RealMatrix getP() { -<span class="fc bfc" id="L92" title="All 2 branches covered."> if (cachedP == null) {</span> -<span class="fc" id="L93"> cachedP = MatrixUtils.createRealMatrix(matrixP);</span> - } -<span class="fc" id="L95"> return cachedP;</span> - } - - /** - * Returns the transpose of the matrix P of the transform. - * <p>P is an orthogonal matrix, i.e. its inverse is also its transpose.</p> - * - * @return the transpose of the P matrix - */ - public RealMatrix getPT() { -<span class="pc bpc" id="L105" title="1 of 2 branches missed."> if (cachedPt == null) {</span> -<span class="fc" id="L106"> cachedPt = getP().transpose();</span> - } - - // return the cached matrix -<span class="fc" id="L110"> return cachedPt;</span> - } - - /** - * Returns the quasi-triangular Schur matrix T of the transform. - * - * @return the T matrix - */ - public RealMatrix getT() { -<span class="fc bfc" id="L119" title="All 2 branches covered."> if (cachedT == null) {</span> -<span class="fc" id="L120"> cachedT = MatrixUtils.createRealMatrix(matrixT);</span> - } - - // return the cached matrix -<span class="fc" id="L124"> return cachedT;</span> - } - - /** - * Transform original matrix to Schur form. - * @throws MaxCountExceededException if the transformation does not converge - */ - private void transform() { -<span class="fc" id="L132"> final int n = matrixT.length;</span> - - // compute matrix norm -<span class="fc" id="L135"> final double norm = getNorm();</span> - - // shift information -<span class="fc" id="L138"> final ShiftInfo shift = new ShiftInfo();</span> - - // Outer loop over eigenvalue index -<span class="fc" id="L141"> int iteration = 0;</span> -<span class="fc" id="L142"> int iu = n - 1;</span> -<span class="fc bfc" id="L143" title="All 2 branches covered."> while (iu >= 0) {</span> - - // Look for single small sub-diagonal element -<span class="fc" id="L146"> final int il = findSmallSubDiagonalElement(iu, norm);</span> - - // Check for convergence -<span class="fc bfc" id="L149" title="All 2 branches covered."> if (il == iu) {</span> - // One root found -<span class="fc" id="L151"> matrixT[iu][iu] += shift.exShift;</span> -<span class="fc" id="L152"> iu--;</span> -<span class="fc" id="L153"> iteration = 0;</span> -<span class="fc bfc" id="L154" title="All 2 branches covered."> } else if (il == iu - 1) {</span> - // Two roots found -<span class="fc" id="L156"> double p = (matrixT[iu - 1][iu - 1] - matrixT[iu][iu]) / 2.0;</span> -<span class="fc" id="L157"> double q = p * p + matrixT[iu][iu - 1] * matrixT[iu - 1][iu];</span> -<span class="fc" id="L158"> matrixT[iu][iu] += shift.exShift;</span> -<span class="fc" id="L159"> matrixT[iu - 1][iu - 1] += shift.exShift;</span> - -<span class="fc bfc" id="L161" title="All 2 branches covered."> if (q >= 0) {</span> -<span class="fc" id="L162"> double z = FastMath.sqrt(FastMath.abs(q));</span> -<span class="fc bfc" id="L163" title="All 2 branches covered."> if (p >= 0) {</span> -<span class="fc" id="L164"> z = p + z;</span> - } else { -<span class="fc" id="L166"> z = p - z;</span> - } -<span class="fc" id="L168"> final double x = matrixT[iu][iu - 1];</span> -<span class="fc" id="L169"> final double s = FastMath.abs(x) + FastMath.abs(z);</span> -<span class="fc" id="L170"> p = x / s;</span> -<span class="fc" id="L171"> q = z / s;</span> -<span class="fc" id="L172"> final double r = FastMath.sqrt(p * p + q * q);</span> -<span class="fc" id="L173"> p /= r;</span> -<span class="fc" id="L174"> q /= r;</span> - - // Row modification -<span class="fc bfc" id="L177" title="All 2 branches covered."> for (int j = iu - 1; j < n; j++) {</span> -<span class="fc" id="L178"> z = matrixT[iu - 1][j];</span> -<span class="fc" id="L179"> matrixT[iu - 1][j] = q * z + p * matrixT[iu][j];</span> -<span class="fc" id="L180"> matrixT[iu][j] = q * matrixT[iu][j] - p * z;</span> - } - - // Column modification -<span class="fc bfc" id="L184" title="All 2 branches covered."> for (int i = 0; i <= iu; i++) {</span> -<span class="fc" id="L185"> z = matrixT[i][iu - 1];</span> -<span class="fc" id="L186"> matrixT[i][iu - 1] = q * z + p * matrixT[i][iu];</span> -<span class="fc" id="L187"> matrixT[i][iu] = q * matrixT[i][iu] - p * z;</span> - } - - // Accumulate transformations -<span class="fc bfc" id="L191" title="All 2 branches covered."> for (int i = 0; i <= n - 1; i++) {</span> -<span class="fc" id="L192"> z = matrixP[i][iu - 1];</span> -<span class="fc" id="L193"> matrixP[i][iu - 1] = q * z + p * matrixP[i][iu];</span> -<span class="fc" id="L194"> matrixP[i][iu] = q * matrixP[i][iu] - p * z;</span> - } - } -<span class="fc" id="L197"> iu -= 2;</span> -<span class="fc" id="L198"> iteration = 0;</span> -<span class="fc" id="L199"> } else {</span> - // No convergence yet -<span class="fc" id="L201"> computeShift(il, iu, iteration, shift);</span> - - // stop transformation after too many iterations -<span class="pc bpc" id="L204" title="1 of 2 branches missed."> if (++iteration > MAX_ITERATIONS) {</span> -<span class="nc" id="L205"> throw new MaxCountExceededException(LocalizedFormats.CONVERGENCE_FAILED,</span> - MAX_ITERATIONS); - } - - // the initial houseHolder vector for the QR step -<span class="fc" id="L210"> final double[] hVec = new double[3];</span> - -<span class="fc" id="L212"> final int im = initQRStep(il, iu, shift, hVec);</span> -<span class="fc" id="L213"> performDoubleQRStep(il, im, iu, shift, hVec);</span> - } -<span class="fc" id="L215"> }</span> -<span class="fc" id="L216"> }</span> - - /** - * Computes the L1 norm of the (quasi-)triangular matrix T. - * - * @return the L1 norm of matrix T - */ - private double getNorm() { -<span class="fc" id="L224"> double norm = 0.0;</span> -<span class="fc bfc" id="L225" title="All 2 branches covered."> for (int i = 0; i < matrixT.length; i++) {</span> - // as matrix T is (quasi-)triangular, also take the sub-diagonal element into account -<span class="fc bfc" id="L227" title="All 2 branches covered."> for (int j = FastMath.max(i - 1, 0); j < matrixT.length; j++) {</span> -<span class="fc" id="L228"> norm += FastMath.abs(matrixT[i][j]);</span> - } - } -<span class="fc" id="L231"> return norm;</span> - } - - /** - * Find the first small sub-diagonal element and returns its index. - * - * @param startIdx the starting index for the search - * @param norm the L1 norm of the matrix - * @return the index of the first small sub-diagonal element - */ - private int findSmallSubDiagonalElement(final int startIdx, final double norm) { -<span class="fc" id="L242"> int l = startIdx;</span> -<span class="fc bfc" id="L243" title="All 2 branches covered."> while (l > 0) {</span> -<span class="fc" id="L244"> double s = FastMath.abs(matrixT[l - 1][l - 1]) + FastMath.abs(matrixT[l][l]);</span> -<span class="fc bfc" id="L245" title="All 2 branches covered."> if (s == 0.0) {</span> -<span class="fc" id="L246"> s = norm;</span> - } -<span class="fc bfc" id="L248" title="All 2 branches covered."> if (FastMath.abs(matrixT[l][l - 1]) < epsilon * s) {</span> -<span class="fc" id="L249"> break;</span> - } -<span class="fc" id="L251"> l--;</span> -<span class="fc" id="L252"> }</span> -<span class="fc" id="L253"> return l;</span> - } - - /** - * Compute the shift for the current iteration. - * - * @param l the index of the small sub-diagonal element - * @param idx the current eigenvalue index - * @param iteration the current iteration - * @param shift holder for shift information - */ - private void computeShift(final int l, final int idx, final int iteration, final ShiftInfo shift) { - // Form shift -<span class="fc" id="L266"> shift.x = matrixT[idx][idx];</span> -<span class="fc" id="L267"> shift.y = shift.w = 0.0;</span> -<span class="pc bpc" id="L268" title="1 of 2 branches missed."> if (l < idx) {</span> -<span class="fc" id="L269"> shift.y = matrixT[idx - 1][idx - 1];</span> -<span class="fc" id="L270"> shift.w = matrixT[idx][idx - 1] * matrixT[idx - 1][idx];</span> - } - - // Wilkinson's original ad hoc shift -<span class="fc bfc" id="L274" title="All 2 branches covered."> if (iteration == 10) {</span> -<span class="fc" id="L275"> shift.exShift += shift.x;</span> -<span class="fc bfc" id="L276" title="All 2 branches covered."> for (int i = 0; i <= idx; i++) {</span> -<span class="fc" id="L277"> matrixT[i][i] -= shift.x;</span> - } -<span class="fc" id="L279"> final double s = FastMath.abs(matrixT[idx][idx - 1]) + FastMath.abs(matrixT[idx - 1][idx - 2]);</span> -<span class="fc" id="L280"> shift.x = 0.75 * s;</span> -<span class="fc" id="L281"> shift.y = 0.75 * s;</span> -<span class="fc" id="L282"> shift.w = -0.4375 * s * s;</span> - } - - // MATLAB's new ad hoc shift -<span class="fc bfc" id="L286" title="All 2 branches covered."> if (iteration == 30) {</span> -<span class="fc" id="L287"> double s = (shift.y - shift.x) / 2.0;</span> -<span class="fc" id="L288"> s = s * s + shift.w;</span> -<span class="pc bpc" id="L289" title="1 of 2 branches missed."> if (s > 0.0) {</span> -<span class="fc" id="L290"> s = FastMath.sqrt(s);</span> -<span class="pc bpc" id="L291" title="1 of 2 branches missed."> if (shift.y < shift.x) {</span> -<span class="fc" id="L292"> s = -s;</span> - } -<span class="fc" id="L294"> s = shift.x - shift.w / ((shift.y - shift.x) / 2.0 + s);</span> -<span class="fc bfc" id="L295" title="All 2 branches covered."> for (int i = 0; i <= idx; i++) {</span> -<span class="fc" id="L296"> matrixT[i][i] -= s;</span> - } -<span class="fc" id="L298"> shift.exShift += s;</span> -<span class="fc" id="L299"> shift.x = shift.y = shift.w = 0.964;</span> - } - } -<span class="fc" id="L302"> }</span> - - /** - * Initialize the householder vectors for the QR step. - * - * @param il the index of the small sub-diagonal element - * @param iu the current eigenvalue index - * @param shift shift information holder - * @param hVec the initial houseHolder vector - * @return the start index for the QR step - */ - private int initQRStep(int il, final int iu, final ShiftInfo shift, double[] hVec) { - // Look for two consecutive small sub-diagonal elements -<span class="fc" id="L315"> int im = iu - 2;</span> -<span class="pc bpc" id="L316" title="1 of 2 branches missed."> while (im >= il) {</span> -<span class="fc" id="L317"> final double z = matrixT[im][im];</span> -<span class="fc" id="L318"> final double r = shift.x - z;</span> -<span class="fc" id="L319"> double s = shift.y - z;</span> -<span class="fc" id="L320"> hVec[0] = (r * s - shift.w) / matrixT[im + 1][im] + matrixT[im][im + 1];</span> -<span class="fc" id="L321"> hVec[1] = matrixT[im + 1][im + 1] - z - r - s;</span> -<span class="fc" id="L322"> hVec[2] = matrixT[im + 2][im + 1];</span> - -<span class="fc bfc" id="L324" title="All 2 branches covered."> if (im == il) {</span> -<span class="fc" id="L325"> break;</span> - } - -<span class="fc" id="L328"> final double lhs = FastMath.abs(matrixT[im][im - 1]) * (FastMath.abs(hVec[1]) + FastMath.abs(hVec[2]));</span> -<span class="fc" id="L329"> final double rhs = FastMath.abs(hVec[0]) * (FastMath.abs(matrixT[im - 1][im - 1]) +</span> - FastMath.abs(z) + - FastMath.abs(matrixT[im + 1][im + 1])); - -<span class="fc bfc" id="L333" title="All 2 branches covered."> if (lhs < epsilon * rhs) {</span> -<span class="fc" id="L334"> break;</span> - } -<span class="fc" id="L336"> im--;</span> -<span class="fc" id="L337"> }</span> - -<span class="fc" id="L339"> return im;</span> - } - - /** - * Perform a double QR step involving rows l:idx and columns m:n - * - * @param il the index of the small sub-diagonal element - * @param im the start index for the QR step - * @param iu the current eigenvalue index - * @param shift shift information holder - * @param hVec the initial houseHolder vector - */ - private void performDoubleQRStep(final int il, final int im, final int iu, - final ShiftInfo shift, final double[] hVec) { - -<span class="fc" id="L354"> final int n = matrixT.length;</span> -<span class="fc" id="L355"> double p = hVec[0];</span> -<span class="fc" id="L356"> double q = hVec[1];</span> -<span class="fc" id="L357"> double r = hVec[2];</span> - -<span class="fc bfc" id="L359" title="All 2 branches covered."> for (int k = im; k <= iu - 1; k++) {</span> -<span class="fc bfc" id="L360" title="All 2 branches covered."> boolean notlast = k != (iu - 1);</span> -<span class="fc bfc" id="L361" title="All 2 branches covered."> if (k != im) {</span> -<span class="fc" id="L362"> p = matrixT[k][k - 1];</span> -<span class="fc" id="L363"> q = matrixT[k + 1][k - 1];</span> -<span class="fc bfc" id="L364" title="All 2 branches covered."> r = notlast ? matrixT[k + 2][k - 1] : 0.0;</span> -<span class="fc" id="L365"> shift.x = FastMath.abs(p) + FastMath.abs(q) + FastMath.abs(r);</span> -<span class="fc bfc" id="L366" title="All 2 branches covered."> if (Precision.equals(shift.x, 0.0, epsilon)) {</span> -<span class="fc" id="L367"> continue;</span> - } -<span class="fc" id="L369"> p /= shift.x;</span> -<span class="fc" id="L370"> q /= shift.x;</span> -<span class="fc" id="L371"> r /= shift.x;</span> - } -<span class="fc" id="L373"> double s = FastMath.sqrt(p * p + q * q + r * r);</span> -<span class="fc bfc" id="L374" title="All 2 branches covered."> if (p < 0.0) {</span> -<span class="fc" id="L375"> s = -s;</span> - } -<span class="pc bpc" id="L377" title="1 of 2 branches missed."> if (s != 0.0) {</span> -<span class="fc bfc" id="L378" title="All 2 branches covered."> if (k != im) {</span> -<span class="fc" id="L379"> matrixT[k][k - 1] = -s * shift.x;</span> -<span class="fc bfc" id="L380" title="All 2 branches covered."> } else if (il != im) {</span> -<span class="fc" id="L381"> matrixT[k][k - 1] = -matrixT[k][k - 1];</span> - } -<span class="fc" id="L383"> p += s;</span> -<span class="fc" id="L384"> shift.x = p / s;</span> -<span class="fc" id="L385"> shift.y = q / s;</span> -<span class="fc" id="L386"> double z = r / s;</span> -<span class="fc" id="L387"> q /= p;</span> -<span class="fc" id="L388"> r /= p;</span> - - // Row modification -<span class="fc bfc" id="L391" title="All 2 branches covered."> for (int j = k; j < n; j++) {</span> -<span class="fc" id="L392"> p = matrixT[k][j] + q * matrixT[k + 1][j];</span> -<span class="fc bfc" id="L393" title="All 2 branches covered."> if (notlast) {</span> -<span class="fc" id="L394"> p += r * matrixT[k + 2][j];</span> -<span class="fc" id="L395"> matrixT[k + 2][j] -= p * z;</span> - } -<span class="fc" id="L397"> matrixT[k][j] -= p * shift.x;</span> -<span class="fc" id="L398"> matrixT[k + 1][j] -= p * shift.y;</span> - } - - // Column modification -<span class="fc bfc" id="L402" title="All 2 branches covered."> for (int i = 0; i <= FastMath.min(iu, k + 3); i++) {</span> -<span class="fc" id="L403"> p = shift.x * matrixT[i][k] + shift.y * matrixT[i][k + 1];</span> -<span class="fc bfc" id="L404" title="All 2 branches covered."> if (notlast) {</span> -<span class="fc" id="L405"> p += z * matrixT[i][k + 2];</span> -<span class="fc" id="L406"> matrixT[i][k + 2] -= p * r;</span> - } -<span class="fc" id="L408"> matrixT[i][k] -= p;</span> -<span class="fc" id="L409"> matrixT[i][k + 1] -= p * q;</span> - } - - // Accumulate transformations -<span class="fc" id="L413"> final int high = matrixT.length - 1;</span> -<span class="fc bfc" id="L414" title="All 2 branches covered."> for (int i = 0; i <= high; i++) {</span> -<span class="fc" id="L415"> p = shift.x * matrixP[i][k] + shift.y * matrixP[i][k + 1];</span> -<span class="fc bfc" id="L416" title="All 2 branches covered."> if (notlast) {</span> -<span class="fc" id="L417"> p += z * matrixP[i][k + 2];</span> -<span class="fc" id="L418"> matrixP[i][k + 2] -= p * r;</span> - } -<span class="fc" id="L420"> matrixP[i][k] -= p;</span> -<span class="fc" id="L421"> matrixP[i][k + 1] -= p * q;</span> - } - } // (s != 0) - } // k loop - - // clean up pollution due to round-off errors -<span class="fc bfc" id="L427" title="All 2 branches covered."> for (int i = im + 2; i <= iu; i++) {</span> -<span class="fc" id="L428"> matrixT[i][i-2] = 0.0;</span> -<span class="fc bfc" id="L429" title="All 2 branches covered."> if (i > im + 2) {</span> -<span class="fc" id="L430"> matrixT[i][i-3] = 0.0;</span> - } - } -<span class="fc" id="L433"> }</span> - - /** - * Internal data structure holding the current shift information. - * Contains variable names as present in the original JAMA code. - */ -<span class="fc" id="L439"> private static class ShiftInfo {</span> - // CHECKSTYLE: stop all - - /** x shift info */ - double x; - /** y shift info */ - double y; - /** w shift info */ - double w; - /** Indicates an exceptional shift. */ - double exShift; - - // CHECKSTYLE: resume all - } -} -</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.5.201505241946</span></div></body></html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/commons-complex/blob/b3576eeb/site-content/.svn/pristine/04/0431958e36e50ca1c5bd5c3b4eb5c0318d671c3c.svn-base ---------------------------------------------------------------------- diff --git a/site-content/.svn/pristine/04/0431958e36e50ca1c5bd5c3b4eb5c0318d671c3c.svn-base b/site-content/.svn/pristine/04/0431958e36e50ca1c5bd5c3b4eb5c0318d671c3c.svn-base deleted file mode 100644 index d410722..0000000 --- a/site-content/.svn/pristine/04/0431958e36e50ca1c5bd5c3b4eb5c0318d671c3c.svn-base +++ /dev/null @@ -1,160 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html lang="en"> -<head> -<title>Source code</title> -<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style"> -</head> -<body> -<div class="sourceContainer"> -<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a> -<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a> -<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a> -<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a> -<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a> -<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a> -<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a> -<span class="sourceLineNo">008</span> *<a name="line.8"></a> -<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a> -<span class="sourceLineNo">010</span> *<a name="line.10"></a> -<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a> -<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a> -<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a> -<span class="sourceLineNo">014</span> * See the License for the specific language governing permissions and<a name="line.14"></a> -<span class="sourceLineNo">015</span> * limitations under the License.<a name="line.15"></a> -<span class="sourceLineNo">016</span> */<a name="line.16"></a> -<span class="sourceLineNo">017</span><a name="line.17"></a> -<span class="sourceLineNo">018</span>package org.apache.commons.math3.analysis.differentiation;<a name="line.18"></a> -<span class="sourceLineNo">019</span><a name="line.19"></a> -<span class="sourceLineNo">020</span>import org.apache.commons.math3.TestUtils;<a name="line.20"></a> -<span class="sourceLineNo">021</span>import org.apache.commons.math3.exception.DimensionMismatchException;<a name="line.21"></a> -<span class="sourceLineNo">022</span>import org.apache.commons.math3.exception.MathIllegalArgumentException;<a name="line.22"></a> -<span class="sourceLineNo">023</span>import org.apache.commons.math3.util.FastMath;<a name="line.23"></a> -<span class="sourceLineNo">024</span>import org.junit.Test;<a name="line.24"></a> -<span class="sourceLineNo">025</span><a name="line.25"></a> -<span class="sourceLineNo">026</span><a name="line.26"></a> -<span class="sourceLineNo">027</span>/**<a name="line.27"></a> -<span class="sourceLineNo">028</span> * Test for class {@link GradientFunction}.<a name="line.28"></a> -<span class="sourceLineNo">029</span> */<a name="line.29"></a> -<span class="sourceLineNo">030</span>public class GradientFunctionTest {<a name="line.30"></a> -<span class="sourceLineNo">031</span><a name="line.31"></a> -<span class="sourceLineNo">032</span> @Test<a name="line.32"></a> -<span class="sourceLineNo">033</span> public void test2DDistance() {<a name="line.33"></a> -<span class="sourceLineNo">034</span> EuclideanDistance f = new EuclideanDistance();<a name="line.34"></a> -<span class="sourceLineNo">035</span> GradientFunction g = new GradientFunction(f);<a name="line.35"></a> -<span class="sourceLineNo">036</span> for (double x = -10; x < 10; x += 0.5) {<a name="line.36"></a> -<span class="sourceLineNo">037</span> for (double y = -10; y < 10; y += 0.5) {<a name="line.37"></a> -<span class="sourceLineNo">038</span> double[] point = new double[] { x, y };<a name="line.38"></a> -<span class="sourceLineNo">039</span> TestUtils.assertEquals(f.gradient(point), g.value(point), 1.0e-15);<a name="line.39"></a> -<span class="sourceLineNo">040</span> }<a name="line.40"></a> -<span class="sourceLineNo">041</span> }<a name="line.41"></a> -<span class="sourceLineNo">042</span> }<a name="line.42"></a> -<span class="sourceLineNo">043</span><a name="line.43"></a> -<span class="sourceLineNo">044</span> @Test<a name="line.44"></a> -<span class="sourceLineNo">045</span> public void test3DDistance() {<a name="line.45"></a> -<span class="sourceLineNo">046</span> EuclideanDistance f = new EuclideanDistance();<a name="line.46"></a> -<span class="sourceLineNo">047</span> GradientFunction g = new GradientFunction(f);<a name="line.47"></a> -<span class="sourceLineNo">048</span> for (double x = -10; x < 10; x += 0.5) {<a name="line.48"></a> -<span class="sourceLineNo">049</span> for (double y = -10; y < 10; y += 0.5) {<a name="line.49"></a> -<span class="sourceLineNo">050</span> for (double z = -10; z < 10; z += 0.5) {<a name="line.50"></a> -<span class="sourceLineNo">051</span> double[] point = new double[] { x, y, z };<a name="line.51"></a> -<span class="sourceLineNo">052</span> TestUtils.assertEquals(f.gradient(point), g.value(point), 1.0e-15);<a name="line.52"></a> -<span class="sourceLineNo">053</span> }<a name="line.53"></a> -<span class="sourceLineNo">054</span> }<a name="line.54"></a> -<span class="sourceLineNo">055</span> }<a name="line.55"></a> -<span class="sourceLineNo">056</span> }<a name="line.56"></a> -<span class="sourceLineNo">057</span><a name="line.57"></a> -<span class="sourceLineNo">058</span> private static class EuclideanDistance implements MultivariateDifferentiableFunction {<a name="line.58"></a> -<span class="sourceLineNo">059</span> <a name="line.59"></a> -<span class="sourceLineNo">060</span> public double value(double[] point) {<a name="line.60"></a> -<span class="sourceLineNo">061</span> double d2 = 0;<a name="line.61"></a> -<span class="sourceLineNo">062</span> for (double x : point) {<a name="line.62"></a> -<span class="sourceLineNo">063</span> d2 += x * x;<a name="line.63"></a> -<span class="sourceLineNo">064</span> }<a name="line.64"></a> -<span class="sourceLineNo">065</span> return FastMath.sqrt(d2);<a name="line.65"></a> -<span class="sourceLineNo">066</span> }<a name="line.66"></a> -<span class="sourceLineNo">067</span> <a name="line.67"></a> -<span class="sourceLineNo">068</span> public DerivativeStructure value(DerivativeStructure[] point)<a name="line.68"></a> -<span class="sourceLineNo">069</span> throws DimensionMismatchException, MathIllegalArgumentException {<a name="line.69"></a> -<span class="sourceLineNo">070</span> DerivativeStructure d2 = point[0].getField().getZero();<a name="line.70"></a> -<span class="sourceLineNo">071</span> for (DerivativeStructure x : point) {<a name="line.71"></a> -<span class="sourceLineNo">072</span> d2 = d2.add(x.multiply(x));<a name="line.72"></a> -<span class="sourceLineNo">073</span> }<a name="line.73"></a> -<span class="sourceLineNo">074</span> return d2.sqrt();<a name="line.74"></a> -<span class="sourceLineNo">075</span> }<a name="line.75"></a> -<span class="sourceLineNo">076</span><a name="line.76"></a> -<span class="sourceLineNo">077</span> public double[] gradient(double[] point) {<a name="line.77"></a> -<span class="sourceLineNo">078</span> double[] gradient = new double[point.length];<a name="line.78"></a> -<span class="sourceLineNo">079</span> double d = value(point);<a name="line.79"></a> -<span class="sourceLineNo">080</span> for (int i = 0; i < point.length; ++i) {<a name="line.80"></a> -<span class="sourceLineNo">081</span> gradient[i] = point[i] / d;<a name="line.81"></a> -<span class="sourceLineNo">082</span> }<a name="line.82"></a> -<span class="sourceLineNo">083</span> return gradient;<a name="line.83"></a> -<span class="sourceLineNo">084</span> }<a name="line.84"></a> -<span class="sourceLineNo">085</span><a name="line.85"></a> -<span class="sourceLineNo">086</span> }<a name="line.86"></a> -<span class="sourceLineNo">087</span><a name="line.87"></a> -<span class="sourceLineNo">088</span>}<a name="line.88"></a> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</pre> -</div> -</body> -</html>
