<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術的開始

    統計

    留言簿(18)

    積分與排名

    “?!眰兊牟┛?/h3>

    各個公司技術

    我的鏈接

    淘寶技術

    閱讀排行榜

    評論排行榜

    Commons Math學習筆記——函數積分

     

    2.4 函數積分

    看其他篇章到目錄選擇。

    積分可以說是最常見的了,在函數的一節中我們講過函數的微分和給定變量求值,這里我們講講通過函數求積分,具體的數值積分方法和應用。什么是數值積分?在數值分析中,數值積分是計算定積分數值的方法和理論。在數學分析中,給定函數的定積分的計算不總是可行的。許多定積分不能用已知的積分公式得到精確值。數值積分是利用黎曼積分等數學定義,用數值逼近的方法近似計算給定的定積分值。借助于電子計算設備,數值積分可以快速而有效地計算復雜的積分。Commons Math中的積分包analysis.integration提供了幾種數值積分的實現,UnivariateRealIntegrator接口是積分包中的基礎接口,該接口繼承了math包中的ConvergingAlgorithm接口。具體定義了一系列方法,其中比較主要的有double integrate(UnivariateRealFunction f, double min, double max)方法,這個方法就是通過minmax設定積分區間,通過f設定被積函數,最后返回定積分值的方法??梢钥吹竭@個接口的實現是針對單變量實函數的。多元積分的實現,目前還沒有看到。

    其實在UnivariateRealIntegrator接口下,并不是實現類直接實現該接口,而是通過一個Abstract類來間接實現,首先UnivariateRealIntegratorImpl實現接口,然后具體的積分方法類來繼承這個接口,我認為這是一種策略-模板方法模式~~~

     

    那么看到了具體的結構類圖。我們以辛普森法則求積分的方法為例來看看如何應用Commons Math庫。具體的辛普森積分法可以見本文的參考資料。

    測試代碼如下,其中用到的正弦函數類在2.1節講述函數的時候有定義,忘記的同學可以回顧一下。

     

     1/**
     2 * 
     3 */

     4package algorithm.math;
     5
     6import org.apache.commons.math.ConvergenceException;
     7import org.apache.commons.math.FunctionEvaluationException;
     8import org.apache.commons.math.analysis.DifferentiableUnivariateRealFunction;
     9import org.apache.commons.math.analysis.UnivariateRealFunction;
    10import org.apache.commons.math.analysis.integration.SimpsonIntegrator;
    11import org.apache.commons.math.analysis.integration.UnivariateRealIntegrator;
    12
    13/**
    14 * @author Jia Yu
    15 * @date   2010-11-22
    16 */

    17public class IntegrationTest {
    18
    19 /**
    20  * @param args
    21  */

    22 public static void main(String[] args) {
    23  // TODO Auto-generated method stub
    24  integration();
    25 }

    26
    27 private static void integration() {
    28  // TODO Auto-generated method stub
    29  UnivariateRealFunction f = new SinFunction();
    30        UnivariateRealIntegrator integrator = new SimpsonIntegrator();
    31        
    32        //integrate
    33        System.out.println("f(x)=sin(x)");
    34        try {
    35   System.out.println("integration of f(x) from 0 to Pi is "+integrator.integrate(f, 0, Math.PI));
    36  }
     catch (ConvergenceException e) {
    37   // TODO Auto-generated catch block
    38   e.printStackTrace();
    39  }
     catch (FunctionEvaluationException e) {
    40   // TODO Auto-generated catch block
    41   e.printStackTrace();
    42  }
     catch (IllegalArgumentException e) {
    43   // TODO Auto-generated catch block
    44   e.printStackTrace();
    45  }

    46 }

    47
    48}

    49
    50


    輸出結果:
    f(x)=sin(x)
    integration of f(x) from 0 to Pi is 2.000000064530001

    想擴展的同學可以直接擴展ConvergingAlgorithmImpl抽象類,實驗自己的積分方法。

    相關資料:

    積分:http://zh.wikipedia.org/zh-cn/%E7%A7%AF%E5%88%86

    辛普森積分法:http://zh.wikipedia.org/zh-cn/%E8%BE%9B%E6%99%AE%E6%A3%AE%E7%A9%8D%E5%88%86%E6%B3%95

    辛普森積分法2 http://mathworld.wolfram.com/SimpsonsRule.html

    Commons math包:http://commons.apache.org/math/index.html

    posted on 2010-12-19 21:27 changedi 閱讀(3400) 評論(0)  編輯  收藏 所屬分類: 數學

    主站蜘蛛池模板: 四虎影视精品永久免费| 久久久久亚洲av无码尤物| 中文字幕乱码系列免费| 亚洲国产精品一区二区久久| 亚洲啪啪免费视频| 青草青草视频2免费观看| 亚洲AV无码不卡无码| 在线播放免费人成视频在线观看| sss在线观看免费高清| 亚洲日韩乱码久久久久久| 亚洲AV伊人久久青青草原| 99久9在线|免费| 国产成人综合亚洲一区| 精品日韩亚洲AV无码| 哒哒哒免费视频观看在线www| 一区二区三区观看免费中文视频在线播放 | 亚洲欧洲日韩极速播放| 亚洲中文字幕第一页在线| 久久精品无码一区二区三区免费 | 性色av免费观看| 久久爰www免费人成| 黄色免费网址大全| 亚洲一级毛片免费看| 久久久久久久尹人综合网亚洲| 搡女人免费视频大全| 免费在线看污视频| 特级毛片在线大全免费播放| 亚洲一区免费在线观看| 亚洲成色www久久网站夜月| 亚洲国产精品丝袜在线观看| 亚洲中文无码永久免费 | 亚洲人成伊人成综合网久久久 | 波多野结衣在线免费视频| 中文字幕免费在线看电影大全 | 亚洲人AV永久一区二区三区久久| 色窝窝免费一区二区三区| 99在线视频免费| 永久免费AV无码网站国产| 成年大片免费高清在线看黄| 日韩亚洲国产综合高清| 亚洲一级毛片免费看|