解耦

解耦

耦合是指兩個或兩個以上的體系或兩種運動形式間通過相互作用而彼此影響以至聯合起來的現象。解耦就是用數學方法將兩種運動分離開來處理問題,常用解耦方法就是忽略或簡化對所研究問題影響較小的一種運動,只分析主要的運動。

簡介


數學中解耦是指使含有多個變數的數學方程變成能夠用單個變數表示的方程組,即變數不再同時共同直接影響一個方程的結果,從而簡化分析計算。通過適當的控制量的選取,坐標變換等手段將一個多變數系統化為多個獨立的單變數系統的數學模型,即解除各個變數之間的耦合。最常見的有發電機控制,鍋爐調節等系統。軟體開發中的耦合偏向於兩者或多者的彼此影響,解耦就是要解除這種影響,增強各自的獨立存在能力,可以無限降低存在的耦合度,但不能根除,否則就失去了彼此的關聯,失去了存在意義。

工程背景

在現代化的工業生產中,不斷出現一些較複雜的設備或裝置,這些設備或裝置的本身所要求的被控制參數往往較多,因此,必須設置多個控制迴路對該種設備進行控制。由於控制迴路的增加,往往會在它們之間造成相互影響的耦合作用,也即系統中每一個控制迴路的輸入信號對所有迴路的輸出都會有影響,而每一個迴路的輸出又會受到所有輸入的作用。要想一個輸入只去控制一個輸出幾乎不可能,這就構成了“耦合”系統。由於耦合關係,往往使系統難於控制、性能很差。

主要分類

三種解耦理論分別是:基於Morgan問題的解耦控制,基於特徵結構配置的解耦控制和基於H_∞的解耦控制理論。
在過去的幾十年中,有兩大系列的解耦方法佔據了主導地位。其一是圍繞Morgan問題的一系列狀態空間方法,這種方法屬於全解耦方法。這種基於精確對消的解耦方法,遇到被控對象的任何一點攝動,都會導致解耦性的破壞,這是上述方法的主要缺陷。其二是以Rosenbrock為代表的現代頻域法,其設計目標是被控對象的對角優勢化而非對角化,從而可以在很大程度上避免全解耦方法的缺陷,這是一種近似解耦方法。

解法


選擇適當的控制規律將一個多變數系統化為多個獨立的單變數系統的控制問題。在解耦控制問題中,基本目標是設計一個控制裝置,使構成的多變數控制系統的每個輸出變數僅由一個輸入變數完全控制,且不同的輸出由不同的輸入控制。在實現解耦以後,一個多輸入多輸出控制系統就解除了輸入、輸出變數間的交叉耦合,從而實現自治控制,即互不影響的控制。互不影響的控制方式,已經應用在發動機控制、鍋爐調節等工業控制系統中。多變數系統的解耦控制問題,早在30年代末就已提出,但直到1969年才由E.G.吉爾伯特比較深入和系統地加以解決。

完全解耦控制

對於輸出和輸入變數個數相同的系統,如果引入適當的控制規律,使控制系統的傳遞函數矩陣為非奇異對角矩陣,就稱系統實現了完全解耦。使多變數系統實現完全解耦的控制器,既可採用狀態反饋結合輸入變換的形式,也可採用輸出反饋結合補償裝置的形式。給定n維多輸入多輸出線性定常系統(A,B,C)(見線性系統理論),將輸出矩陣C表示為
C戁為C的第i個行向量,i=1,2,…,m,m為輸出向量的維數。再規定一組結構指數di(i=1,2,…,m):當C戁B=0,C戁AB=0…,C戁AB=0時,取di=n-1;否則,di取為使CiAB≠0的最小正整數N,N=0,1,2,…,n-1。利用結構指數可組成解耦性判別矩陣:
已證明,系統可用狀態反饋和輸入變換,即通過引入控制規律u=-Kx+Lv,實現完全解耦的充分必要條件是矩陣E為非奇異。這裡,u為輸入向量,x為狀態向量,v為參考輸入向量,K為狀態反饋矩陣,L為輸入變換矩陣。對於滿足可解耦性條件的多變數系統,通過將它的係數矩陣A,B,C化成為解耦規範形,便可容易地求得所要求的狀態反饋矩陣K和輸入變換矩陣L。完全解耦控制方式的主要缺點是,它對系統參數的變動很敏感,系統參數的不準確或者在運行中的某種漂移都會破壞完全解耦。

靜態解耦控制

一個多變數系統在單位階躍函數(見過渡過程)輸入作用下能通過引入控制裝置實現穩態解耦時,就稱實現了靜態解耦控制。對於線性定常系統(A,B,C),如果系統可用狀態反饋來穩定,且係數矩陣A、B、C滿足關於秩的關係式,則系統可通過引入狀態反饋和輸入變換來實現靜態解耦。多變數系統在實現了靜態解耦后,其閉環控制系統的傳遞函數矩陣G(s)當s=0時為非奇異對角矩陣;但當s≠0時,G(s)不是對角矩陣。對於滿足解耦條件的系統,使其實現靜態解耦的狀態反饋矩陣K和輸入變換矩陣L可按如下方式選擇:首先,選擇K使閉環系統矩陣(A-BK)的特徵值均具有負實部。隨後,選取輸入變換矩陣,式中D為非奇異對角矩陣,其各對角線上元的值可根據其他性能指標來選取。由這樣選取的K和L所構成的控制系統必定是穩定的,並且它的閉環傳遞函數矩陣G(s)當s=0時即等於D。在對系統參數變動的敏感方面,靜態解耦控制要比完全解耦控制優越,因而更適宜於工程應用。

軟體解耦

說起軟體的解耦必然需要談論耦合度,降低耦合度即可以理解為解耦,模塊間有依賴關係必然存在耦合,理論上的絕對零耦合是做不到的,但可以通過一些現有的方法將耦合度降至最低。
做事情要想事半功倍,就要高處著眼,觸摸到事情的脈絡。當今流行著各種眼花繚亂的軟體框架,不管是struts,還是spring,hibernate,還是.net,還是各種前端UI框架,其設計的核心思想是:
儘可能減少代碼耦合,如果發現代碼耦合,就要採取解耦技術;
解耦方法有但不限有如下幾種:
(a)採用現有設計模式實現解耦,如事件驅動模式、觀察者模式、責任鏈模式等都可以達到解耦的目的;
(b)採用面向介面的方式編程,而不是用直接的類型引用,除非在最小內聚單元內部。但使用該方法解耦需要注意不要濫用介面。
(c)高內聚,往往會帶來一定程度的低耦合度。高內聚決定了內部自行依賴,對外只提供必須的介面或消息對象,那麼由此即可達成較低的耦合度。

彈性解耦


作用於基本結構的水平多餘約束力X1不會使桿端的切口發生豎向的位移;反過來,豎向的多餘約束力X2也不會使桿端的切口發生水平的相對位移