首页 php教程 php手册 Linux脚本开发数学库在PHP中的重要性

Linux脚本开发数学库在PHP中的重要性

Jun 21, 2016 am 09:00 AM
gt php this var

  简介

  与其它开放源码语言(比如 Perl 和 Python)相比,PHP 社区缺少强有力的工作来开发数学库。造成这种状况的一个原因可能是由于已经存在大量成熟的数学工具,这可能阻碍了社区自行开发 PHP 工具的工作。例如,我曾研究过一个功能强大的工具 S System,它拥有一组令人印象深刻的统计库,专门被设计成用来分析数据集,并且在 1998 年由于其语言设计而获得了 ACM 奖。如果 S 或者其开放源码同类 R 仅仅是一个 exec_shell 调用,那么为何还要麻烦用 PHP 实现相同的统计计算功能呢?有关 S System、它的 ACM 奖或 R 的更多信息,请参阅参考资料。

  难道这不是在浪费开发人员的精力吗?如果开发 PHP 数学库的动机是出自节省开发人员的精力以及使用最好的工具来完成工作,那么 PHP 现在的课题是很有意义的。

  另一方面,出于教学动机可能会鼓励对 PHP 数学库的开发。对于大约 10% 的人来说,数学是个值得探索的有趣课题。对于那些同时还熟练应用 PHP 的人来说,PHP 数学库的开发可以增强数学学习过程,换句话说,不要只阅读有关 T 测试的章节,还要实现一个能计算相应的中间值并用标准格式显示它们的类。

  通过指导和训练,我希望证明开发 PHP 数学库并不是一项很难的任务,它可能代表一项有趣的技术和学习难题。在本文中,我将提供一个 PHP 数学库示例,名为 SimpleLinearRegression,它演示了一个可以用来开发 PHP 数学库的通用方法。让我们从讨论一些通用的原则开始,这些原则指导我开发这个 SimpleLinearRegression 类。

  指导原则

  我使用了六个通用原则来指导 SimpleLinearRegression 类的开发。

  每个分析模型建立一个类。

  使用逆向链接来开发类。

  预计有大量的 getter。

  存储中间结果。

  为详细的 API 制定首选项。

  尽善尽美并非目标。

  让我们更详细地逐条研究这些指导方针。

  每个分析模型建立一个类

  每种主要的分析测试或过程应当有一个名称与测试或过程名相同的 PHP 类,这个类包含了输入函数、计算中间值和汇总值的函数和输出函数(将中间值和汇总值用文本或图形格式全部显示在屏幕上)。

  使用逆向链接来开发类

  在数学编程中,编码的目标通常是分析过程(比如 MultipleRegression、TimeSeries 或 ChiSquared)所希望生成的标准输出值。从解决问题的角度出发,这意味着您可以使用逆向链接来开发数学类的方法。

  例如,汇总输出屏幕显示了一个或多个汇总统计结果。这些汇总统计结果依赖于中间统计结果的计算,这些中间统计结果又可能会涉及到更深一层的中间统计结果,以此类推。这个基于逆向链接的开发方法导出了下一个原则。

  预计有大量的 getter

  数学类的大部分类开发工作都涉及到计算中间值和汇总值。实际上,这意味着,如果您的类包含许多计算中间值和汇总值的 getter 方法,您不应当感到惊讶。

  存储中间结果

  将中间计算结果存储在结果对象内,这样您就可以将中间结果用作后续计算的输入。在 S 语言设计中实施了这一原则。在当前环境下,通过选择实例变量来表示计算得到的中间值和汇总结果,从而实施了该原则。

  为详细的 API 制定首选项

  当为 SimpleLinearRegression 类中的成员函数和实例变量制定命名方案时,我发现:如果我使用较长的名称(类似于 getSumSquaredError 这样的名称,而不是 getYY2)来描述成员函数和实例变量,那么就更容易了解函数的操作内容和变量所代表的意义。

  我没有完全放弃简写名称;但是,当我用简写形式的名称时,我得设法提供注释以完整阐述该名称的含义。我的看法是:高度简写的命名方案在数学编程中很常见,但它们使得理解和证明某个数学例程是否按部就班更为困难,而原本不必造成此种困难。

  尽善尽美并非目标

  这个编码练习的目标不是一定要为 PHP 开发高度优化和严格的数学引擎。在早期阶段,应当强调学习实现意义重大的分析测试,以及解决这方面的难题。

  实例变量:当对统计测试或过程进行建模时,您需要指出声明哪些实例变量。

  实例变量的选择可以通过说明由分析过程生成的中间值和汇总值来确定。每个中间值和汇总值都可以有一个相应的实例变量,将变量的值作为对象属性。

  我采用这样的分析来确定为清单 1 中的 SimpleLinearRegression 类声明哪些变量。可以对MultipleRegression、ANOVA 或 TimeSeries 过程执行类似的分析。

  

