• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

用php 实现一元多次线性回归模型 matlab 中 polyfit

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一元多次线性回归模型公式: y = b0 + b1* x + b2 * x^2 + b3 * x^3 + ..... + bn * x^n;

这个matlab中已经给出了方法polyfit();

下面是用php代码实现的:

public function polyfit($n, $x, $y, $poly_n, &$a)
{
for ($i = 0; $i < $n; $i ++) {
$tempx[$i] = 1;
$tempy[$i] = $y[$i];
}
for ($i = 0; $i < 2 * $poly_n + 1; $i++) {
for ($sumxx[$i] = 0, $j = 0; $j < $n; $j++)
{
$sumxx[$i] += $tempx[$j];
$tempx[$j] *= $x[$j];
}
}
for ($i = 0; $i < $poly_n + 1; $i ++) {
for ($sumxy[$i] = 0, $j = 0; $j < $n; $j ++)
{
$sumxy[$i] += $tempy[$j];
$tempy[$j] *= $x[$j];
}
}
for ($i = 0; $i < $poly_n + 1; $i ++) {
for ($j = 0; $j < $poly_n + 1; $j ++) {
$ata[$i*($poly_n + 1) + $j] = $sumxx[$i + $j];
}
}
$this->gauss_solve($poly_n + 1, $ata, $a, $sumxy);
}

public function gauss_solve($n, $A, &$x, $b)
{
for ($k = 0; $k < $n - 1; $k ++)
{
$max = abs($A[$k * $n + $k]); /*find maxmum*/
$r = $k;
for ($i = $k + 1; $i < $n - 1; $i ++) {
if ($max < abs($A[$i * $n + $i]))
{
$max = abs($A[$i * $n + $i]);
$r = $i;
}
}
if ($r != $k) {
for ($i = 0; $i < $n; $i ++) /*change array:A[k]&A[r]*/
{
$max = $A[$k * $n + $i];
$A[$k * $n + $i] = $A[$r * $n + $i];
$A[$r * $n + $i] = $max;
}
}
$max = $b[$k]; /*change array:b[k]&b[r]*/
$b[$k] = $b[$r];
$b[$r] = $max;
for ($i = $k + 1; $i < $n; $i ++)
{
for ($j = $k + 1; $j < $n; $j ++) {
$A[$i * $n + $j] -= $A[$i * $n + $k] * $A[$k * $n + $j] / $A[$k * $n + $k];
}
$b[$i] -= $A[$i * $n + $k] * $b[$k] / $A[$k * $n + $k];
}
}
for ($i = $n - 1; $i >= 0; $x[$i] /= $A[$i * $n + $i], $i --) {
for ($j = $i + 1, $x[$i] = $b[$i]; $j < $n; $j ++) {
$x[$i] -= $A[$i * $n + $j] * $x[$j];
}
}
}

 第一个函数的参数$n, $x, $y, $poly_n, &$a对应的分别是: $n: 也就是第二个参数$x的length; $x 模拟的x的值组成的数组 类似[1, 2, 3, 4, 5]; $y 模拟的y的值组成的数组; $poly_n 模拟的公式的最高次,也就是公式中的n; $a  = [] 空数组;也就是最后要求的b组成的数组;

我参考的是 http://zhidao.baidu.com/link?url=kJ5_vUgIbUhOEYafBzyqE6BDgHJIutumflEPat-_LOnwBPUcgqooMcabGVjt2WlyvPCYGkNlr49Azd77DUcUiS8c552E-55eqCsWoU3SY6e


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转]Delphi 控件属性和事件发布时间:2022-07-18
下一篇:
delphi控件的安装和卸载方法(转)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap