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

正文內容

飛行器實時仿真算法研究本科畢業(yè)論文(編輯修改稿)

2025-07-24 16:33 本頁面
 

【文章內容簡介】 比較合理,現(xiàn)在對Vector類編碼時非常簡單,很多方法已經通過兩個基類實現(xiàn)過了。但是注意Vector類包含向量元素, 并且提供盡可能多的構造函數(shù),以便使用能使不同的數(shù)據(jù)類型轉為Vector類型。接口大致如下://向量類template typename Tclass Vector : public AlmostVectorT{ private: //保存向量元素 valarrayT vectorData_。 slice slice_。 public: //重寫基類的虛函數(shù) virtual const sliceamp。 getSlice() const 。 virtual const valarrayTamp。 constVal() const。 //由STL valarray 構造 Vector(const valarrayTamp。 val) 。 Vector(const valarrayTamp。 val, const sliceamp。 s)。 ................................ Vector(const T * p, size_t n) 。 //以下兩個構造函數(shù)是為了 //Vector Vector //VectorView Vector //ConstVectorView Vector Vector(const GneVectorT amp。 vec) 。 Vector(const GneVectorT amp。 vec, const slice amp。 s)。 …}。 VectorView接口 template typename T class VectorView : public AlmostVectorT //可變視圖 { private: valarrayT* pVectorData_。 slice viewSlice_。 public: //重寫基類的虛函數(shù) virtual const sliceamp。 getSlice() const 。 virtual const valarrayTamp。 constVal() const。 //下面兩個構造函數(shù)是為了 //Vector MatrixView //VectorView VectorView VectorView(AlmostVectorT amp。 vec) 。 .................... virtual valarrayTamp。 val() 。 ……. }。 補充說明上面接口中使用到的slice類型是C++標準庫中valarray類的組成部分,大致結構如下:class slice{public: ...................protected: size_t _Start, _Len, _Stride。}。 可以看到slice類主要保存三個數(shù)據(jù),即1. 向量的第一個元素的下標,_Start2. 向量的長度,_Len3. 步長,即每個元素之間的間隔,_Stride這種類型可以完全使用到我們的視圖類中,這也是為什么選擇valarray模板作為內置向量類型的原因之一。上面對接口的陳述中沒有提到Vector類型的輸入和輸出,這里作已簡要說明。由于輸出只需要對對象具有只讀權限即可,而輸入則要求對對象的讀寫權限。所以輸出可以放到GneVector底層基類中,作為所有派生類的共有函數(shù)。而輸入則需放到AlmostVector類中,作為Vector和VectorView類的共有函數(shù)。決定某個函數(shù)放在基類還是派生類需要很周全的考慮,基類和派生類可以比作一個杠桿,不能一頭很重,一頭很輕,代碼失衡會導致后期的編碼和維護非常困難。輸入輸出函數(shù)的聲明如下:friend std::ostreamamp。 operator ( std::ostream amp。os, const GneVectorT amp。avec)。friend std::istreamamp。 operator ( std::istream amp。is, AlmostVectorT amp。avec)。 最后介紹本類初始化時的一個特點。 初始化一個向量對象有很多種方法,最直接的方法是給每一個元素賦值,如下: for(size_t i=0。 iN。 ++i) { v[i] = /* whatever */ } 但是這樣很不方便,尤其是當我們想給v賦一系列不同的值時,在for循環(huán)中是比較麻煩的。當然也可以用下面這種方式實現(xiàn): double var[5] = { , , , 1, }。 Vectordouble v(var, 5)。 但這種方法的不便之處是使用了局部變量。依我來看,最理想的方法是把初始化列表放到構造函數(shù)中,如下:Vectordouble v({ , , , 1, }, 5)。 // Error – invalid不幸的是這不符合C++的語法規(guī)則,變通一下,使用如下方式: Vectordouble v((double[]) { , , , 1, }, 5)。 // Usually OK這種方法通常是不會錯的,但是也有可能有些編譯器會報錯,我也不知道這算不算標準C++語法,因為沒有一本C++書(我讀過的)講到過這種初始化方式。 為了解決這個問題,我使用了操作符,把我的類對象當做標準輸出。從而可以使用如下方式進行初始化: Vectordouble v(5)。 v , , , 1, 。 //或者 v 1 。 輸入數(shù)據(jù)的個數(shù)必須和對象的大小一致,否則會觸發(fā)庫中的出錯處理函數(shù)。上面的方式的優(yōu)點是,初始化列表里的數(shù)據(jù)不限制為常量。通常來說,初始化列表必須是在編譯時可確定的,但用上面的方式,初始化列表里的元素可以使變量,甚至是一個函數(shù)的返回值,只要能轉換為Vector模板對應的實例化類型就可以了。當然v也可以在其他任何時候重新使用此方法賦值。 另外,由于使用標準庫的valarray模板,所以在所有這些類的實現(xiàn)中,甚至沒有主動使用C++標準內存分配和刪除操作符new,delete,一個也沒有出現(xiàn)。 最后,GneVector類和AlomostVector類都含有純虛函數(shù),所以無法實例化,這正是我想要的,給用戶使用的類是Vector、VectorView和ConstVectorView三個類。GSL提供的矩陣類型使用起來非常麻煩,由于是對c語言中的數(shù)組進行包裝,所以用戶時刻都要注意內存的變化,花費大量精力減少內存泄露,并且每種數(shù)據(jù)類型都有不同的函數(shù)版本,且不支持用戶自定義類型,所以我決定使用GSL的算法,重寫構架矩陣類,并且給出C++的接口,支持多種類型,包括未知的用戶自定義類型,盡量減少用戶對程序本身的維護工作量,使用戶能專注于算法本身。根據(jù)上一節(jié)中向量類的分析可知,valarray是個非常方便好用的標準模板,所以這里也使用它作為我們的向量結構體。但是如何把它當做二維數(shù)據(jù)來讀取是個問題。這里我寫了個很簡單的類mslice,類似于上節(jié)中的slice,但是適用于二維數(shù)據(jù)。class mslice { public: …………. private: size_t startRow_。 size_t startCol_。 size_t rows_。 size_t cols_。 }。mslice類保存4條信息:1. startRow_,起始行。2. startCol_,起始列。3. rows_,行數(shù)。4. cols_,列數(shù)。根據(jù)這四條信息就可以確定當前的valarray變量是如何表示一個矩陣的。 由于矩陣和向量的需求分析有很多相似的地方,比如都要求有視圖類,所以可以使用向量類的構架方法。構架如下:圖32 繼承關系圖 還有5個類接口和上節(jié)中的Vector類相似,由于基類設計良好,這些派生類的實現(xiàn)非常簡單,在此不一一列出,詳見原代碼。一個好的隨機數(shù)生成算法必須能夠在理論上和統(tǒng)計上同時滿足所需特性。滿足理論上的隨機是很難的,但我們也可以接受那些具有長周期,低的序列相關性的算法。對隨機數(shù)算法的測試通常是使用數(shù)值仿真來做統(tǒng)計測試,用隨機數(shù)來估計一些能用概率論求解出精確值的量,然后和精確值做比較即可測量該算法的隨機性。GSL提供了大量的隨機數(shù)生成器,但是由于給出是C的接口,使用起來非常麻煩,用戶要負責大量的內存開辟和銷毀工作。我要做的就是使用GSL提供的算法,給出隨機數(shù)生成器的C++統(tǒng)一接口,并且在運行時可以改變隨機數(shù)算法和種子。每一個隨機數(shù)的實例都有自己的狀態(tài)量,即可以同時使用多個相同的隨機數(shù)算法實例,它們之間是相互獨立的,互不影響的,所以可以在多線程環(huán)境下運行。需要注意的是,隨機數(shù)生成器并不是正弦或余弦等函數(shù),對隨機數(shù)生成器的連續(xù)調用會產生不同的值,這正是我們想要的特性。但為了達到這種效果,生成器必須對一些狀態(tài)量進行跟蹤,某些情況下,這些狀態(tài)是個整數(shù)(比如上次生的隨機數(shù)),但在更多的情況中,這些狀態(tài)量會很復雜,有可能是一個數(shù)列,而且每種隨機數(shù)生成算法使用的狀態(tài)量的大小和個數(shù)都不一樣。但是用戶使用的時候,不必關心狀態(tài)到底是怎么變的,這是算法內部要考慮的事。 類名為CRandom,首先分析GSL提供的隨機數(shù)算法里的共有屬性,所有的算法都有種子的設置,最大值,最小值,當前的狀態(tài)量,算法名稱,當然最重要的是有返回介于最大值和最小值之間隨機數(shù)的方法。至于使用哪種算法可以在構造函數(shù)里使用枚舉變量進行選擇,同時提供一個改變算法的成員函數(shù)已實現(xiàn)運行時改變算法。所以類CRandom的接口大致如下 class CRandom { public: /*構造函數(shù)提供默認隨機數(shù)算法,也可以動態(tài)設置*/ CRandom(RNG_ORDER type = RNG_TAUS)。 virtual ~CRand
點擊復制文檔內容
物理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1