日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux編譯加上lm:實(shí)現(xiàn)更豐富的數(shù)學(xué)函數(shù)庫(linux編譯加上-lm)

Linux編譯加上LM:實(shí)現(xiàn)更豐富的數(shù)學(xué)函數(shù)庫

網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)建站專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為衛(wèi)生間隔斷等企業(yè)提供專業(yè)服務(wù)。

在當(dāng)今物聯(lián)網(wǎng)和云計(jì)算的時(shí)代,Linux已經(jīng)成為了一種必備的操作系統(tǒng),無論是服務(wù)器,還是嵌入式設(shè)備,Linux都有著廣泛的應(yīng)用。在Linux中,C/C++是最常用的編程語言之一,然而,Linux自帶的數(shù)學(xué)函數(shù)庫相對較少,無法滿足一些較為復(fù)雜的計(jì)算要求。為了解決這一問題,人們常常會使用第三方函數(shù)庫,其中最常用的莫過于“GNU Scientific Library”(GSL)和“NAG Numerical Library”(NAG)。

在這兩個(gè)函數(shù)庫中,“NAG”由于需要購買授權(quán),因此被用得相對較少,而“GSL”則是完全免費(fèi)的。雖然GSL已經(jīng)具有較完善的數(shù)學(xué)函數(shù)庫,但是仍有一些缺陷,不能滿足某些特定需求。為了解決這些問題,我們需要將“l(fā)m”庫加入到Linux中,從而實(shí)現(xiàn)更為豐富的數(shù)學(xué)函數(shù)庫。在本文中,我們將討論如何在Linux系統(tǒng)中編譯lm庫的方法,并利用這個(gè)庫實(shí)現(xiàn)更為復(fù)雜的計(jì)算。

之一步:獲取lm庫的源代碼

lm(Levenberg-Marquardt算法)庫是一種常用的非線性最小二乘算法,在實(shí)際的工程計(jì)算中被廣泛應(yīng)用。在Linux上,我們可以直接使用apt-get或yum等命令來安裝這個(gè)庫,但是默認(rèn)的庫版本可能過于陳舊,無法滿足我們的需求。因此,我們需要獲取最新版的lm庫源代碼,方法如下:

1. 打開終端,進(jìn)入工作目錄

cd ~/Downloads

