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

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

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

    Change Dir

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

    統(tǒng)計

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評論排行榜

    Commons Math學習筆記——函數(shù)方程求解

     

    看其他篇章到目錄選擇。

    函數(shù)方程求解,其實是函數(shù)的零點問題,也就是說函數(shù)的曲線與X軸的交點。對于線性方程,我們可以輕易的求解,對于線性方程組,利用前面講過的的矩陣分解方法也可以求解。那么對于函數(shù)表達的很多非線性方程的求解。我們要依賴數(shù)值算法。Commons Math包中專門有一個analysis.solver包來解決這個問題。

    Analysis.solver包中有一個基本接口類——UnivariateRealSolver,其中定義了一系列接口方法,最重要的方法就是double solve(UnivariateRealFunction f, double min, double max)了。很明顯,這個方法的參數(shù)是函數(shù)的表達式以及求解的區(qū)間范圍,返回值是函數(shù)在區(qū)間內(nèi)的一個零值點。

    Solver包中的這些類的組織結(jié)構(gòu)形式與積分中的類似,結(jié)構(gòu)類圖如下:


     

    具體的求解算法有很多,solver包中也實現(xiàn)了很多算法,包括對分法、牛頓法等。我們這里以這兩個算法的實現(xiàn)為例,看看該如何使用這個包中的接口方法。待求解的函數(shù)仍以正弦函數(shù)為例。

     

     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.UnivariateRealFunction;
     9import org.apache.commons.math.analysis.solvers.BisectionSolver;
    10import org.apache.commons.math.analysis.solvers.UnivariateRealSolver;
    11import org.apache.commons.math.analysis.solvers.UnivariateRealSolverFactory;
    12import org.apache.commons.math.analysis.solvers.UnivariateRealSolverFactoryImpl;
    13
    14/**
    15 * @author Jia Yu
    16 * @date   2010-11-24
    17 */

    18public class SolverTest {
    19
    20    /**
    21     * @param args
    22     */

    23    public static void main(String[] args) {
    24        // TODO Auto-generated method stub
    25        solver();
    26        factorySolver();
    27    }

    28
    29    private static void factorySolver() {
    30        // TODO Auto-generated method stub
    31        UnivariateRealFunction f = new SinFunction();
    32        UnivariateRealSolverFactory factory=new UnivariateRealSolverFactoryImpl();
    33        UnivariateRealSolver solver = factory.newNewtonSolver();
    34        try {
    35            System.out.println("NewtonSolver : sin(x)=0 when x from -1 to 1, x = "+ solver.solve(f, -11));
    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        }

    43    }

    44
    45    private static void solver() {
    46        // TODO Auto-generated method stub
    47        UnivariateRealFunction f = new SinFunction();
    48        UnivariateRealSolver solver = new BisectionSolver();
    49        try {
    50            System.out.println("BisectionSolver : sin(x)=0 when x from 3 to 4, x = "+ solver.solve(f, 34));
    51        }
     catch (ConvergenceException e) {
    52            // TODO Auto-generated catch block
    53            e.printStackTrace();
    54        }
     catch (FunctionEvaluationException e) {
    55            // TODO Auto-generated catch block
    56            e.printStackTrace();
    57        }

    58    }

    59
    60}

    61

     

    輸出結(jié)果:
    BisectionSolver : sin(x)=0 when x from 3 to 4, x = 3.141592502593994
    NewtonSolver : sin(x)=0 when x from -1 to 1, x = 0.0
     


    可以看到,程序都輸出了正確的結(jié)果。但是,其實還是可以嘗試一些復雜的參數(shù)來測試算法的,這里就不再多說,不妨看看牛頓法在
    (-1,4)區(qū)間的效果。

    不管是哪種方法,其實都是要設(shè)定誤差限的,默認的是10E-6

    一個小的建議是使用工廠模式的構(gòu)建方法,因為畢竟這個包內(nèi)提供了工廠的實現(xiàn),那為什么不用這種更靈活的方式呢?

    寫了方程求解的例子,就不要再問什么求平方根的牛頓法或者立方根什么的問題了,不就是x^n-R=0的方程嘛,設(shè)定區(qū)間[0,+]就可以了。原理明白,其他的問題都很好解決,不是嗎?

    相關(guān)資料:

    對分法:http://mathworld.wolfram.com/Bisection.html

    牛頓法:http://mathworld.wolfram.com/NewtonsMethod.html

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

     

    posted on 2010-12-21 17:18 changedi 閱讀(3625) 評論(0)  編輯  收藏 所屬分類: 數(shù)學

    主站蜘蛛池模板: 亚洲嫩模在线观看| 亚洲无线码在线一区观看| 亚洲国产成人精品电影| 久9热免费精品视频在线观看| 亚洲人成人77777网站| 国产视频精品免费视频| 国产亚洲AV夜间福利香蕉149| 免费一级全黄少妇性色生活片| 亚洲国产一区二区三区| 久久九九久精品国产免费直播| 亚洲最大AV网站在线观看| a级毛片毛片免费观看久潮喷| 亚洲精品成人av在线| 曰批全过程免费视频网址| 亚洲国产成人精品青青草原| 在线看片免费不卡人成视频| 亚洲精品无码你懂的| 免费大黄网站在线观看| 中国国语毛片免费观看视频| 亚洲国产精品无码久久久不卡| 2021在线永久免费视频| 亚洲日韩久久综合中文字幕| 四虎AV永久在线精品免费观看| 精品乱子伦一区二区三区高清免费播放 | mm1313亚洲国产精品无码试看| 婷婷亚洲天堂影院| 老司机69精品成免费视频| 亚洲女人影院想要爱| 国产三级免费电影| 四虎影视无码永久免费| 亚洲欧洲尹人香蕉综合| mm1313亚洲精品无码又大又粗 | 亚洲天堂2017无码中文| 国产a不卡片精品免费观看| 韩日电影在线播放免费版| 亚洲人色大成年网站在线观看| 国产美女精品久久久久久久免费| 久久国产乱子精品免费女| 亚洲中文字幕乱码熟女在线| 亚洲自偷自偷在线制服| 国产精品成人免费视频网站京东 |