• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Linux腳本開發數學庫在PHP中的重要性

    發布: 2007-5-26 11:30 | 作者: 航程 | 來源: 賽迪網 | 查看: 23次 | 進入軟件測試論壇討論

    領測軟件測試網

    簡介

    與其它開放源碼語言(比如 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 類聲明哪些變量?梢詫ultipleRegression、ANOVA 或 TimeSeries 過程執行類似的分析。

     

    <?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
                  
                  }
                  ?>
                  

       清單 1. SimpleLinearRegression 類的實例變量

    構造函數

    SimpleLinearRegression 類的構造函數方法接受一個 X 和一個 Y 向量,每個向量都有相同數量的值。您還可以為您預計的 Y 值設置一個缺省為 95% 的置信區間(confidence interval)。

    構造函數方法從驗證數據形式是否適合于處理開始。一旦輸入向量通過了“大小相等”和“值大于 1”測試,就執行算法的核心部分。

    執行這項任務涉及到通過一系列 getter 方法計算統計過程的中間值和匯總值。將每個方法調用的返回值賦給該類的一個實例變量。用這種方法存儲計算結果確保了前后鏈接的計算中的調用例程可以使用中間值和匯總值。還可以通過調用該類的輸出方法來顯示這些結果,如清單 2 所描述的那樣。

     

    <?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;
                  }
                  ?>

       清單 2. 調用類輸出方法

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>