新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 多人工干涉算法的編程實現

        多人工干涉算法的編程實現

        作者: 時間:2006-05-07 來源:網絡 收藏

        摘要:提出了研究多人工干涉算法的編程實現問題的必要性,在初步分析這一部分的基礎上給出了此類問題的定義及解決此類問題的一些技巧,作為一個實例,給出了基于MATLAB包的化可控規范型的通用函數源程序。

        本文引用地址:http://www.104case.com/article/242361.htm

        關鍵詞:多人工干涉算法 編程 MATLAB 化可控規范型

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

        1 控制論中系統化可控規范型算法及多人工干涉算法編程實現問題的提出

        控制論中系統化可控規范型的算法是這樣描述的:

        從一般著手,考慮多輸入多輸出系統,系統的狀態空間方程為:

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

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

        化可控規范型的步驟就是:先在Wc中找出n個線形無關的列,再按此來構成相應的坐標變換陣,最后求取規范型。

        1.1 找出Wc中n個線形無關列

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

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

        1.2 構成相應的坐標變換陣

        將從Wc中挑選出的n個列向量排成如下非奇異陣:

        Q=[b1 Ab1 …Av1-1bl … bl Abl … Avl-1b1]

        并令hi表示Q-1的第行,然后構成坐標變換陣:

        1.3 求取可控規范型

        系統的可控規范型為:

        其中Ac=PAP-1,Bc=PB,Cc=CP-1。

        可以看出,該算法并不復雜,理解起來一點也不困難。如果系統的矩陣維數不高的話,可以很快在紙上演算出結果。但如果將該算法的通用程序編出來,就會發現一些看上去含義很清楚的操作,編起程序來十分困難。具體地講,在MATLAB語言環境下除不可控矩陣的生成、矩陣求逆及矩陣相乘可直接實現外,還要編制程序解決以下幾個問題:

        ·選取可控矩陣中線形無關列向量;

        ·對選定的線形無關列向量按格柵列進行分組記數,求得{v1,v2,…,vm};

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

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

        ·將抽取的特定行放置到新矩陣的特定行位置,空缺行用放置行的特定計算來填充。

        基于通用性考慮,可控系統的矩陣維數不定,線形無關列向量位置不定更增加不編程的難度。理解的容易和編程的困難共存于同一個算法,這絕非偶然,而是一類特殊的多人工干涉算法的編程實現問題的典型特點。由于類似的問題不時遇到,因而有必要對這類問題進行較深入的研究。

        2 多人工干涉算法編程實現問題的特點及一些實用技巧

        2.1 特點及定義

        上面提到的系統化可控規范型的算法是多人工干涉算法的一個典型實例。事實上將上面的算法拆開來看,各個子算法和在語言編程中常用的諸如記數、求和、冒泡法排序等小程序類似,均屬于一類問題。

        這類問題的算法描述特點:符合人類的思維習慣,容易理解,但難以用明確簡短的數學公式表示。

        這類問題的編程實現特點:要較多地、靈活地綜合應用語言的數組定義、循環語句、判斷語句及它們的復雜嵌套關系。編程難度大,但編程實現后可達到一勞永逸的目的。

        綜上所述,多人工干涉算法的編程實現可近似定義為:由于某一問題的算法描述更符合人類的思維而與計算機的思維(語言編程實現)相去較遠而導致編程實現的困難,這樣的算法從計算機的角度考慮,稱為人工干涉算法。當問題中人工干涉算法較多時,就稱為多人工干涉算法。基于多人工干涉算法的計算機語言編制即多人工干涉算法的編程實現。

        除了MATLAB軟件包中的二次開發外,在開發動力學仿真軟件ADAMS等商用軟件中,在用基本編程語言編制優化設計算法、神經網絡算法、遺傳算法等程序時都會遇到一些多人工干涉算法的編程實現問題。而且,從一定意義上講,多人工干涉算法的編程實現實際上是將人的一些思維方式強加到計算機上,對這一問題的深入研究是實現計算機智能化的一條途徑。因而對多人工干涉算法編程實現問題的研究具有深遠的意義。

        2.2 一些實用技巧

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

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

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

        (4)重視指針的應用。有時除了要分組記數外,還要明確各組元素的位置和內容,這就要考慮使用指針來指向特定數據。如前面實例中要實現選出的線形無關列向量按表的列順序排列,就得定義指針jsp(pp,js(n))來確定屬于某個格柵列的列向量順序記號。

        此外,如使用動態數組節省變量、加注釋也是常用的技巧。本文給出的實例是基于MATLAB語言開發的,如用FORTRAN、VB、VC、DELPHI等語言編程實現,還要增加許多工作量。

        3 多人工干涉編程實現的一個實例(系統化可控規范型源程序)

        ccs.m(can control standard)在MATLAB5.3環境下運行通過

        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);

        %確認可控性,只有可控才能化可控規范型

        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

        %通過選定線形無關列向量組成矩陣,對選定的列向量進行按格柵列記數

        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

        %將選定列向量按其格柵列順序進行排序

        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;

        %確定抽取行的行號

        jsls=0;

        for n=1:num2

        jsls=jsls+js(n);

        jss(n)=jsls;

        end

        jss;

        %確定放置行的行號

        jsss(1)=1;

        for n=2:num2

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

        end

        jsss;

        %放置并計算各行,確定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;

        %最終求取規范型

        ac=dp*a*inv(dp);

        bc=dp*b;

        cc=c*inv(dp);

        用同樣的思想可以編制出系統化可控規范型及系統結構分解等控制工具箱中未提供的通用MATLAB程序。

        多人工干涉算法的編程實現是計算實踐過程中產生的一個很重要的問題。它對于更靈活地使用各種編程語言開發實用算法(如遺傳算法、BP神經網絡等),得心應手地使用各種商用軟件(如MATLAB、ADAMS等)具有很強的指導意義。更重要的是,從某種意義上說,通過多人工干涉算法的編程實現可以將人類的一些思想強加于計算機,從而開辟了一條實現計算機智能化的新途徑。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 苗栗县| 兰州市| 方山县| 东山县| 嘉鱼县| 乐亭县| 积石山| 普宁市| 神木县| 邢台市| 南安市| 金阳县| 忻州市| 阳高县| 广饶县| 盈江县| 东方市| 柳江县| 芦溪县| 灌云县| 延寿县| 陈巴尔虎旗| 青阳县| 瑞昌市| 建昌县| 柏乡县| 镇坪县| 潮安县| 长治市| 鄂州市| 海城市| 钟山县| 满洲里市| 全州县| 靖州| 福清市| 潢川县| 蓝田县| 西宁市| 黔南| 平陆县|