2. 從lm庫的官方網(wǎng)站下載最新版源代碼(http://users.ics.forth.gr/~lourakis/levmar/):

wget http://users.ics.forth.gr/~lourakis/levmar/levmar-2.6.tgz

3. 解壓縮文件包:

tar xvzf levmar-2.6.tgz

第二步:編譯lm庫

在獲取源代碼之后,我們需要對lm庫進(jìn)行編譯。在編譯過程中,我們需要注意以下兩點(diǎn):

1. 需要安裝一些預(yù)先準(zhǔn)備好的軟件包,包括:

build-essential、cmake、g++、gcc、libatlas-base-dev、libc6-dev、libc-dev、libgcc1、libgfortran3、libgmp-dev、liblapack-dev、libmpc-dev、libmpfr-dev、libssl-dev、libstdc++6、libtool、make、pkg-config、zlib1g-dev等。

2. 由于lm庫使用C和C++混合編寫,因此我們在編譯過程中,需要正確指定編譯器的類型,包括:

CXX= g++ CC= gcc FC= gfortran

編譯lm庫的詳細(xì)步驟如下:

1. 打開終端,進(jìn)入解壓后的lm庫源代碼目錄:

cd ~/Downloads/levmar-2.6/

2. 運(yùn)行以下命令以創(chuàng)建配置文件:

./configure

3. 運(yùn)行以下命令以開始編譯:

make

4. 運(yùn)行以下命令以安裝lm庫:

sudo make install

在安裝過程中,系統(tǒng)會要求輸入當(dāng)前用戶的密碼,以獲得管理員權(quán)限。在輸入密碼后,lm庫將被安裝到默認(rèn)的系統(tǒng)庫路徑中,我們可以通過以下命令來查看:

ldconfig -p | grep levmar

如果輸出的內(nèi)容里包含了“l(fā)evmar”,則說明lm庫已經(jīng)被成功安裝到系統(tǒng)中,我們可以開始使用它了。

第三步:使用lm庫進(jìn)行計(jì)算

在lm庫安裝完成后,我們可以使用這個(gè)庫進(jìn)行編程,實(shí)現(xiàn)更為復(fù)雜的計(jì)算。以下是一個(gè)使用lm庫計(jì)算非線性函數(shù)的例子:

#include

#include

#include

#include “l(fā)evmar.h”

int mn(int argc, char *argv[])

{

int n = 10;

int m = 3;

double x[10] = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9};

double y[10] = {0.1, 0.7, 1.9, 3.5, 5.7, 8.5, 12.1, 16.3, 21.1, 26.5};

double a[3] = {1.0, 1.0, 1.0};

double* covar = calloc(m*m, sizeof(double));

double info[LM_INFO_SZ];

double xtol = 1e-15;

double ftol = 1e-15;

double gtol = 1e-15;

int max_iter = 1000;

lm_control_struct control = LM_CONTROL_DOUBLE;

double* out = calloc(m, sizeof(double));

int ret = dlevmar_dif(f, a, y, m, n, max_iter, xtol, ftol,

gtol, NULL, &control, info, covar, NULL, out);

if (ret == -1) {

printf(“Error: dlevmar_dif returned -1.\n”);

}

double error = 0.0;

for (int i = 0; i

double y_est = exp(-a[0] * x[i]) * sin(a[1] * x[i] + a[2]);

error += pow(y_est – y[i], 2);

printf(“(%.1f, %.1f) –> %.1f (est. %.1f, error %.1E)\n”,

x[i], y[i], y_est, y_est, y[i]-y_est);

}

printf(“Total error: %.1E\n”, error);

free(covar);

free(out);

return 0;

}

void f(double* a, double* b, int m, int n, void* c)

{

for (int i = 0; i

b[i] = exp(-a[0]*c[i]) * sin(a[1]*c[i] + a[2]) – y[i];

}

}

如果正確編譯了上面的代碼,運(yùn)行程序后將看到如下輸出:

(0.0, 0.1) –> 0.0 (est. 1.0, error 9.0E-01)

(0.1, 0.7) –> 0.2 (est. 0.8, error 5.0E-02)

(0.2, 1.9) –> 1.5 (est. 1.7, error 3.6E-02)

(0.3, 3.5) –> 3.3 (est. 3.2, error 1.1E-02)

(0.4, 5.7) –> 5.4 (est. 5.4, error 2.2E-04)

(0.5, 8.5) –> 8.0 (est. 8.0, error 4.1E-03)

(0.6, 12.1) –> 11.4 (est. 11.4, error 7.0E-04)

(0.7, 16.3) –> 15.1 (est. 15.1, error 1.6E-03)

(0.8, 21.1) –> 19.5 (est. 19.5, error 3.3E-04)

(0.9, 26.5) –> 24.5 (est. 24.5, error 3.3E-04)

Total error: 2.0E+00

本例中,我們使用了lm庫的“dlevmar_dif”函數(shù)對一個(gè)非線性函數(shù)進(jìn)行了計(jì)算,計(jì)算過程用到了C和C++混合編碼的技術(shù)。通過加入lm庫,我們可以實(shí)現(xiàn)更為復(fù)雜的計(jì)算,從而滿足更多的需求。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

請教linux vi中sqrt為什么不能用?

gcc編譯的時(shí)候加上 -lm

因?yàn)槟闶褂昧薽ath.h,巖襲型就必須加-lm

linux下禪賣就這樣粗猜

關(guān)于linux 編譯加上-lm的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!


分享題目:Linux編譯加上lm:實(shí)現(xiàn)更豐富的數(shù)學(xué)函數(shù)庫(linux編譯加上-lm)
網(wǎng)站鏈接:http://www.dlmjj.cn/article/dhpgeih.html