
發(fā)布
注冊(cè)
/
登錄Mathematica代碼
關(guān)注創(chuàng)建者:墨光科技 創(chuàng)建時(shí)間:2020-04-18

Mathematica代碼的實(shí)例教程
02
學(xué)會(huì)Compile
Compile函數(shù)接受Mathematica的代碼,并讓你預(yù)先聲明輸入?yún)?shù)的類(lèi)型(比如實(shí)數(shù)、復(fù)數(shù)等)和結(jié)構(gòu)(如數(shù)值、列表、矩陣等)。這雖然失去了Mathematica語(yǔ)言靈活性的優(yōu)勢(shì),但是可以免于擔(dān)心類(lèi)似于“如果參數(shù)是符號(hào)怎么辦?”的問(wèn)題,Mathematica也可以最優(yōu)化程序并創(chuàng)建一個(gè)字節(jié)碼在虛擬器上運(yùn)行。并不是所有東西都可以被編譯,且簡(jiǎn)單的代碼可能不會(huì)有太大效果,但是那種復(fù)雜的低階數(shù)字代碼速度可以得到大大的提升。
使用Compile可以比Function的運(yùn)行速度提高80倍。
但是我們可以在Compile函數(shù)中加入一些代碼的可并行性質(zhì),這樣可以生成更好的結(jié)果。
在我的雙核處理器電腦上,我的運(yùn)行結(jié)果比原本快150倍,如果是多核處理器那么效果會(huì)更加明顯。
但是要注意,很多Mathematica函數(shù)比如Table、Plot、NIntegrate等會(huì)自動(dòng)編譯它們的參數(shù),這樣的話你使用上述方法可能不會(huì)看到任何速度上的提升。
02.5
使用Compile生成C代碼
另外,如果你的代碼可編譯,你還可以使用選項(xiàng)CompilationTarget->“C”來(lái)生成C代碼,調(diào)用你的C編碼器并將其匯編成一個(gè)DLL,并把這個(gè)DLL鏈接回Mathematica,都是自動(dòng)操作的。在編譯階段,DLL直接在CPU上運(yùn)行而非Mathematica的虛擬器,所以會(huì)更快得到結(jié)果。
03
使用內(nèi)置函數(shù)
Mathematica有很多函數(shù)。起碼半數(shù)以上的人可能不會(huì)坐下來(lái)學(xué)習(xí)所有函數(shù)。
展開(kāi) 當(dāng)我聽(tīng)到人們說(shuō)Mathematica不夠快的時(shí)候,我通常會(huì)提出想要看一下這段令他們煩惱的代碼,然后會(huì)發(fā)現(xiàn),其實(shí)并不是Mathematica本身的表現(xiàn)不夠好,而是Mathematica沒(méi)有被最優(yōu)使用。我覺(jué)得我應(yīng)該和大家分享一下我在優(yōu)化Mathematica代碼時(shí)首先會(huì)看的一些內(nèi)容。
01
如果可以的話盡量盡早使用浮點(diǎn)數(shù)
我最常看到的導(dǎo)致代碼變慢的問(wèn)題是,程序員會(huì)不經(jīng)意地讓Mathematica做超出需要的細(xì)致的事情。沒(méi)必要的代數(shù)精確是其中最常見(jiàn)的問(wèn)題。
在多數(shù)與數(shù)字相關(guān)的軟件中,是不需要這么精確的代數(shù)的。1/3和0.33333333333333是一樣的。當(dāng)你碰到特別嚴(yán)重的在數(shù)字上不穩(wěn)定的問(wèn)題時(shí)這個(gè)差異可能會(huì)被放大的特別明顯,但是,在大多數(shù)情況中,浮點(diǎn)數(shù)已經(jīng)足夠使用了,而且最重要的是,浮點(diǎn)數(shù)運(yùn)算更快。Mathematica中,任何小于16位的小數(shù)都被看作是機(jī)器浮點(diǎn)數(shù),所以如果更想要速度而可以舍棄一些精確性的時(shí)候,記得用小數(shù)(比如,三分之一輸入為1./3.)。以下是一個(gè)例子,可以看到使用浮點(diǎn)數(shù)是精確數(shù)運(yùn)行速度的50.6倍。在這個(gè)例子中,兩個(gè)數(shù)字的使用得到的是同一個(gè)結(jié)果。
在符號(hào)運(yùn)算中也是這樣。如果你不是很在意符號(hào)式的結(jié)果,并且計(jì)算的穩(wěn)定性也不是問(wèn)題的話,那么盡快使用數(shù)值作為替代。比如,求解下面的二項(xiàng)式符號(hào)計(jì)算時(shí),在使用數(shù)值作為替代之前,這個(gè)代碼可能會(huì)讓Mathematica生成長(zhǎng)達(dá)五頁(yè)的中間符號(hào)表達(dá)式。
展開(kāi) 某些特定庫(kù)(BLAS/LAPACK、GMP 等)的鏈接最終成為 Mathematica 中的核心基礎(chǔ)設(shè)施組件。
R 代碼不會(huì)處理符號(hào)參數(shù)或高精度數(shù)字,因此,為了穩(wěn)健性,您需要比使用Mathematica代碼更仔細(xì)地進(jìn)行類(lèi)型檢查。
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例

Mathematica代碼的相關(guān)專題、標(biāo)簽、搜索
Mathematica代碼的最新內(nèi)容
人體轉(zhuǎn)動(dòng)慣量
在我第一次拋物線飛行之前,我寫(xiě)了一個(gè) Mathematica 代碼來(lái)計(jì)算人體在不同位置的主要轉(zhuǎn)動(dòng)慣量。概述其中一些研究的文章稱為“失重中人體的編舞技術(shù)”。下圖是使用該筆記本生成的。
知道主軸很有用,因?yàn)樽畲蠛妥钚≥S向我們展示了我們可以穩(wěn)定旋轉(zhuǎn)的軸。如果系統(tǒng)沒(méi)有簡(jiǎn)并性,這些是身體可以穩(wěn)定旋轉(zhuǎn)的唯一軸。
將您完成的 Mathematica 筆記本(代碼、結(jié)果和討論)分享到*在此處插入教師電子郵件*”
當(dāng)學(xué)生與他們共享筆記本時(shí),教授的 Wolfram Cloud 將發(fā)送通知。教職員工可以將筆記本分類(lèi)到適當(dāng)?shù)奈募A中,并在準(zhǔn)備為作業(yè)評(píng)分時(shí)打開(kāi)它。
R 代碼不會(huì)處理符號(hào)參數(shù)或高精度數(shù)字,因此,為了穩(wěn)健性,您需要比使用Mathematica代碼更仔細(xì)地進(jìn)行類(lèi)型檢查。
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例
水下爆炸 | 水下爆炸載荷對(duì)目標(biāo)作用的數(shù)值模擬
爆炸與沖擊 | 分享一些我最近做的案例
Python | 破片戰(zhàn)斗部對(duì)某導(dǎo)彈陣地的毀傷效果
LS-DYNA | 使用Python批量輔助LS-DYNA的結(jié)構(gòu)設(shè)計(jì)
Mathematica五行代碼實(shí)現(xiàn)豆瓣評(píng)分的爬蟲(chóng)
PyQt | 戰(zhàn)斗部毀傷效能評(píng)估軟件的設(shè)計(jì)與開(kāi)發(fā)
爬蟲(chóng)+游戲 | Mathematica有趣實(shí)例