王福來
浙江財經學院數學與統計學院 浙江杭州 310018
☆課程建設與實踐教學☆
數學建模優化程序設計與數學原理的綜合運用
王福來
浙江財經學院數學與統計學院 浙江杭州 310018
從符號與數值的轉化、同余映射中的周期長度及分階段執行程序等3個方面,以實際例子研究了如何在實踐中運用數學原理來優化程序設計、節約運行時間,達到利于解決數學建模問題的目標。
數學建模;優化程序設計;數學原理
數學建模中程序設計與數學原理的綜合運用往往直接涉及實踐中目標能否實現。數學建模中經常涉及程序的編制,如果程序的編制過于復雜,往往會使系統運行時間過長,甚至無法運行,嚴重妨礙數學建模問題的解決。其中一個主要的原因是程序設計中沒有盡量考慮用數學原理來優化程序,使程序得到簡化、優化。
筆者分別從3個方面來論述如何用數學原理優化程序設計:(1)通過符號與數值的轉化以有效確定序列的大小及距離;(2)根據數論知識解決同余映射中周期長度對初值的依賴性;(3)分階段執行程序以驗證程序的靈敏性或系統的穩定性。
1.1 比較子序列大小的問題
我們知道數學模型中經常要處理一些符號問題。如在Lorenz映射中,人們為了計算復雜度、排列熵等指數,經常利用符號動力學方法得到一列符號數據,這時往往需要比較子序列的大小。它的比較方式是,任給兩個符號序列,它們的大小排序為:

這里, ∑為兩個符號序列的公共字頭。
這個比較在程序設計時是較為方便的,如果把它們先轉化為二進制數據則更能節省時間。但另一些情況下就不會這么簡單。例如,投擲硬幣實驗出現正面、反面,得到一個隨機序列,如001011101……,如果簡單地把符號與十進制或二進制數值等同,這是沒有意義的。但在數學建模中有時我們仍然可利用符號與數值的轉化關系達到優化程序設計的目的。
為了計算兩個點12( )xx…與12( )yy… 間的距離,一般的文獻采用如下兩種距離定義方式:



以上兩個式子都表明,兩個符號序列,如{a1a2… am}與{b1b2… bm},前面符號重復得越多,則兩個序列之間的距離越近。但若按照這種距離公式直接比較兩個子序列的每個符號,則會占用太多的計算機機時,甚至是不可能完成的。
現在我們采用下面的數學處理方法,則會兼顧到這兩方面,即既可以保留原來的順序關系,又可以在程序上(用Matlab語言)節約計算機機時。
方法是:
Step1:用num2str()函數把符號串{a1a2… am}轉為字符串{a1a2… am},如num2str(1010)=1010,等式右邊的1010不再是符號而是二進制字符串。
Step2:用bin2dec()函數將Step1中的二進制數據,設為xi(i=1,2,…,n) 轉化為十進制的數據yi(i=1,2,…,n)。

它的數學原理是:原來的序列,如{1 011},{1 001},{1 010},雖然它們之間并無順序關系,但賦予了順序關系后,并不妨礙原來的距離關系。這樣就利于程序執行了,顯然這種方法可以大量節約程序的機時。
1.2 同余映射中周期長度的問題
密碼學中經常用同余映射(4)來模擬同余映射(5),以獲得類似于(4)的混沌軌道:

