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

正文內(nèi)容

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

2024-10-30 20:04本頁面
  

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