《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 业界动态 > 多人工干涉算法的编程实现

多人工干涉算法的编程实现

2009-02-03
作者:杜中华 王兴贵 狄长春

  摘? 要:? 提出了研究多人工干涉算法的編程實(shí)現(xiàn)問(wèn)題的必要性,在初步分析這一問(wèn)題的基礎(chǔ)上給出了此類問(wèn)題的定義及解決此類問(wèn)題的一些技巧,作為一個(gè)實(shí)例,給出了基于MATLAB包的化可控規(guī)范型的通用函數(shù)源程序。

  關(guān)鍵詞: 多人工干涉算法? 編程? MATLAB? 化可控規(guī)范型

?

  隨著科學(xué)技術(shù)的發(fā)展,許多學(xué)科的一些新理論的應(yīng)用必須依靠計(jì)算機(jī)求解。對(duì)此,人們產(chǎn)生了兩種看法。一種認(rèn)為,要掌握新理論,不能好高騖遠(yuǎn),應(yīng)該從最基本的計(jì)算語(yǔ)言如FORTRAN、VB、VC、DELPHI等的編寫入手。另一種則相反,認(rèn)為學(xué)科的一些最新的理論成果均反映在國(guó)外的一些著名的商用軟件上,通過(guò)學(xué)習(xí)使用這些商用軟件能更快地掌握和利用這些最新的理論成果。這兩種看法均有一定的道理,但實(shí)際上,由于任何一種商用軟件都不可能剛好解決具體問(wèn)題,在使用商用軟件時(shí),往往還必須學(xué)會(huì)在商用軟件的編程環(huán)境下進(jìn)行具體的二次開發(fā),仍要用到許多具體的編程技巧。如《現(xiàn)代控制論》中許多理論都可以通過(guò)MATLAB軟件包中控制工具箱里函數(shù)的調(diào)用來(lái)方便地實(shí)現(xiàn)。但MATLAB軟件包并不是萬(wàn)能的,如化可控規(guī)范型就無(wú)現(xiàn)成的函數(shù)可用。要編制這一函數(shù)必須利用MATLAB語(yǔ)言進(jìn)行編程。在多數(shù)情況下,一定的算法總可用一定的程序來(lái)實(shí)現(xiàn),“只有想不到的,沒(méi)有做不到的”。但在少數(shù)情況下,算法的描述更符合人的思維卻很難用計(jì)算公式來(lái)表達(dá),即有太多的“人工干涉”。在這種情況下,計(jì)算機(jī)作為“機(jī)器”的一面就暴露了出來(lái),編制此類程序會(huì)遇到相當(dāng)大的困難。本文通過(guò)一個(gè)實(shí)例,引出了多人工干涉算法的編程實(shí)現(xiàn)這一問(wèn)題,在分析了該問(wèn)題特點(diǎn)的基礎(chǔ)上給出了這類問(wèn)題的定義,探討了其研究意義,提出了解決此類問(wèn)題的一些技巧,最后作為實(shí)例,給出了基于MATLAB包的化可控規(guī)范型的通用函數(shù)源程序。

1 控制論中系統(tǒng)化可控規(guī)范型算法及多人工干涉算法編程實(shí)現(xiàn)問(wèn)題的提出

  控制論中系統(tǒng)化可控規(guī)范型的算法是這樣描述的:

  從一般著手,考慮多輸入多輸出系統(tǒng),系統(tǒng)的狀態(tài)空間方程為:

  

  其中A為(n×n)維矩陣,B和C分別為(n×m)和(p×n)維矩陣。

  如系統(tǒng)完全可控,則可控性矩陣Wc的秩為n,即:rank(Wc)=rank[B AB…An-1B]=n。

  化可控規(guī)范型的步驟就是:先在Wc中找出n個(gè)線形無(wú)關(guān)的列,再按此來(lái)構(gòu)成相應(yīng)的坐標(biāo)變換陣,最后求取規(guī)范型。

1.1 找出Wc中n個(gè)線形無(wú)關(guān)列

  按列搜索方案,對(duì)給定矩陣(A,B),按圖1構(gòu)成格柵圖。

