php预测算法,趋势预测法-PHP实现

/**

* 数值趋势测算法

* @param int $datas 数据样本

* @param int $k 测算期数

* @param int $n 平均值长度

* @return array 预测数据

* @author leeldy

*/

function cal_tendency($datas, $k = 1, $n = false) {

//数据期数

$t = count($datas);

//判断n是否满足要求

if ($n) {

if ($t < $n + $n - 1) {

exit('平均值长度n数值过大!');

}

} else {

//取最大的n值

$n = intval(($t + 1) / 2);

}

$m = array(

//一次平均值

1 => array(),

//二次平均值

2 => array()

);

//前n项和

$m_1 = 0;

//前n项一次平均值和

$m_2 = 0;

//一次平均值开始计算点下标

$n_1 = $n - 1 - 1;

//二次平均值开始计算点下标

$n_2 = $n_1 + $n - 1;

//计算平均值

for ($i = 0; $i < $t; $i++) {

//数据前n项和

$m_1 += $datas[$i];

if ($i > $n_1) {

//开始计算一次平均值

$m[1][$i] = $m_1 / $n;

//去除最前一项

$m_1 -= $datas[$i - $n + 1];

//一次平均值前n项和

$m_2 += $m[1][$i];

if ($i > $n_2) {

//计算二次平均值

$m[2][$i] = $m_2 / $n;

$m_2 -= $m[1][$i - $n + 1];

}

}

}

//计算基本值和趋势系数

$at = $m[1][$t - 1] + $m[1][$t - 1] - $m[2][$t - 1];

$bt = 2 / ($n - 1) * ($m[1][$t - 1] - $m[2][$t - 1]);

//计算趋势

$result = array($at);

$i = 0;

while (++$i < $k) {

$result[$i] = $result[$i - 1] + $bt;

}

return $result;

}

算法说明详见:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值