<ccid_code><?php      // Copyright 2003, Paul Meagher   // Distributed under GPL      class SimpleLinearRegression {      var $n;   var $X = array();   var $Y = array();   var $ConfInt;   var $Alpha;   var $XMean;   var $YMean;   var $SumXX;   var $SumXY;   var $SumYY;   var $Slope;   var $YInt;   var $PredictedY  = array();   var $Error    = array();   var $SquaredError = array();   var $TotalError;   var $SumError;   var $SumSquaredError;   var $ErrorVariance;   var $StdErr;   var $SlopeStdErr;   var $SlopeVal;  // T value of Slope   var $YIntStdErr;   var $YIntTVal;  // T value for Y Intercept   var $R;   var $RSquared;   var $DF;     // Degrees of Freedom   var $SlopeProb; // Probability of Slope Estimate   var $YIntProb;  // Probability of Y Intercept Estimate   var $AlphaTVal; // T Value for given alpha setting   var $ConfIntOfSlope;      var $RPath = "/usr/local/bin/R"; // Your path here      var $format = "%01.2f"; // Used for formatting output      }   ?>   </ccid_code>
登录后复制

  

清单 1. SimpleLinearRegression 类的实例变量

  构造函数

  SimpleLinearRegression 类的构造函数方法接受一个 X 和一个 Y 向量,每个向量都有相同数量的值。您还可以为您预计的 Y 值设置一个缺省为 95% 的置信区间(confidence interval)。

  构造函数方法从验证数据形式是否适合于处理开始。一旦输入向量通过了“大小相等”和“值大于 1”测试,就执行算法的核心部分。

  执行这项任务涉及到通过一系列 getter 方法计算统计过程的中间值和汇总值。将每个方法调用的返回值赋给该类的一个实例变量。用这种方法存储计算结果确保了前后链接的计算中的调用例程可以使用中间值和汇总值。还可以通过调用该类的输出方法来显示这些结果,如清单 2 所描述的那样。

  

<ccid_code><?php      // Copyright 2003, Paul Meagher   // Distributed under GPL      function SimpleLinearRegression($X, $Y, $ConfidenceInterval="95") {      $numX = count($X);   $numY = count($Y);      if ($numX != $numY) {   die("Error: Size of X and Y vectors must be the same.");      }   if ($numX <= 1) {   die("Error: Size of input array must be at least 2.");   }      $this->n        = $numX;   $this->X        = $X;   $this->Y        = $Y;      $this->ConfInt     = $ConfidenceInterval;   $this->Alpha      = (1 + ($this->ConfInt / 100) ) / 2;      $this->XMean      = $this->getMean($this->X);   $this->YMean      = $this->getMean($this->Y);   $this->SumXX      = $this->getSumXX();   $this->SumYY      = $this->getSumYY();   $this->SumXY      = $this->getSumXY();   $this->Slope      = $this->getSlope();   $this->YInt      = $this->getYInt();   $this->PredictedY   = $this->getPredictedY();   $this->Error      = $this->getError();   $this->SquaredError  = $this->getSquaredError();   $this->SumError    = $this->getSumError();   $this->TotalError   = $this->getTotalError();   $this->SumSquaredError = $this->getSumSquaredError();   $this->ErrorVariance  = $this->getErrorVariance();   $this->StdErr     = $this->getStdErr();   $this->SlopeStdErr   = $this->getSlopeStdErr();   $this->YIntStdErr   = $this->getYIntStdErr();   $this->SlopeTVal    = $this->getSlopeTVal();   $this->YIntTVal    = $this->getYIntTVal();   $this->R        = $this->getR();   $this->RSquared    = $this->getRSquared();   $this->DF       = $this->getDF();   $this->SlopeProb    = $this->getStudentProb($this->SlopeTVal, $this->DF);   $this->YIntProb    = $this->getStudentProb($this->YIntTVal, $this->DF);   $this->AlphaTVal    = $this->getInverseStudentProb($this->Alpha, $this->DF);   $this->ConfIntOfSlope = $this->getConfIntOfSlope();      return true;   }   ?></ccid_code>
登录后复制

  

清单 2. 调用类输出方法



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

可以通过在控制器中添加以下两行来创建验证器。

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

See all articles