?

  在圖中假定n=6,m=4。設(shè)bi為B的第i列,先選定非零列向量b1并在表征它的A0b1格內(nèi)記上“×”,然后再看Ab1(即A1b1),若Ab1與b1線形無(wú)關(guān),則在表征Ab1的格內(nèi)記上“×”。如此按格柵圖關(guān)于B的第1列b1繼續(xù)選下去,直到發(fā)現(xiàn)向量Av1b1與先前的向量組{b1,Ab1,…,Av1-1b1}線形相關(guān),則終止按b1方向的選擇,并在Av1b1的格內(nèi)記上“○”(圖1中v1=3)。如果v12進(jìn)行類似搜索,若b2與{b1,Ab1,…Av1-1b1}線形無(wú)關(guān),則取定b2,并在A0b2的格內(nèi)記上“×”。同樣,按b2繼續(xù)向下搜索,直至Av2b2先前取定的所有向量為線形相關(guān),并在格內(nèi)記“○”。按此步驟繼續(xù)進(jìn)行,直至取到第l列,并有v1+v2+…+vl=n時(shí)結(jié)束。這樣Wc中的n個(gè)線形無(wú)關(guān)的列向量即格柵圖中用“×”表示的那個(gè)列向量,并可得到指數(shù)集{v1,v2,…vm}。

1.2 構(gòu)成相應(yīng)的坐標(biāo)變換陣

??? ????

1.3 求取可控規(guī)范型

  系統(tǒng)的可控規(guī)范型為:

  

  可以看出,該算法并不復(fù)雜,理解起來(lái)一點(diǎn)也不困難。如果系統(tǒng)的矩陣維數(shù)不高的話,可以很快在紙上演算出結(jié)果。但如果將該算法的通用程序編出來(lái),就會(huì)發(fā)現(xiàn)一些看上去含義很清楚的操作,編起程序來(lái)十分困難。具體地講,在MATLAB語(yǔ)言環(huán)境下除了可控矩陣的生成、矩陣求逆及矩陣相乘可直接實(shí)現(xiàn)外,還要編制程序解決以下幾個(gè)問(wèn)題:

  ·選取可控矩陣中線形無(wú)關(guān)列向量;

  ·對(duì)選定的線形無(wú)關(guān)列向量按格柵列進(jìn)行分組記數(shù),求得{v1,v2,…,vm};

  ·將選出的n個(gè)列向量按格柵列的順序重新排列,形成矩陣Q;

  ·從Q-1中抽取特定行;

  ·將抽取的特定行放置到新矩陣的特定行位置,空缺行用放置行的特定計(jì)算來(lái)填充。

  基于通用性考慮,可控系統(tǒng)的矩陣維數(shù)不定,線形無(wú)關(guān)列向量位置不定更增加了編程的難度。理解的容易和編程的困難共存于同一個(gè)算法,這絕非偶然,而是一類特殊的多人工干涉算法的編程實(shí)現(xiàn)問(wèn)題的典型特點(diǎn)。由于類似的問(wèn)題不時(shí)遇到,因而有必要對(duì)這類問(wèn)題進(jìn)行較深入的研究。

2 多人工干涉算法編程實(shí)現(xiàn)問(wèn)題的特點(diǎn)及一些實(shí)用技巧

2.1 特點(diǎn)及定義

  上面提到的系統(tǒng)化可控規(guī)范型的算法是多人工干涉算法的一個(gè)典型實(shí)例。事實(shí)上將上面的算法拆開來(lái)看,各個(gè)子算法和在語(yǔ)言編程中常用的諸如記數(shù)、求和、冒泡法排序等小程序類似,均屬于一類問(wèn)題。

  這類問(wèn)題的算法描述特點(diǎn):符合人類的思維習(xí)慣,容易理解,但難以用明確簡(jiǎn)短的數(shù)學(xué)公式表示。