同余映射(5)在 z> 1時為混沌映射,且李雅普諾夫指數為lnz。(l0,z,m)稱作密鑰。對每一個特定的數字混沌映射,都需要利用數論和遍歷性理論等專門的數字工具進行獨立的研究。例如,對于映射(4),當 z= 2且m= 2k?1時周期 P(m)取得最小值 P(m )= [l nln m]+1;當m為素數且z為一個乘法群的生成元時,P(m)取得最大值 m? 1;而當m為其他數時,P(m)的典型值為多少卻不得而知。事實上,當(l0,z,m)分別取(37,6,3989),(37,29,3989),(37,2,3989)時,得到的最長周期的軌道長分別為997,1994,3998,而不是都為 P(m )= m?1。因此用文獻[3,4]的方法生成的周期軌道有時不夠長,周期軌道長度變化較大,這是生成偽隨機序列的主要缺點。另一方面,m越大,則素數分布的密度越小。這往往使m取得相當大,而這使得計算機達不到要求,某些程序無法執行,也使得作為參數空間的密鑰(l0,z,m )非常有限,給通信密碼造成不利。事實上在程序編制時,只要加入一些數學思想則可以完全避免這個問題,即使得對任意模為m(m為素數,m > 2)的同余映射(4)都可以構造出相應的長度為 m?1的不穩定周期軌道。具體步驟是:
Step1:對任意素數m和任意整數z(z ≥ 2),任取l0(2 ≤ l0≤ m ? 1),由(4)生成集合 A0;
Step2:若 A0= {1 ,2,… ,m ?1},則已實現目標;否則取{1 ,2,… ,m ?1}A0中的最小數作為l1,回到Step1。設由Eq.4生成集合為 A1。
Step3:重復執行Step1 和Step2直到第n步產生的集合A0∪A1∪…∪An= {1,2,… ,m ?1},則A0∪ A1∪ … ∪An的 長度必為 m?1。
上述步驟的數學原理是: A0,A1,… ,An的任兩個集合必不相交,因為否則由數論中的同余理論,這兩個集合是相同的,這與Step1與Step2的設置相矛盾。
1.3 分階段執行程序
執行一個復雜的程序(為表達方便,這里稱為總程序)時,往往需要更改其中的參數空間的一個或幾個參數反復運行,以檢測系統的穩定性、模型的靈敏性或數據的某些特征。這時會遇到兩種情況:(1)有些程序的子模塊是不變的,反復運行是沒有必要的,占據了較多計算機機時;(2)里面有隨機生成函數,每次運行它都會自動生成新的數據,而更改的參數又需要在與前一次不變的隨機數下運行,這就達不到檢驗的目的。
解決這兩個問題的最好方法是分階段執行程序,即分兩個或多個子程序執行,具體來說,分下面兩個步驟:
Step1:將只生成數據而不需要更改參數的子程序(一般是總程序的前部分,記為ProgramⅠ)單獨執行;將生成的變量保存起來,如將生成的數據集合設為A,再將A保存到某個根目錄下,語句是:save('E:mydata1. mat','A')。當然有多個數據集合,可保存多次。
Step2:另編輯一個程序,在程序的開頭用語句load(' E:mydata1.mat ')將ProgramⅠ中的變量下載,并將總程序的其余部分置于其后。這樣的形成的程序記為Program Ⅱ。于是要更改參數,則只需要更改ProgramⅡ中的參數就可以。
通過實例說明了編制程序要考慮到實踐中可行性問題。這方面的例子還可以參考筆者的文章[5]。在具體的建模中要養成將數學原理運用到程序設計中去的思維習慣,不僅可節約時間,使程序可以運行,同時也提高了程序的質量,利于修改和進一步編輯,以達到實踐的目標。
[1] 羅衛民,李昌興,史克剛.“數學實驗”與“數學建模”課程教學改革[J].高等工程教育研究,2005,6:110~112
[2] 李國斌.微分方程解實際問題的探討[J].高等教育研究,2009,24(2):62~63
[3] Sánchez S, Criado R.and Vega C. A generator of pserdo-random numbers sequences with a very long period. Mathematical and Computer Modeling. 2005, 42(7):809~816
[4] 王蕾,汪芙平,王贊基.一種新型的混沌偽隨機數發生器[J].物理學報,2006,55:3964~3975
[5] Wang Fulai 2010 Determining consecutive periods of the Lorenz maps. Advances in Difference Equations. Doi:10.1155/2010/985982 Article ID 985982.
Optimizing and integrating program designing and mathematical principles in mathematics modeling
Wang Fulai
Zhejiang university of f nance and economics, Hangzhou, 310018, China
With three examples of transformation from symbols to numbers, periodic lengths of congruence and performance in steps, optimization program designing by integrating mathematical principles is studied to save runtime and solve problems in mathematical modeling.
mathematical modeling; optimization of program designing; mathematical principle
2011-03-23 稿件編號:1103158
王福來,博士,副教授。
2010年浙江省新世紀高等教育教學改革項目(編號:ZC2010052);浙江財經學院一類課程建設項目(編號:xjy1200915)。