青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 51, 文章 - 1, 評論 - 41, 引用 - 0
  • 數據加載中……

    求向量的歐拉范數

          求歐拉范數是一個比較簡單的算法,似乎沒有什么可說的,一般代碼如下:
    /** \fn double enorm1(long n, const double* x)
    * \brief 求歐拉范數,簡單算法。
    * \param [in] n 向量長度
    * \param [in] x 向量值 
    * \return 歐拉范數
    */
    double enorm1(long n, const double* x)
    {
        
    double ret = 0.0;
        
    long i = 0;
        
    for (i=0; i<n; ++i)
            ret 
    += x[i]*x[i];
            
        
    return sqrt(ret);
    }

    然而近日在學習minpack時,發現它求歐拉范數的函數enorm則要復雜得多。仔細比較發現上面算法有不足,它沒有考慮溢出的情況,當x[i]為很小或者很大的數時,x[i]*x[i]則會下溢或者上溢,最后結果可能不準確。但x[i]*x[i]只是中間結果,最后的范數數量級應該和x[i]相同。它溢出的可能性要小得多。改進中間結果則可以改進算法。

    /** \fn double enorm2(long n, const double* x)
    * \brief 求歐拉范數,考慮溢出的算法。
    * \param [in] n 向量長度
    * \param [in] x 向量值 
    * \return 歐拉范數
    */
    double enorm2(long n, const double *x)
    {
        
    double ret = 0.0;
        
    long i= 0;
        
    double xmax = 0.0;
        
        
    for (i=0; i<n; ++i)
        {
            
    double xabs = fabs(x[i]);
            
            
    /* 這個比較方式不需要考慮xabs和xmax為0的情況 */
            
    if (xabs < xmax)
            {
                ret 
    += (xabs/xmax)*(xabs/xmax);
            }
            
    else if (xabs == xmax)  
            {
                ret 
    += 1;
            }
            
    else
            {
                ret 
    = 1 + ret*(xmax/xabs)*(xmax/xabs);
                xmax 
    = xabs;
            }
        }
        
    return sqrt(ret) * xmax;
    }

       將中間結果改成(x[i]/xmax)*(x[i]/xmax),降低了溢出的可能。當然該算法沒有區分可能溢出和不溢出的數,計算量較大。下面的算法是仿照minpack的enorm函數編寫:

    /** \fn double enorm3(long n, const double* x)
    * \brief 求歐拉范數,仿照minpack的enorm函數
    * \param [in] n 向量長度
    * \param [in] x 向量值 
    * \return 歐拉范數
    */
    double enorm3(long n, const double *x)
    {
        
    double s1 = 0.0;    
        
    double s2 = 0.0;    
        
    double s3 = 0.0;    
        
        
    /* 上溢和下溢的邊界,不一定要十分精確 */
        
    const double dwarf = 1.483e-154;    /* 下溢的邊界 */
        
    const double giant = 1.341e154 / n; /* 上溢的邊界 */
        
        
    double x1max = 0.0
        
    double x3max = 0.0
        
        
    long i = 0;
        
    for (i=0; i<n; ++i)
        {
            
    double xabs = fabs(x[i]);
            
            
    if (xabs > dwarf && xabs < giant)
            {
                s2 
    += xabs*xabs;
            }
            
    else if (xabs <= dwarf)
            {
                
    /* 這個比較方式不需要考慮xabs和xmax為0的情況 */
                
    if (xabs < x3max)
                {
                    s3 
    += (xabs/x3max)*(xabs/x3max);
                }
                
    else if (xabs == x3max)
                {
                    s3 
    += 1;
                }
                
    else
                {
                    s3 
    =1 + s3*(x3max/xabs)*(x3max/xabs);
                    x3max 
    = xabs;
                }
            }
            
    else /* if (xabs >= giant) */
            {
                
    /* 不需要考慮xabs和xmax為0的情況 */
                
    if (xabs <= x1max)
                {
                    s1 
    += (xabs/x1max)*(xabs/x1max);
                }
                
    else if (xabs == x1max)
                {
                    s1 
    += 1;
                }
                
    else
                {
                    s1 
    =1 + s1*(x1max/xabs)*(x1max/xabs);
                    x1max 
    = xabs;
                }
            }
        }
        
        
    if (s1 != 0.0)
        {
            
    return x1max*sqrt(s1 + s2/x1max/x1max);
        }
        
    else if (s2 != 0.0)
        {
            
    return sqrt(s2 + x3max*x3max*s3);
            
    /* 下面為minpack中enorm的代碼,好像沒有必要 
            if (s2 >= x3max)
                return sqrt(s2 * (1 + x3max/s2*x3max*s3));
            else
                return sqrt(x3max * (s2/x3max + x3max*s2));
            
    */
        }
        
    else
        {
            
    return x3max * sqrt(s3);
        }
    }

     

    下面是測試結果:

    <td style="BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BO

     

    posted on 2009-05-07 13:07 lemene 閱讀(1572) 評論(0)  編輯 收藏 引用

    向量

    enorm1

    enorm2

    enorm3

    {1, 2, 3}

    3.74166

    3.74166

    3.74166

    {1e200, 2e200, 3e200}

    1.#INF

    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

    <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            这里只有精品电影| 亚洲高清在线观看一区| 久久久综合激的五月天| 久久久综合精品| 亚洲一区二区黄| 日韩一区二区免费看| 欧美午夜电影网| 宅男噜噜噜66一区二区66| 日韩图片一区| 久久中文在线| 夜夜嗨av色一区二区不卡| 国产免费成人| 国产视频精品免费播放| 国产日韩欧美亚洲| 欧美精品一区二区三区蜜臀| 久久亚洲综合| 欧美日韩在线三区| 国产日韩欧美一区在线 | 欧美三级不卡| 麻豆精品在线视频| 亚洲国产中文字幕在线观看| 亚洲日本中文字幕免费在线不卡| 欧美色视频日本高清在线观看| 久久成人精品一区二区三区| 久久频这里精品99香蕉| 欧美日韩国产精品一区| 国产有码一区二区| 国产精品一区二区男女羞羞无遮挡 | 欧美日韩日本网| 久久亚洲欧美国产精品乐播| 亚洲一区二区在线视频| 久久久综合网站| 国产精品xnxxcom| 亚洲大片在线| 在线精品亚洲| 亚洲欧美日韩国产一区二区三区 | 欧美激情在线狂野欧美精品| 亚洲一区二区视频| 欧美成人免费全部观看天天性色| 久久精品道一区二区三区| 欧美激情视频一区二区三区在线播放 | 亚洲欧美日韩中文视频| 最新日韩中文字幕| 国内精品久久久久久久97牛牛| 亚洲精品视频在线观看免费| 久久影音先锋| 欧美v日韩v国产v| 美女性感视频久久久| 久久一区激情| 亚洲一区二区三区高清| 欧美日韩国产一区二区三区地区 | 亚洲精品在线一区二区| 久久人体大胆视频| 玖玖玖免费嫩草在线影院一区| 先锋影音国产精品| 欧美久久一区| 亚洲精品在线观看免费| 中文一区字幕| 亚洲欧美国产77777| 久久久久久精| 女女同性女同一区二区三区91| 亚洲欧美日韩成人高清在线一区| 亚洲无限av看| 亚欧成人精品| 久久久久se| 男人的天堂亚洲在线| 欧美aⅴ99久久黑人专区| 欧美国产一区二区三区激情无套| 国产一区二区三区观看| 欧美中文在线免费| 亚洲福利视频一区二区| 免费成人高清视频| 亚洲美洲欧洲综合国产一区| 亚洲欧洲一二三| 欧美日韩色一区| 国产欧美一区二区精品性色| 新67194成人永久网站| 亚洲制服av| 国产亚洲激情| 欧美jizzhd精品欧美巨大免费| 欧美激情成人在线| 亚洲一区二区在线免费观看视频| 久久久久久久久伊人| 久久精品视频网| 最新中文字幕亚洲| 久久久久久久久蜜桃| 久久综合伊人77777麻豆| 日韩视频二区| 久久亚洲精品一区二区| 噜噜噜久久亚洲精品国产品小说| 亚洲精品五月天| 麻豆精品91| 欧美国产精品劲爆| 欧美一区二区免费观在线| 久久欧美中文字幕| 亚洲欧美视频在线观看| 久久网站免费| 亚洲综合视频一区| 久久综合电影| 性做久久久久久免费观看欧美| 久久免费视频网| 亚洲影院免费| 亚洲作爱视频| 韩国久久久久| 99re66热这里只有精品3直播| 国内精品视频久久| 亚洲精品精选| 美女诱惑一区| 国模大胆一区二区三区| 欧美成人亚洲成人日韩成人| 欧美一区二区在线观看| 欧美性猛交一区二区三区精品| 亚洲电影在线免费观看| 久久国产日本精品| 亚洲在线视频免费观看| 欧美视频一区二区三区| 久久精品伊人| 久久er精品视频| 一区二区三区免费网站| 久久久国产精品一区二区中文| 久久久噜噜噜久久久| 国产精品外国| 日韩视频永久免费观看| 亚洲国产精品电影在线观看| 麻豆精品传媒视频| 欧美性jizz18性欧美| 亚洲国产日韩美| 欧美日韩亚洲一区二区三区在线 | 亚洲第一区中文99精品| 美女在线一区二区| 久久久国产精品一区二区三区| 亚洲一区中文| 欧美色综合网| 国产精品99久久久久久宅男| 国产乱子伦一区二区三区国色天香| 亚洲国产精品一区二区三区| 欧美日韩视频专区在线播放| 免费成人你懂的| 欧美黄色小视频| 亚洲性图久久| 欧美日韩一区二区三区在线| 欧美一区二区三区四区高清 | 日韩午夜电影在线观看| 日韩一区二区精品视频| 国产精品亚洲激情| 老司机精品视频网站| 国产麻豆成人精品| 午夜欧美不卡精品aaaaa| 久久精品欧美日韩| 精品福利av| 一区二区三区日韩精品视频| 中日韩男男gay无套| 欧美日韩一区在线观看视频| 一区二区日韩欧美| 欧美一级视频一区二区| 欧美aa在线视频| 亚洲男人影院| 久久久久久久久久久久久9999| 久久亚裔精品欧美| 欧美性色综合| 午夜亚洲激情| 亚洲调教视频在线观看| 久久精品亚洲乱码伦伦中文| 久热精品在线视频| 亚洲三级影院| 国产精品一区二区三区四区五区 | 久久精品国产亚洲aⅴ| 国产综合自拍| 欧美母乳在线| 久久本道综合色狠狠五月| 亚洲一区二区三区在线看| 欧美视频导航| 亚洲精品久久久一区二区三区| 亚洲一区二区综合| 伊人久久男人天堂| 欧美一区二区三区免费在线看| 欧美国产在线观看| 亚洲国产精品久久久久秋霞影院 | 免费国产自线拍一欧美视频| 日韩写真在线| 亚洲第一中文字幕| 欧美日韩精品福利| 久久久国产91| 久久伊人免费视频| 国产亚洲制服色| 免费视频最近日韩| 免费不卡在线视频| 国内久久精品| 欧美一区二区三区免费观看| 午夜精品久久久久| 亚洲高清不卡| 欧美国产激情| 欧美一区二区免费| 久久天堂成人| 黄色日韩网站视频| 久久精品亚洲一区二区三区浴池| 久久精品国产精品| 亚洲免费在线视频| 国产日韩精品一区二区三区在线| 欧美精品在线一区二区|