這類問(wèn)題的編程實(shí)現(xiàn)特點(diǎn):要較多地、靈活地綜合應(yīng)用語(yǔ)言的數(shù)組定義、循環(huán)語(yǔ)句、判斷語(yǔ)句及它們的復(fù)雜嵌套關(guān)系。編程難度大,但編程實(shí)現(xiàn)后可達(dá)到一勞永逸的目的。

  綜上所述,多人工干涉算法的編程實(shí)現(xiàn)可近似定義為:由于某一問(wèn)題的算法描述更符合人類的思維而與計(jì)算機(jī)的思維(語(yǔ)言編程實(shí)現(xiàn))相去較遠(yuǎn)而導(dǎo)致編程實(shí)現(xiàn)的困難,這樣的算法從計(jì)算機(jī)的角度考慮,稱為人工干涉算法。當(dāng)問(wèn)題中人工干涉算法較多時(shí),就稱為多人工干涉算法。基于多人工干涉算法的計(jì)算機(jī)語(yǔ)言編制即多人工干涉算法的編程實(shí)現(xiàn)。

  除了MATLAB軟件包中的二次開發(fā)外,在開發(fā)動(dòng)力學(xué)仿真軟件ADAMS等商用軟件中,在用基本編程語(yǔ)言編制優(yōu)化設(shè)計(jì)算法、神經(jīng)網(wǎng)絡(luò)算法、遺傳算法等程序時(shí)都會(huì)遇到一些多人工干涉算法的編程實(shí)現(xiàn)問(wèn)題。而且,從一定意義上講,多人工干涉算法的編程實(shí)現(xiàn)實(shí)際上是將人的一些思維方式強(qiáng)加到計(jì)算機(jī)上,對(duì)這一問(wèn)題的深入研究是實(shí)現(xiàn)計(jì)算機(jī)智能化的一條途徑。因而對(duì)多人工干涉算法編程實(shí)現(xiàn)問(wèn)題的研究具有深遠(yuǎn)的意義。

2.2 一些實(shí)用技巧

  (1)先結(jié)合例題考慮特定算法,再考慮通用算法。從特殊到一般,這里體現(xiàn)了歸納的思想。如前面提到的實(shí)例,可先將待算系統(tǒng)各矩陣維數(shù)固定,同時(shí)考慮計(jì)算中可能出現(xiàn)的各種情況,編制出特定算法,而后再將各矩陣維數(shù)用變量表示即可實(shí)現(xiàn)通用算法。最好結(jié)合一個(gè)例題進(jìn)行編程,以便對(duì)計(jì)算結(jié)果進(jìn)行檢驗(yàn)。

  (2)將多人工干涉算法拆分成幾個(gè)單獨(dú)的人工干涉算法,針對(duì)具體目標(biāo),逐個(gè)編程實(shí)現(xiàn)。這也就是“化整為零”的思想。如前面提到的實(shí)例可拆解為選取線形無(wú)關(guān)列向量、從矩陣中抽取特定行等幾個(gè)目標(biāo)單一的小程序。為確保算法正確,應(yīng)保證每個(gè)小程序都正確,最好在編程時(shí)對(duì)每個(gè)小程序的計(jì)算結(jié)果都要加以顯示,以便發(fā)現(xiàn)問(wèn)題。

  (3)熟練應(yīng)用數(shù)組定義、分組記數(shù)、分組求和、循環(huán)嵌套、排序等編程基本操作。這些相對(duì)簡(jiǎn)單的操作實(shí)際上是多人工干涉算法編程實(shí)現(xiàn)的基礎(chǔ)。如前面提到的實(shí)例,在確定按格柵列記數(shù)、抽取矩陣特定行數(shù)、放置特定行到新矩陣的特定位置等操作中均涉及了這些基本操作。

  (4)重視指針的應(yīng)用。有時(shí)除了要分組記數(shù)外,還要明確各組元素的位置和內(nèi)容,這就要考慮使用指針來(lái)指向特定數(shù)據(jù)。如前面實(shí)例中要實(shí)現(xiàn)選出的線形無(wú)關(guān)列向量按表的列順序排列,就得定義指針jsp(pp,js(n))來(lái)確定屬于某個(gè)格柵列的列向量順序記號(hào)。

  此外,如使用動(dòng)態(tài)數(shù)組節(jié)省變量、加注釋等也是常用的技巧。本文給出的實(shí)例是基于MATLAB語(yǔ)言開發(fā)的,如用FORTRAN、VB、VC、DELPHI等語(yǔ)言編程實(shí)現(xiàn),還要增加許多工作量。

