我正在尝试使用 C# 应用程序分析一些数据,并且需要计算趋势线。我知道趋势线有多种类型,但现在我正在尝试计算指数增长;我将使用它来预测未来的价值。我一直在研究的方程式是
x(t) = x(0) * ((1+r)^t)
这是我为尝试复制图形而编写的代码:
public void ExponentialBestFit(List<DateTime> xvalues, List<double> yvalues)
{
//Find the first value of y (The start value) and the first value of x (The start date)
xzero = Convert.ToDouble(xvalues[0].ToOADate());
yzero = yvalues[0];
if (yzero == 0)
yzero += 0.1;
//For every value of x (exluding the 1st value) find the r value
//
// | y | Where t = the time sinse the start time (time period)
//Equation for r = t root|-------| - 1 Where y = the current y value
// | y[0] | Where y[0] = the first y value #IMPROVMENT - Average 1st y value in range
//
double r = 0;
//c is a count of how many r values are added; it is not equal to the count of all the values
int c = 0;
for (int i = 1; i < xvalues.Count; i++)
{
r += Math.Pow(yvalues[i]/yzero, 1/(Convert.ToDouble(xvalues[i].ToOADate()) - xzero)) - 1;
c++;
}
r = r / c;
}
我传入的数据是一段时间内的,但是时间增加的增量并不相同。当我在 excel 中创建图表时,他们使用不同的公式
x(t) = x(0)*(e^kt)
但是我想我不知道 k 值是从哪里生成的。我传入的两个列表是日期和值,每个列表中的每一行对应于另一个列表中的同一行。问题是 - 有没有更好的方法来创建方程和变量,我得到的变量对于我的数据来说是最准确的吗?