Exemple #1
0
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="from">Another polynomial function to clone from.</param>
 public PolynomialFunction(PolynomialFunction from)
 {
     if (from._coefficients != null)
     {
         _coefficients = (double[])from._coefficients.Clone();
     }
 }
Exemple #2
0
            public virtual object Deserialize(object o, Altaxo.Serialization.Xml.IXmlDeserializationInfo info, object parent)
            {
                PolynomialFunction s = null != o ? (PolynomialFunction)o : new PolynomialFunction();

                info.GetArray("Coefficients", out s._coefficients);

                return(s);
            }
Exemple #3
0
            public virtual void Serialize(object obj, Altaxo.Serialization.Xml.IXmlSerializationInfo info)
            {
                PolynomialFunction s = (PolynomialFunction)obj;

                info.AddArray("Coefficients", s._coefficients, s._coefficients.Length);
            }
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="from">Another polynomial function to clone from.</param>
 public PolynomialFunction(PolynomialFunction from)
 {
   if (from._coefficients != null)
     _coefficients = (double[])from._coefficients.Clone();
 }
Exemple #5
0
		public static string Fit(Altaxo.Gui.Graph.Gdi.Viewing.IGraphController ctrl, int order, double fitCurveXmin, double fitCurveXmax, bool showFormulaOnGraph)
		{
			string error;

			double[] xarr, yarr;
			error = GetActivePlotPoints(ctrl, out xarr, out yarr);
			int numberOfDataPoints = xarr.Length;

			if (null != error)
				return error;

			string[] plotNames = GetActivePlotName(ctrl);

			int numberOfParameter = order + 1;
			double[] parameter = new double[numberOfParameter];
			LinearFitBySvd fit =
				new LinearFitBySvd(
				xarr, yarr, null, numberOfDataPoints, order + 1, new FunctionBaseEvaluator(EvaluatePolynomialBase), 1E-5);

			// Output of results

			Current.Console.WriteLine("");
			Current.Console.WriteLine("---- " + DateTime.Now.ToString() + " -----------------------");
			Current.Console.WriteLine("Polynomial regression of order {0} of {1} over {2}", order, plotNames[1], plotNames[0]);

			Current.Console.WriteLine(
				"Name           Value               Error               F-Value             Prob>F");

			for (int i = 0; i < fit.Parameter.Length; i++)
				Current.Console.WriteLine("A{0,-3} {1,20} {2,20} {3,20} {4,20}",
					i,
					fit.Parameter[i],
					fit.StandardErrorOfParameter(i),
					fit.TofParameter(i),
					1 - FDistribution.CDF(fit.TofParameter(i), numberOfParameter, numberOfDataPoints - 1)
					);

			Current.Console.WriteLine("R²: {0}, Adjusted R²: {1}",
				fit.RSquared,
				fit.AdjustedRSquared);

			Current.Console.WriteLine("------------------------------------------------------------");
			Current.Console.WriteLine("Source of  Degrees of");
			Current.Console.WriteLine("variation  freedom          Sum of Squares          Mean Square          F0                   P value");

			double regressionmeansquare = fit.RegressionCorrectedSumOfSquares / numberOfParameter;
			double residualmeansquare = fit.ResidualSumOfSquares / (numberOfDataPoints - numberOfParameter - 1);

			Current.Console.WriteLine("Regression {0,10} {1,20} {2,20} {3,20} {4,20}",
				numberOfParameter,
				fit.RegressionCorrectedSumOfSquares,
				fit.RegressionCorrectedSumOfSquares / numberOfParameter,
				regressionmeansquare / residualmeansquare,
				1 - FDistribution.CDF(regressionmeansquare / residualmeansquare, numberOfParameter, numberOfDataPoints - 1)
				);

			Current.Console.WriteLine("Residual   {0,10} {1,20} {2,20}",
				numberOfDataPoints - 1 - numberOfParameter,
				fit.ResidualSumOfSquares,
				residualmeansquare
				);

			Current.Console.WriteLine("Total      {0,10} {1,20}",
				numberOfDataPoints - 1,
				fit.TotalCorrectedSumOfSquares

				);

			Current.Console.WriteLine("------------------------------------------------------------");

			// add the fit curve to the graph
			IScalarFunctionDD plotfunction = new PolynomialFunction(fit.Parameter);
			XYFunctionPlotItem fittedCurve = new XYFunctionPlotItem(new XYFunctionPlotData(plotfunction), new G2DPlotStyleCollection(LineScatterPlotStyleKind.Line, ctrl.Doc.GetPropertyContext()));

			var xylayer = ctrl.ActiveLayer as XYPlotLayer;
			if (null != xylayer)
				xylayer.PlotItems.Add(fittedCurve);

			return null;
		}