3 多人工干涉編程實(shí)現(xiàn)的一個(gè)實(shí)例(系統(tǒng)化可控規(guī)范型源程序)

ccs.m(can control standard)在MATLAB5.3環(huán)境下運(yùn)行通過(guò)

function [ac,bc,cc]=ccs(a,b,c)

%this function can be used to transfer a system which

%can be controlled to its standard form

%using:[x,y,z]=ccs(a,b,c)

%a,b,c are system model ∑(a,b,c)

co=ctrb(a,b);

%確認(rèn)可控性,只有可控才能化可控規(guī)范型

pd0=det(a);

pd1=rank(co);

num=size(a,1);

if (pd0~=0),display('A is not singularity');

else ,display('A is? singularity');end

if (pd1==num),display('system can be controlled');

else ,display('system may not be controlled');end

%通過(guò)選定線形無(wú)關(guān)列向量組成矩陣,對(duì)選定的列向量

進(jìn)行按格柵列記數(shù)

num1=size(co,2);

num2=size(b,2);

js=zeros(1,num2);

js(1)=1;

jsp(1,1)=1;

wc=co(:,1);

nn=1;?

for n=2:num1?

  wcls=[wc co(:,n)];

  if nn==num

????????? break

  end

  if rank(wcls)>nn

????????????? wc=wcls;

????????????? nn=rank(wcls);

????????????? pp=mod(n,num2);

????????????? if pp==0,pp=num2;end

????????????? js(pp)=js(pp)+1;

????????????? jsp(pp,js(pp))=n;

  end

end

%將選定列向量按其格柵列順序進(jìn)行排序

q=0;

for m=1:num2

  for n=1:js(m)

????????????? q=q+1;

????????????? wc(:,q)=co(:,jsp(m,n));

  end

end

%求逆

wc=inv(wc);

js;

%確定抽取行的行號(hào)

jsls=0;?

for n=1:num2?

  jsls=jsls+js(n);?

  jss(n)=jsls;?

end?

jss;?

%確定放置行的行號(hào)?

jsss(1)=1;?

for n=2:num2?

?? jsss(n)=jss(n-1)+1;?

end?

jsss;

%放置并計(jì)算各行,確定P陣

for n=1:num2?

dp(jsss(n),:)=wc(jss(n),:);?

for m=1:js(n)-1?

  ??? dp(jsss(n)+m,:)=wc(jss(n),:)*a^m;?

  end?

end?

dp;?

%最終求取規(guī)范型?

ac=dp*a*inv(dp);?

bc=dp*b;?

cc=c*inv(dp);?

  用同樣的思想可以編制出系統(tǒng)化可控規(guī)范型及系統(tǒng)結(jié)構(gòu)分解等控制工具箱中未提供的通用MATLAB程序。

  多人工干涉算法的編程實(shí)現(xiàn)是計(jì)算實(shí)踐過(guò)程中產(chǎn)生的一個(gè)很重要的問(wèn)題。它對(duì)于更靈活地使用各種編程語(yǔ)言開發(fā)實(shí)用算法(如遺傳算法、BP神經(jīng)網(wǎng)絡(luò)等),得心應(yīng)手地使用各種商用軟件(如MATLAB、ADAMS等)具有很強(qiáng)的指導(dǎo)意義。更重要的是,從某種意義上說(shuō),通過(guò)多人工干涉算法的編程實(shí)現(xiàn)可以將人類的一些思維強(qiáng)加于計(jì)算機(jī),從而開辟了一條實(shí)現(xiàn)計(jì)算機(jī)智能化的新途徑。

?

參考文獻(xiàn)

1 肖建.現(xiàn)代控制系統(tǒng)綜合與設(shè)計(jì).北京:中國(guó)鐵道出版社,2000

2 薛定宇.控制系統(tǒng)計(jì)算機(jī)輔助設(shè)計(jì)——MATLAB語(yǔ)言及應(yīng)用.北京:清華大學(xué)出版社,1996

3 陸寧.MATLAB語(yǔ)言即學(xué)即會(huì).北京:機(jī)械工業(yè)出版社,2000
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容