📄 exponentregress.cs
字号:
using System;
namespace InfieldForecast.ForecastModels
{
/// <summary>
/// 指数回归方程
/// </summary>
///
public class ExponentRegress : RegressFormulaStrategy
{
private LinearRegress linearRegress;
private double[] lnYArray;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="xArray">时间序列数组</param>
/// <param name="yArray">观察值数组</param>
public ExponentRegress(double[] xArray,double[] yArray)
{
//
// TODO: 在此处添加构造函数逻辑
//
this.xArray=xArray;
this.yArray=yArray;
init();
}
private void init()
{
this.lnYArray=new double[yArray.Length];
for(int i=0;i<yArray.Length;i++)
{
lnYArray[i]=Math.Log(yArray[i],Math.E);
}
this.linearRegress=new LinearRegress(xArray,lnYArray);
}
public override double[] buildFormula()
{
double[] coefficient=this.linearRegress.buildFormula();
coefficient[0]=Math.Pow(Math.E,coefficient[0]);
coefficient[1]=Math.Pow(Math.E,coefficient[1]);
reverseArray(coefficient);
return coefficient;
}
private void reverseArray(double[] dataArray)
{
double temp=dataArray[0];
dataArray[0]=dataArray[1];
dataArray[1]=temp;
}
public override double computeR2()
{
return this.linearRegress.computeR2();
}
public override double computeR()
{
return Math.Sqrt(computeR2());
}
public override double forecast(double x)
{
double[] coefficientArray=getCoefficientArray();
return coefficientArray[1]*Math.Pow(coefficientArray[0],x);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -