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

正文內(nèi)容

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

2024-09-16 20:04本頁面
  

【正文】 這些狀態(tài)是個整數(shù) (比如上次生 本科畢業(yè)設(shè)計(jì)論文 16 的隨機(jī)數(shù) ),但在更多的情況中,這些狀態(tài)量會很復(fù)雜,有可能是一個數(shù)列,而且每種隨機(jī)數(shù)生成算法使用的狀態(tài)量的大小和個數(shù)都不一樣。 隨機(jī)數(shù)類的構(gòu)架 類名為 CRandom,首先分析 GSL 提供的隨機(jī)數(shù)算法里的共有屬性,所有的算法都有種子的設(shè)置,最大值, 最小值,當(dāng)前的狀態(tài)量,算法名稱,當(dāng)然最重要的是有返回介于最大值和最小值之間隨機(jī)數(shù)的方法。所以類 CRandom 的接口大致如下 class CRandom { public: /*構(gòu)造函數(shù)提供默認(rèn)隨機(jī)數(shù)算法 ,也可以動態(tài)設(shè)置 */ CRandom(RNG_ORDER type = RNG_TAUS)。 /*設(shè)置種子,任何時候都可以重新設(shè)置種子 */ void SetSeed(unsigned long int seed)。 /*返回當(dāng)前使用的算法名稱 */ const char* Name()。 /*返回當(dāng)前算法所能產(chǎn)生的最大隨機(jī)數(shù) */ unsigned long int Max()。 /*改變所使用的算法 */ bool ChangeType(RNG_ORDER type)。 其中枚舉結(jié)構(gòu)體如下 enum RNG_ORDER_T { RNG_BOROSH13, //borosh13 本科畢業(yè)設(shè)計(jì)論文 17 RNG_COVEYOU, // coveyou RNG_CMRG, // cmrg /*由于算法很多,在此省略 */ }。 由于在構(gòu)造函數(shù)中假 設(shè)每種算法都對應(yīng)一個枚舉量,所以自己構(gòu)建一個堆棧,把每種算法的指針按照枚舉結(jié)構(gòu)體的順序壓棧,在此使用 C++標(biāo)準(zhǔn)庫中的 vector模板構(gòu)造堆棧, /* gsl_rng_type 為算法結(jié)構(gòu)體,每種算法都維護(hù)這樣一個結(jié)構(gòu)體 */ typedef vectorconst gsl_rng_type* TypeArray。 靜態(tài)變量的初始化需要 類的靜態(tài)函數(shù) static TypeArray TypeInit() { CRandom::TypeArray res。 (gsl_rng_coveyou)。 /*省略部分代碼 */ return res。 成員變量還需要一個能表示當(dāng)前算法的指針 const gsl_rng_type* rng_type。 } 本科畢業(yè)設(shè)計(jì)論文 18 /*省略部分代碼 */ rng_type = type_stack[type]。 int main(int argc, char* argv[]) { CRandom rng(RNG_BOROSH13)。 for (i = 0。 i++) { double u = ()。 //[min,max]區(qū)間的整數(shù) printf (%.5f %d , u, int_rand)。 } 性能分析 以下列舉了一些隨機(jī)數(shù)生成算法的相 對性能,速度最快的是 taus,, gfsr4 和mt19937。 本科畢業(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ī)性。 圖 33 使用 taus 算法,執(zhí)行一萬次 圖 34 使用 ranlux 算法,執(zhí)行一萬次 本科畢業(yè)設(shè)計(jì)論文 21 插值 在飛行器彈道計(jì)算中,相對一部分?jǐn)?shù)據(jù) 是通過測量或?qū)嶒?yàn)彈道的。還有些函數(shù),雖然有明確的 解析表達(dá)式,但卻過于復(fù)雜而不便于進(jìn)行理論分析和數(shù)值計(jì)算,同樣希望構(gòu)造一個既能反映函數(shù)的特性又便于計(jì)算的簡單函數(shù),近似代替原來的很函數(shù)。 插值基類的構(gòu)架 插值基類是給派生類打基礎(chǔ),基類的方法應(yīng)該具有通用性,這也是泛化的原則之一。下面對插值類進(jìn)行構(gòu)架,根據(jù)需求分析 ,可設(shè)計(jì)如下幾個類 ,CBaseInterp(基類 ), LinearInterp(線性插值 ), CPolyCubicSpline (三次樣條插值 )和 CPolyLagrangeInterp(拉格朗日插值 ,支持 n 階插值 )和 Interpolation(插值接口 )。 圖 37 繼承關(guān)系 我們的基類要能夠做和插值有關(guān)的所有事情,但是除了插值算法的實(shí)現(xiàn)。仔細(xì)分析會發(fā)現(xiàn)所有的插值算法去除插值本身外,剩下的無外乎就是對輸入的待插點(diǎn)在插值表中的位置的確定算法了。為了快速實(shí)現(xiàn)此 功能,可以先僅考慮一維情況。 搜索插值表的目的是尋找到一個下標(biāo) i ,使得 1??? ii xxx 。用算法的時間復(fù)雜度表示的話,此算法耗時 O(n)。 圖 38 二分法搜索 如上圖所示,確定 50 在有序序列 ]63,0[ 中的位置只需要 7 步。當(dāng)數(shù)據(jù)量很大時,效率很高,搜索時間短。 所以這里我使用二分法作為搜索算法的基礎(chǔ),但是僅僅使用二分法還不夠。用上圖來解釋,假如某一次插 值調(diào)用使得我們要確定 50 的位置,那么下一次插值很有可能是確定 5 5 53 或者 4 48 的位置,總之很有可能在50 附近,大跨度的跳躍很少發(fā)生??紤]在二分法的基礎(chǔ)上加入相關(guān)性搜索算法。 相關(guān)性搜索需要一個緩存,存儲上次搜索后得到的下標(biāo)。 相關(guān)性搜索算法是根據(jù)一個已知的位置,以 n2 方的大小增加步長來覆蓋要確定的點(diǎn),當(dāng)覆蓋完成后,再使用二分法來其在表中的具體位置。 本科畢業(yè)設(shè)計(jì)論文 23 圖 39 二分法和相關(guān)性搜索結(jié)合 上圖中所示是一個比較壞的情況,從上一個點(diǎn) 6 開始搜索 31 的位置,這種情況可以通過設(shè)置區(qū)間分段大小來改善。 至此,插值基類的接口和實(shí)現(xiàn)即可編碼實(shí)現(xiàn),接口大致如下: class CBaseInterp { public: typedef struct { bool cor。 //上次尋找的下標(biāo) size_t dj。 private: vector vectordouble amp。//存放自變量 vector double amp。/存放因變量 ............... public: CBaseInterp(interp_tableamp。 //在第 i 維自變量中尋找 x 所對應(yīng)的下標(biāo),二分法 size_t Locate(const doubleamp。 i)。 x, const size_tamp。 //用戶接口 double Interp(const double* x, const size_tamp。 本科畢業(yè)設(shè)計(jì)論文 24 //派生類必須重寫此函數(shù),返回插值結(jié)果 double virtual RawInterp(const vectordoubleamp。 jlo) = 0。 線性插值 最簡單的插值算法是一維線性插值。下圖中是原函數(shù)和插值函數(shù)的圖像對比。線性插值和 1 階拉格朗日插值等價,但是由于線性插值是最常用的插值算法,為了提高速度,這里單獨(dú)作為一個類來設(shè)計(jì)。這里使用遞歸算法實(shí)現(xiàn)。 圖 310 拉格朗日遞歸算法 本科畢業(yè)設(shè)計(jì)論文 26 拉格朗日插值類的接口非常簡單,大致如下: class CPolyLagrangeInterp : public CBaseInterp { public: CPolyLagrangeInterp(const interp_tableamp。 virtual ~CPolyLagrangeInterp()。 idpVar, const vectorsize_tamp。 double Mul(.........)。 //連加 .............. }。一維插值公式如下: 39。 139。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)上述算法。 插值接口 插值接口中使用了一個選擇插值方法的枚舉結(jié)構(gòu)體,如下: 本科畢業(yè)設(shè)計(jì)論文 27 enum InterpMethod { /** 不插值 , 當(dāng) x(i) = x = x(i+1), 返回離 x 較近的點(diǎn)所對應(yīng)的函數(shù)值,當(dāng) x 為中點(diǎn)時,取右邊的點(diǎn) */ DISCRETE, /** 當(dāng) x(i) = x = x(i+1), 返回 x(i)對應(yīng)的函數(shù)值 */ FLOOR, /** 當(dāng) x(i) = x = x(i+1), 返回 x(i+1)對應(yīng)的函數(shù)值 */ CEILING, /** 線性插值,函數(shù)連續(xù),插值點(diǎn)的一階導(dǎo)數(shù)不連續(xù) */ LINEAR, /** 二次樣條插值 , 函數(shù)和其一階導(dǎo)數(shù)都連續(xù) */ QSPLINE, /** 三次樣條插值 , 函數(shù)和其一階導(dǎo)數(shù)和二階導(dǎo)數(shù)都連續(xù) */ CSPLINE, /** 二階多項(xiàng)式插值 , 函數(shù)連續(xù),導(dǎo)數(shù)在插值點(diǎn)個數(shù)為 3 個的時候也連續(xù) ,否則不連續(xù) */ POLY2, /** 三階多項(xiàng)式插值 , 函數(shù)連續(xù),導(dǎo)數(shù)在插值點(diǎn)個數(shù)為 4 個的時候連續(xù) ,否則不連續(xù) */ POLY3, //拉格朗日插值 LAGRANGE }。 上面提到的 interp_table 是我設(shè)計(jì)一個插值數(shù)據(jù)包的結(jié)構(gòu)體,其中包含有插值類需要使用的信息,具體如下: struct interp_table { ....................... //插值維數(shù) size_t dimension。 idpVar。 dpVar。 Extrap。 /*如果 method 為 LAGRANGE 插值,則需對此項(xiàng)賦值,多項(xiàng)式階數(shù), 否則不用賦值 */ size_t order。 本科畢業(yè)設(shè)計(jì)論文 29 第 4 章 實(shí)時環(huán)境測試 測試環(huán)境 cpu: AMD Athlon 64 X2 Dual 系統(tǒng): RTX 操作系統(tǒng) 內(nèi)存: 1GB RTX 全稱 realtime extension,即實(shí)時操作系統(tǒng),提供對 windows 操作系統(tǒng)的擴(kuò)展功能。 RTX 具有如下特點(diǎn), 1. RTX 向開發(fā)者提供了獨(dú)立于操作系統(tǒng)和應(yīng)用程序的對與系統(tǒng)資源的直接訪問控制和所有權(quán),為所需的功能和任務(wù)合理的安排進(jìn)程和線程的執(zhí)行順序。微軟的開發(fā)工具廉價,易用, RTX不需要額外的昂貴的和專有的開發(fā)工具進(jìn)行程序的開發(fā)和調(diào)試。 4. RTX 提供了最高的可靠性。這對于正在執(zhí)行關(guān)鍵指令的應(yīng)用程序尤其重要。首先使用隨機(jī)數(shù)生成器生成一個 1000 維的一個方陣。 大致代碼如下 : double start_time = .....。 ()。 double end_time = .....。 經(jīng)測試,程序執(zhí)行時間大約 20 秒。使用內(nèi)存測試工具,沒有發(fā)現(xiàn)任何內(nèi)存泄露。具代代碼不再列出,下面給出測試結(jié)果 ,單位 次 /s。每增加一維,速度大約降低 40%左右。 本科畢業(yè)設(shè)計(jì)論文 31 第 5 章 結(jié)論 通過上述實(shí)時環(huán)境的測試,本文中各部分的算法設(shè)計(jì)合理 , 效率滿足需求 , 能夠應(yīng)用于飛行器實(shí)時仿真中 , 作為庫文件使用。隨機(jī)數(shù)類提供了非常多的生成器以滿足不同的需求,并且浮點(diǎn)數(shù)生成速度接近每秒鐘百萬次。插值算法中使用線性插值處理了外插情況。矩陣維數(shù)超過 1000 時,矩陣求逆等復(fù)雜運(yùn)算會很慢。 本科畢業(yè)設(shè)計(jì)論文 32 致 謝 在本文完成之際,我要對所有在論文完成過程中給予我無私幫助的人以最誠摯的感謝。也感謝在畢業(yè)設(shè)計(jì)期間幫助過我的同學(xué)們,你們都很棒
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1