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

正文內(nèi)容

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

2025-09-27 20:04 上一頁面

下一頁面
 

【正文】 悉并掌握從事科學(xué)研究的一般方法和基本技能。但是自 之后, matlab 有了自己的虛擬機(jī),不再支持將其代碼轉(zhuǎn)為 C 或 C++了,而且用 matlab 寫出的程序不能做成產(chǎn)品,不如其他語言通用。GSL 一個(gè)非常全面的數(shù)值計(jì)算庫,使用 C 語言編寫 , 提供了很多 API 接口供用戶或者其他語言調(diào)用。 本科畢業(yè)設(shè)計(jì)論文 2 開發(fā)內(nèi)容 此次畢業(yè)設(shè)計(jì)的主要內(nèi)容如下 1. 完成 GSL 代碼由 C 到 C++轉(zhuǎn)化。并且向量中的元素在內(nèi)存中所占的空間的大小是相同的。 3. 支持基本的向量數(shù)學(xué)運(yùn)算,如 +*/,范數(shù),支持叉乘等等。 7. 支持 C++輸入和輸出,即需重載 和 操作符。 所提供的方法有 矩陣 元素的存取, 矩陣 和文件之間的讀寫,賦值,復(fù)制,元素之間的交換,行列的交換,基本算術(shù)運(yùn)算(加、減,乘、除),矩陣乘法,求逆,求行列式, LU分解, QR分解,求跡,最大值和最小值等等。 4. 需提供最大值,最小值,平均值,求和等函數(shù)。 8.支持自定義類型。 4. 可以返回區(qū)間 [0,n1]中的整數(shù), n 由用戶提供。 8. 用戶不負(fù)責(zé)類對象內(nèi)部的 任何內(nèi)存釋放和刪除工作。 3.不同插值方法的插值接口統(tǒng)一。 7.默認(rèn)插值表的每一維都是有序表 (遞增或遞減 )。 include 目錄中為工程中使用到的頭文件,可以和 build 目錄一起交付給用戶使用。使用此庫的頭文件時(shí),只需同時(shí)定義 WIN32, NSL_DLL 即正確鏈接。 向量 GSL 提供的向量類型使用起來非常麻煩,由于是對 C 語言中的數(shù)組進(jìn)行包裝,所以用戶時(shí)刻都要注意內(nèi)存的變化,花費(fèi)大量精力減少內(nèi)存泄露 ,并且每種數(shù)據(jù)類型都有不同的函數(shù)版本,且不支持用戶自定義類型,所以我決定使用 GSL的算法,重寫構(gòu)架向量類,并且給出 C++的接口,支持多種類型,包括未知的用戶自定義類型,盡量減少用戶對程序本身的維護(hù)工作量,使用戶能專注于算法本身。所以這里我使用 valarray模板類作為我的內(nèi)置向量類型,對其進(jìn)行包裝,增加方法,給出 C++接口??墒切聠栴}又出現(xiàn)了,由于 private 繼承方式會把所有的函數(shù)都繼承為私有函數(shù),包括構(gòu)造函數(shù),派生類對象無法轉(zhuǎn)換為基類對象,當(dāng)然 C++的多態(tài)特性也就無法發(fā)揮了。 //實(shí)例化一個(gè)可變向量對象,類型為 double,有 10個(gè)元素。 //構(gòu)造一個(gè)視圖對象,其指向的對象可變,指向 vec 的所有元素。由于視圖類內(nèi)部是不存儲元素的,只是當(dāng)做一個(gè)窗口,所以視圖類內(nèi)部肯定會有一個(gè)指向向量結(jié)構(gòu)體的指針,那么這個(gè)指針該是什么屬性? const or nonconst ,鬼知道。從上面的構(gòu)架圖中可知, GneVector 類為最底層 基類 , 應(yīng)該具有最通用的方法和數(shù)據(jù)。 virtual const valarrayTamp。} 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)。 public: //重寫基類的虛函數(shù) virtual const sliceamp。 //以下兩個(gè)構(gòu)造函數(shù)是為了 //Vector ConstVectorView //VectorView ConstVectorView //ConstVectorView ConstVectorView ConstVectorView(const GneVectorT amp。 s)。 // end of class ConstVectorViewT AlmostVector 接口 AlmostVector 類的存在時(shí)為了對 Vector 類和 VectorView 類解耦,也可以大幅度提高代碼的復(fù)用率。 val() = 0。 Vector 接口 由于前面的設(shè)計(jì)比較合理,現(xiàn)在對 Vector 類編碼時(shí)非常簡單,很多方法已經(jīng)通過兩個(gè)基類實(shí)現(xiàn)過了。 public: //重寫基類的虛函數(shù) virtual const sliceamp。 //由 STL valarray 構(gòu)造 Vector(const valarrayTamp。 s)。 Vector(const GneVectorT amp。 VectorView 接口 template typename T class VectorView : public AlmostVectorT //可變視圖 { private: valarrayT* pVectorData_。 virtual const valarrayTamp。 本科畢業(yè)設(shè)計(jì)論文 12 .................... virtual valarrayTamp。 }。 所以輸出可以放到 GneVector 底層基類中,作為所有派生類的共有函數(shù)。 operator ( std::ostream amp。 operator ( std::istream amp。 初始化一個(gè)向量對象有很多種方法,最直接的方法是給每一個(gè)元素賦值,如下: for(size_t i=0。 Vectordouble v(var, 5)。 // Usually OK 這種方法通常是不會錯(cuò)的,但是也有可能有些編譯器會報(bào)錯(cuò),我也不知道這算不算標(biāo)準(zhǔn) C++語法,因?yàn)闆]有一本 C++書 (我讀過的 )講到過這種初始化方式。 //或者 v 1 。當(dāng)然 v也可以在其他任何時(shí)候重新使用此方法賦值。 矩陣結(jié)構(gòu)體 根據(jù)上一節(jié)中向量類的分析可知, valarray 是個(gè)非常方便好用的標(biāo)準(zhǔn)模板,所以這里也使用它作為我們的向量結(jié)構(gòu)體。 size_t startCol_。 mslice 類保存 4 條信息: 1. startRow_,起始行。 根據(jù)這四條信息就 可以確定當(dāng)前的 valarray 變量是如何表示一個(gè)矩陣的。 滿足理論上的隨機(jī)是很難的,但我們也可以接受那些具有長周期,低的序列相關(guān)性的算法。每一個(gè)隨機(jī)數(shù)的實(shí)例都有自己的狀態(tài)量,即可以同時(shí)使用多個(gè)相同的隨機(jī)數(shù)算法實(shí)例,它們之間是相互獨(dú)立的,互不影響的,所以可以在多線程環(huán)境下運(yùn)行。 隨機(jī)數(shù)類的構(gòu)架 類名為 CRandom,首先分析 GSL 提供的隨機(jī)數(shù)算法里的共有屬性,所有的算法都有種子的設(shè)置,最大值, 最小值,當(dāng)前的狀態(tài)量,算法名稱,當(dāng)然最重要的是有返回介于最大值和最小值之間隨機(jī)數(shù)的方法。 /*設(shè)置種子,任何時(shí)候都可以重新設(shè)置種子 */ void SetSeed(unsigned long int seed)。 /*返回當(dāng)前算法所能產(chǎn)生的最大隨機(jī)數(shù) */ unsigned long int Max()。 其中枚舉結(jié)構(gòu)體如下 enum RNG_ORDER_T { RNG_BOROSH13, //borosh13 本科畢業(yè)設(shè)計(jì)論文 17 RNG_COVEYOU, // coveyou RNG_CMRG, // cmrg /*由于算法很多,在此省略 */ }。 靜態(tài)變量的初始化需要 類的靜態(tài)函數(shù) static TypeArray TypeInit() { CRandom::TypeArray res。 /*省略部分代碼 */ return res。 } 本科畢業(yè)設(shè)計(jì)論文 18 /*省略部分代碼 */ rng_type = type_stack[type]。 for (i = 0。 //[min,max]區(qū)間的整數(shù) printf (%.5f %d , u, int_rand)。 本科畢業(yè)設(shè)計(jì)論文 19 生成整數(shù)速度 k ints/sec 生成浮點(diǎn)數(shù)速kdoubles/sec 算法名稱 1754 870 taus 1613 855 gfsr4 1370 769 mt19937 565 571 ranlxs0 400 405 ranlxs1 490 389 mrg 407 297 ranlux 243 254 ranlxd1 251 253 ranlxs2 238 215 cmrg 247 198 ranlux389 141 140 ranlxd2 1852 935 ran3 813 575 ran0 787 476 ran1 379 292 ran2 表 31 隨機(jī)數(shù)性能 以下對兩種算法進(jìn)行 10000 次 調(diào)用,獲取 [0,1]區(qū)間中浮點(diǎn)數(shù),并進(jìn)行統(tǒng)計(jì),通過圖形可清楚的看到分布的均勻性和隨機(jī)性。還有些函數(shù),雖然有明確的 解析表達(dá)式,但卻過于復(fù)雜而不便于進(jìn)行理論分析和數(shù)值計(jì)算,同樣希望構(gòu)造一個(gè)既能反映函數(shù)的特性又便于計(jì)算的簡單函數(shù),近似代替原來的很函數(shù)。下面對插值類進(jìn)行構(gòu)架,根據(jù)需求分析 ,可設(shè)計(jì)如下幾個(gè)類 ,CBaseInterp(基類 ), LinearInterp(線性插值 ), CPolyCubicSpline (三次樣條插值 )和 CPolyLagrangeInterp(拉格朗日插值 ,支持 n 階插值 )和 Interpolation(插值接口 )。仔細(xì)分析會發(fā)現(xiàn)所有的插值算法去除插值本身外,剩下的無外乎就是對輸入的待插點(diǎn)在插值表中的位置的確定算法了。 搜索插值表的目的是尋找到一個(gè)下標(biāo) i ,使得 1??? ii xxx 。 圖 38 二分法搜索 如上圖所示,確定 50 在有序序列 ]63,0[ 中的位置只需要 7 步。 所以這里我使用二分法作為搜索算法的基礎(chǔ),但是僅僅使用二分法還不夠??紤]在二分法的基礎(chǔ)上加入相關(guān)性搜索算法。 相關(guān)性搜索算法是根據(jù)一個(gè)已知的位置,以 n2 方的大小增加步長來覆蓋要確定的點(diǎn),當(dāng)覆蓋完成后,再使用二分法來其在表中的具體位置。 至此,插值基類的接口和實(shí)現(xiàn)即可編碼實(shí)現(xiàn),接口大致如下: class CBaseInterp { public: typedef struct { bool cor。 private: vector vectordouble amp。/存放因變量 ............... public: CBaseInterp(interp_tableamp。 i)。 //用戶接口 double Interp(const double* x, const size_tamp。 jlo) = 0。下圖中是原函數(shù)和插值函數(shù)的圖像對比。這里使用遞歸算法實(shí)現(xiàn)。 virtual ~CPolyLagrangeInterp()。 double Mul(.........)。一維插值公式如下: 39。1 ?? ???? jjjj DyCyByAyy (34) 其中 11jjj xx xxA ????? (35) jjjxx xxAB ??????11 (36) 213 ))((61 jj xxAAC ??? ? (37) 213 ))((61 jj xxBBD ??? ? (38) CPolyCubicSpline 重載插值基類中的 RawInterp 函數(shù),并在其中實(shí)現(xiàn)上述算法。 上面提到的 interp_table 是我設(shè)計(jì)一個(gè)插值數(shù)據(jù)包的結(jié)構(gòu)體,其中包含有插值類需要使用的信息,具體如下: struct interp_table { ....................... //插值維數(shù) size_t dimension。 dpVar。 /*如果 method 為 LAGRANGE 插值,則需對此項(xiàng)賦值,多項(xiàng)式階數(shù), 否則不用賦值 */ size_t order。 RTX 具有如下特點(diǎn), 1. RTX 向開發(fā)者提供了獨(dú)立于操作系統(tǒng)和應(yīng)用程序的對與系統(tǒng)資源的直接訪問控制和所有權(quán),為所需的功能和任務(wù)合理的安排進(jìn)程和線程的執(zhí)行順序。 4. RTX 提供了最高的可靠性。首先使用隨機(jī)數(shù)生成器生成一個(gè) 1000 維的一個(gè)方陣。 ()。 經(jīng)測試,程序執(zhí)行時(shí)間大約 20 秒。具代代碼不再列出,下面給出測試結(jié)果 ,單位 次 /s。 本科畢業(yè)設(shè)計(jì)論文 31 第 5 章 結(jié)論 通過上述實(shí)時(shí)環(huán)境的測試,本文中各部分的算法設(shè)計(jì)合理 , 效率滿足需求 , 能夠應(yīng)用于飛行器實(shí)時(shí)仿真中 , 作為庫文件使用。插值算法中使用線性插值處理了外插情況。 本科畢業(yè)設(shè)計(jì)論文 32 致 謝 在本文完成之際,我要對所有在論文完成過程中給予我無私幫助的人以最誠摯的感謝
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1