freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

飛行器實(shí)時(shí)仿真算法研究本科畢業(yè)論文-在線瀏覽

2025-11-06 20:04本頁(yè)面
  

【正文】 而且用 matlab 寫(xiě)出的程序不能做成產(chǎn)品,不如其他語(yǔ)言通用。 編譯性語(yǔ)言中,常用的科學(xué)計(jì)算仿真庫(kù)也有很多, GSL 最為通用,與 blitz++和 MTL 并稱(chēng)為當(dāng)前三 大支持科學(xué)計(jì)算的數(shù)值庫(kù)。GSL 一個(gè)非常全面的數(shù)值計(jì)算庫(kù),使用 C 語(yǔ)言編寫(xiě) , 提供了很多 API 接口供用戶(hù)或者其他語(yǔ)言調(diào)用。 GSL 的優(yōu)點(diǎn)是運(yùn)行速度快,尤其矩陣和向量是使用第三方庫(kù) CBLAS,所以矩陣運(yùn)算的速度和 matlab 不相上下 (matlab 矩陣底層也是用 CBLAS 庫(kù)實(shí)現(xiàn)的 )。 本科畢業(yè)設(shè)計(jì)論文 2 開(kāi)發(fā)內(nèi)容 此次畢業(yè)設(shè)計(jì)的主要內(nèi)容如下 1. 完成 GSL 代碼由 C 到 C++轉(zhuǎn)化。 4. 完成基于 RTX 實(shí)時(shí)仿真應(yīng)用。并且向量中的元素在內(nèi)存中所占的空間的大小是相同的。 1. 用戶(hù) 不負(fù)責(zé)向量類(lèi)對(duì)象內(nèi)部的任何內(nèi)存申請(qǐng)和刪除工作。 3. 支持基本的向量數(shù)學(xué)運(yùn)算,如 +*/,范數(shù),支持叉乘等等。 5. 支持多線程。 7. 支持 C++輸入和輸出,即需重載 和 操作符。 矩陣 設(shè)計(jì)一個(gè)類(lèi),能對(duì)數(shù)學(xué)上的矩陣進(jìn)行描述和運(yùn)算。 所提供的方法有 矩陣 元素的存取, 矩陣 和文件之間的讀寫(xiě),賦值,復(fù)制,元素之間的交換,行列的交換,基本算術(shù)運(yùn)算(加、減,乘、除),矩陣乘法,求逆,求行列式, LU分解, QR分解,求跡,最大值和最小值等等。 2. 支持通過(guò)操作符 []和 ()對(duì)元素進(jìn)行隨機(jī)存取。 4. 需提供最大值,最小值,平均值,求和等函數(shù)。 6. 提供矩陣視圖功能 (可對(duì)矩陣的局部作為一個(gè)獨(dú)立矩陣進(jìn)行操作 )。 8.支持自定義類(lèi)型。 2. 可以返回每種算法支持的區(qū)間中的隨機(jī)值。 4. 可以返回區(qū)間 [0,n1]中的整數(shù), n 由用戶(hù)提供。 6. 可以保存每種隨機(jī)數(shù)算法的當(dāng)前狀態(tài),并且也可以導(dǎo)入已存的狀態(tài)。 8. 用戶(hù)不負(fù)責(zé)類(lèi)對(duì)象內(nèi)部的 任何內(nèi)存釋放和刪除工作。具體需求: 1. 使用純 C++語(yǔ)法和函數(shù),必須具有可移植性。 3.不同插值方法的插值接口統(tǒng)一。 5.用戶(hù)不負(fù)責(zé)插值類(lèi)內(nèi)部的任何內(nèi)存分配和釋放工作。 7.默認(rèn)插值表的每一維都是有序表 (遞增或遞減 )。 本科畢業(yè)設(shè)計(jì)論文 5 第 3 章 算法設(shè)計(jì)與編程實(shí)現(xiàn) 工程框架的搭建 工程名字為 NSL(nwpu scientific library) 工程目錄結(jié)構(gòu)圖如下 其中 build 目錄中為工程生成的可執(zhí)行文件,包括 dll, lib,或者 exe。 include 目錄中為工程中使用到的頭文件,可以和 build 目錄一起交付給用戶(hù)使用。 project 目錄中為工程文件。使用此庫(kù)的頭文件時(shí),只需同時(shí)定義 WIN32, NSL_DLL 即正確鏈接。 最 后 一 行 宏 定 義 是 決 定 此 庫(kù) 是 否 支 持 多 線 程 , 如 果 定 義 了NSL_SUPPORT_MULTITHREAD,程序中很多計(jì)算過(guò)程將使用局部變量,以便在多線程環(huán)境下不會(huì)出現(xiàn)多個(gè)線程對(duì)同一個(gè)變量的同時(shí) 訪問(wèn)。 向量 GSL 提供的向量類(lèi)型使用起來(lái)非常麻煩,由于是對(duì) C 語(yǔ)言中的數(shù)組進(jìn)行包裝,所以用戶(hù)時(shí)刻都要注意內(nèi)存的變化,花費(fèi)大量精力減少內(nèi)存泄露 ,并且每種數(shù)據(jù)類(lèi)型都有不同的函數(shù)版本,且不支持用戶(hù)自定義類(lèi)型,所以我決定使用 GSL的算法,重寫(xiě)構(gòu)架向量類(lèi),并且給出 C++的接口,支持多種類(lèi)型,包括未知的用戶(hù)自定義類(lèi)型,盡量減少用戶(hù)對(duì)程序本身的維護(hù)工作量,使用戶(hù)能專(zhuān)注于算法本身。由于要支持多種類(lèi)型,所以最好的方法是使用模板實(shí)現(xiàn),現(xiàn)成的有C++標(biāo)準(zhǔn)庫(kù)中的 vector 模板類(lèi)和 valarray 模板類(lèi), vector 和 valarray 各有特點(diǎn), 本科畢業(yè)設(shè)計(jì)論文 7 vector 模板類(lèi)支持泛型運(yùn)算,內(nèi)存可動(dòng)態(tài)改變,支持元素的插入和刪除,但是對(duì)元素的數(shù)學(xué)運(yùn)算支持不好,沒(méi)有重載一些基本的運(yùn)算符,更沒(méi)有重載 sin,cos 等數(shù)學(xué)函數(shù)。所以這里我使用 valarray模板類(lèi)作為我的內(nèi)置向量類(lèi)型,對(duì)其進(jìn)行包裝,增加方法,給出 C++接口。 首先,視圖類(lèi)把向量類(lèi) 的 resize 函數(shù)也繼承了,但是對(duì)一個(gè)視圖重新分配內(nèi)存是沒(méi)有意義的,也是不允許的??墒切聠?wèn)題又出現(xiàn)了,由于 private 繼承方式會(huì)把所有的函數(shù)都繼承為私有函數(shù),包括構(gòu)造函數(shù),派生類(lèi)對(duì)象無(wú)法轉(zhuǎn)換為基類(lèi)對(duì)象,當(dāng)然 C++的多態(tài)特性也就無(wú)法發(fā)揮了。可變視圖是對(duì)其所指向的向量擁有讀寫(xiě)權(quán)限,而常視圖則只有讀權(quán) 限。 //實(shí)例化一個(gè)可變向量對(duì)象,類(lèi)型為 double,有 10個(gè)元素。 //實(shí)例化一個(gè)常向量對(duì)象,類(lèi)型為 double,有 10 個(gè)元素。 //構(gòu)造一個(gè)視圖對(duì)象,其指向的對(duì)象可變,指向 vec 的所有元素。 //構(gòu)造一個(gè)視圖對(duì)象,其指向的對(duì)象不可變,指向 vec 的所有元素 。由于視圖類(lèi)內(nèi)部是不存儲(chǔ)元素的,只是當(dāng)做一個(gè)窗口,所以視圖類(lèi)內(nèi)部肯定會(huì)有一個(gè)指向向量結(jié)構(gòu)體的指針,那么這個(gè)指針該是什么屬性? const or nonconst ,鬼知道。 所以?xún)H有兩個(gè)類(lèi)是不夠的 ,事實(shí)上需要 5 個(gè)類(lèi)來(lái)實(shí)現(xiàn)需求分析中的功能。從上面的構(gòu)架圖中可知, GneVector 類(lèi)為最底層 基類(lèi) , 應(yīng)該具有最通用的方法和數(shù)據(jù)。 GneVector 接口 根據(jù)以上的分析就可以寫(xiě)出 GneVector 類(lèi)的接口 //基類(lèi) template typename T class GneVector { public: //constructor GneVector(); virtual ~GneVector(); 本科畢業(yè)設(shè)計(jì)論文 9 //三個(gè)類(lèi)都要重寫(xiě)的方法 virtual const sliceamp。 virtual const valarrayTamp。 //三個(gè)類(lèi)公有的方法 size_t size() const { return getSlice().size() 。} size_t stride() const { return getSlice().stride() 。}。 以上代碼省略了很多函數(shù)和其具體實(shí)現(xiàn),注意到所有的成員函數(shù)都是 const屬性函數(shù),這是因?yàn)檫@些方法都是對(duì) Vector、 VectorView、和 ConstVectorView類(lèi)進(jìn)行泛化得出的共有方法,至于其他的方法應(yīng)該根據(jù)特點(diǎn)歸入某個(gè)類(lèi),然后具體實(shí)現(xiàn)。 template typename T class ConstVectorView : public GneVectorT //常視圖 { private: const valarrayT* pVectorData_。 public: //重寫(xiě)基類(lèi)的虛函數(shù) virtual const sliceamp。 virtual const valarrayTamp。 //以下兩個(gè)構(gòu)造函數(shù)是為了 //Vector ConstVectorView //VectorView ConstVectorView //ConstVectorView ConstVectorView ConstVectorView(const GneVectorT amp。 ConstVectorView(const GneVectorT amp。 s)。} T operator ()(size_t i) const { return cref(i) 。 // end of class ConstVectorViewT AlmostVector 接口 AlmostVector 類(lèi)的存在時(shí)為了對(duì) Vector 類(lèi)和 VectorView 類(lèi)解耦,也可以大幅度提高代碼的復(fù)用率。 virtual ~AlmostVector()。 val() = 0。 s) const。 Vector 接口 由于前面的設(shè)計(jì)比較合理,現(xiàn)在對(duì) Vector 類(lèi)編碼時(shí)非常簡(jiǎn)單,很多方法已經(jīng)通過(guò)兩個(gè)基類(lèi)實(shí)現(xiàn)過(guò)了。接口大致如下: //向量類(lèi) template typename T class Vector : public AlmostVectorT { private: //保存向量元素 valarrayT vectorData_。 public: //重寫(xiě)基類(lèi)的虛函數(shù) virtual const sliceamp。 virtual const valarrayTamp。 //由 STL valarray 構(gòu)造 Vector(const valarrayTamp。 Vector(const valarrayTamp。 s)。 //以下兩個(gè)構(gòu)造函數(shù)是為了 //Vector Vector //VectorView Vector //ConstVectorView Vector Vector(const GneVectorT amp。 Vector(const GneVectorT amp。 s)。 VectorView 接口 template typename T class VectorView : public AlmostVectorT //可變視圖 { private: valarrayT* pVectorData_。 public: //重寫(xiě)基類(lèi)的虛函數(shù) virtual const sliceamp。 virtual const valarrayTamp。 //下面兩個(gè)構(gòu)造函數(shù)是為了 //Vector MatrixView //VectorView VectorView VectorView(AlmostVectorT amp。 本科畢業(yè)設(shè)計(jì)論文 12 .................... virtual valarrayTamp。 …… . }。 }。 上面對(duì)接口的陳述中沒(méi)有提到 Vector 類(lèi)型的輸入和輸出,這里作已簡(jiǎn)要說(shuō)明。 所以輸出可以放到 GneVector 底層基類(lèi)中,作為所有派生類(lèi)的共有函數(shù)。決定某個(gè)函數(shù)放在基類(lèi)還是派生類(lèi)需要很周全的考慮,基類(lèi)和派生類(lèi)可以比作一個(gè) 杠桿,不能一頭很重,一頭很輕,代碼失衡會(huì)導(dǎo)致后期的編碼和維護(hù)非常困難。 operator ( std::ostream amp。avec)。 operator ( std::istream amp。avec)。 初始化一個(gè)向量對(duì)象有很多種方法,最直接的方法是給每一個(gè)元素賦值,如下: for(size_t i=0。 ++i) { 本科畢業(yè)設(shè)計(jì)論文 13 v[i] = /* whatever */ } 但是這樣很不方便,尤其是當(dāng)我們想給 v 賦一系列不同的值時(shí),在 for 循環(huán)中是比較麻煩的。 Vectordouble v(var, 5)。依我來(lái)看,最理想的 方法是把初始化列表放到構(gòu)造函數(shù)中,如下: Vectordouble v({ , , , 1, }, 5)。 // Usually OK 這種方法通常是不會(huì)錯(cuò)的,但是也有可能有些編譯器會(huì)報(bào)錯(cuò),我也不知道這算不算標(biāo)準(zhǔn) C++語(yǔ)法,因?yàn)闆](méi)有一本 C++書(shū) (我讀過(guò)的 )講到過(guò)這種初始化方式。從而可以使用如下方式進(jìn)行初始化: Vectordouble v(5)。 //或者 v 1 。上面的方式的優(yōu)點(diǎn)是,初始化列表里的數(shù)據(jù)不限制為常量。當(dāng)然 v也可以在其他任何時(shí)候重新使用此方法賦值。 最后, GneVector類(lèi)和 AlomostVector類(lèi)都含有純虛函數(shù),所以無(wú)法實(shí)例化,這正是我想要的,給用戶(hù)使用的類(lèi)是 Vector、 VectorView和 ConstVectorView三個(gè)類(lèi)。 矩陣結(jié)構(gòu)體 根據(jù)上一節(jié)中向量類(lèi)的分析可知, valarray 是個(gè)非常方便好用的標(biāo)準(zhǔn)模板,所以這里也使用它作為我們的向量結(jié)構(gòu)體。 這里我寫(xiě)了個(gè)很簡(jiǎn)單的類(lèi) mslice,類(lèi)似于上節(jié)中的 slice,但是適用于二維數(shù)據(jù)。 size_t startCol_。 size_t cols_。 mslice 類(lèi)保存 4 條信息: 1. startRow_,起始行。 3. rows_,行數(shù)。 根據(jù)這四條信息就 可以確定當(dāng)前的 valarray 變量是如何表示一個(gè)矩陣的。構(gòu)架如下: 本科畢業(yè)設(shè)計(jì)論文 15 圖 32 繼承關(guān)系圖 接口 還有 5 個(gè)類(lèi)接口和上節(jié)中的 Vector 類(lèi)相似,由于基類(lèi)設(shè)計(jì)良好,這些派生類(lèi)的實(shí)現(xiàn)非常簡(jiǎn)單,在此不一一列出,詳見(jiàn)原代碼。 滿(mǎn)足理論上的隨機(jī)是很難的,但我們也可以接受那些具有長(zhǎng)周期,低的序列相關(guān)性的算法。 GSL 提供了大量的隨機(jī)數(shù)生成器,但是由于給出是 C 的接口,使用起來(lái)非常麻煩,用戶(hù)要負(fù)責(zé)大量的內(nèi)存開(kāi)辟和銷(xiāo)毀工作。每一個(gè)隨機(jī)數(shù)的實(shí)例都有自己的狀態(tài)量,即可以同時(shí)使用多個(gè)相同的隨機(jī)數(shù)算法實(shí)例,它們之間是相互獨(dú)立的,互不影響的,所以可以在多線程環(huán)境下運(yùn)行。但為了達(dá)到這種效果,生成器必須對(duì)一些狀態(tài)量進(jìn)行跟蹤,某些情況下,
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1