解耦設計
A. 程序設計中,為什麼要解耦
此文轉載的。覺得非常精闢。希望對正在學面向對像設計的你有所幫助,總的說來。有這么多設計模式,要用面向對像。都是為了解耦。力在降低各模塊的依賴,提高重用。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 在程序設計過程中,最頭痛的不是邏輯的編寫過程,更不是演算法的設計,最頭痛的是如何設計出一個容易維護,擴展性好的東西。而耦合問題是最令人煩躁的,它的存在很多人發現不了,所以往往無從入手,真是有苦自己知了,呵呵。以下是我的經驗之談。我通過例子來體現耦合問題的影響。第一個例子: 在開發游戲的時候,有很多實體類,通常屬於一條相同的生產線,如地形:土地,石塊,草地,雪地,沼澤,等,具有相同特徵而功能不同的對象,新手們,一般是在程序的某個地方,默默地new出這些應用到的對象,恩,一個,兩個,三個,慢慢你會發現程序中不斷出現新對象,如果存在10對象實體,而對象的提供了5個介面函數,也就是,讀寫操作,在程序中出現了幾十次,這時,我不要這個對象了,換成其他了,那你是不是要改幾十處地方?恩,問題就是這里了,沒有一個抽象層面,必然會導致維護困難,當對象擴大化到100個,這是一個維護噩夢,當然,單單一個抽象層面是無法解決new實體對象的事實的,這個是令人頭痛的問題,管理對象的生產是一個很重要的模塊,這里對於某些高級語言,如C++,唯一比較好緩解的是工廠模式中的工廠方法,我比較喜歡用這個模式去管理對象,簡單工廠就不要學了,沒什麼實際意義,而我可以很明確告訴你,第一個帶你入門,第一個讓你打開眼界的模式絕對是工廠方法模式,如果真想學學模式,請先研究工廠方法,其使用的意義在於把對象的生成延遲到子類,而統一使用介面去管理對象的初始化,把變化點分離出調用端,這里我只能告訴你為什麼要用設計模式,什麼情況下要用,理不理解就靠你自己的實際經驗和悟性了,本人悟性不高,當時在學習設計模式的時候,看了很多次依然沒有領悟到工廠模式的奧妙,直至代碼量和項目經驗不斷地增加才頓悟出過中道理,確實是很難用文字來表達,不過以上的例子足夠證明它的意義,根源都是為了解耦。第二個例子: 由於我一直都在開發游戲,所以所舉得例子不免都和游戲有關,這個例子,如果你寫過一個完整的游戲,必然有所了解,游戲總會有界面,而其中比較典型的界面是,菜單界面,菜單里有按鈕,對吧?恩,這個問題,我當時設計就考慮,菜單類和按鈕類究竟是分開還是合在一起?想來想去,由於當時設計觀念沒到家,最後把它們合在一起了,這種做法絕對是不好的,為什麼呢?我們不要從概念上入手解釋,通俗的講法就是,菜單和按鈕的對應關系是一對多,對吧?沒有一種固定的關系,有可能1對2,1對3,1對10等等,所以把它們寫在一起,是很僵化的,就單憑這種證明就可以發現,它們要分開,而它們最後的表現是合在一起,通過組合的方式,把按鈕的抽象層面注入到菜單裡面,就可以動態地生成完整的菜單,所謂的組合方式,不就是,菜單裡面有一個存放按鈕引用的集合,希望你明白我所說的,具體我就不解釋了。 結語:我認為這里是全篇文章最重要的,比任何所謂的分層理論都重要,因為它更通俗,更實際,很多人,並不是面向對象學得不好,但總覺得差什麼,我也經歷過,面向對象,封裝,多態,繼承,學過的人都知道,都認為自己了解了,其實不然,很多很奇妙的因素,讓你誤解了,大部分的人認為封裝很簡單,其實大錯特錯了,封裝是最奇妙的,也是最難用好的。只要你記住以下原則,必然能很好地用好封裝,成員盡量使用protected和private,不要去使用public.盡量不要提供給外部對成員屬性getter的介面,意思就是不要暴露成員,為什麼要這樣呢?很簡單,暴露成員屬性必然會導致自身業務的外泄,業務外泄,會導致,類之間的無謂耦合,如A類有成員a,而程序需要對a數據改變,而你提供一個B類可以訪問a成員的getter介面,B類在其自身對a修改,看上去沒什麼,實際上,就是類耦合,對a的修改是類A的職務,由於習慣的提供getter,導致了,在寫類B的時候錯誤地添加了修改業務,使類A內聚能力降低,程序逐步龐大必然會越發明顯,真所謂牽一發動全身,小程序確實是很難看出問題所在。就寫那麼多,本人愚見,希望對你有幫助。
B. 《c#程序設計》中的「解耦」是什麼意思
就是程序的各個部分之間不必互相依賴,可以獨立開發、編譯、測試。這樣有利於程序的多人合作開發、擴展重用、修改維護等
C. 自動控制的解耦設計
但是解耦設計是個什麼概念?解耦設計實際上要求輸入輸出之間的關系,我1控制1,2控制2,用我們的術語來說這是響應特性,並不表示我的反饋系統有些什麼特點,有些什麼要求。但是,我看到國內有些雜志,有人對這個觀點還不太同意,大家可能以後會接觸到。你用的時候要跟下面的一個實際物理系統是連接,實際物理系統跟你數學模型總有點不一樣。假如我只允許你只能在我這樣的數學方程式下,系統是好的,那你沒用的,你做出來系統不能用。我們的設計要允許這兩個有差別,這個允許差別就叫有魯棒性,所以魯棒性不是我們一般數學上的問題。就是實際上提出來的問題,就是解決你這個設計到底能不能用的問題。所謂我有魯棒性,就是你的設計允許有這個差別,允許有不確定性,你在紙面上設計的系統做成控制器以後,到實際上用,照樣有這個性能,這才叫你的設計具有魯棒性。所以這個魯棒性的概念就是80年代提出來的,逐漸形成了我們現在說的現代後控制理論。一個經典控制理論,現代控制理論,後邊現代後控制理論,這個里邊研究對象不一樣,一個傳遞函數,一個狀態空間模型。研究內容呢,我們講現在我們談的是奇異值、魯棒穩定性的問題,在前面的經典的控制理論里邊,是講帶寬、講裕度,現代控制理論里邊是特徵值、方差和范數,這些是在LQG,都是屬於現代控制理論的范疇,用的實際計算工具呢,就伯德(Bode)圖、奈奎斯特圖、尼可爾斯圖。
他在那本1947年麻省理工學院出的教材里邊,提出來介紹這個尼可爾斯圖,這個尼可爾斯圖從40年代到現在,也是有50年了。尼可爾斯50年前提出來的PID整定表,提出來設計用的尼可爾斯圖。50年後的今天還在用,還在用它來做設計,可見到他這個人的水平。為了紀念這個尼可爾斯,從1996年開始,世界自動控制聯合會,就是IFAC(國際自動控制聯合會),專門設立了一個尼可爾斯獎,專門獎給設計上做出貢獻的人。1996年給過一個獎,1999年給過獎。每三年IFAC開會的時候評審一次,就知道這個尼可爾斯這個作用了。所以大家再要有機會的話,能看到他最早的這本書實際上是經典著作。
現代控制理論用黎卡提方程。我們現在用的,現代後控制理論里用的是線性矩陣不等式,線性矩陣不等式的解法都是用MATLAB的軟體來解的,所以整個計算工具,就是我們考慮的對象、研究內容等等都出現了變化。所以有人把它叫做現代後控制理論,我們今天主要把這個過程,怎麼從個別的技術最後形成一門學科?這個學科分成幾個階段?給大家介紹了一下。
這個就是我主要介紹的一些內容,我這里要說的就是這里邊包括一些年份,有些事實。譬如說他做了夢,這個都是有據可查的,不是我瞎說的。但是這里邊對人的評論,一些觀點可能就是我的,所以假如有說錯的希望大家批評指正。我主要介紹的內容就這些,謝謝大家。
提問:聽了您剛才的介紹,我有幾個地方想向您請問一下,請問王教授,您剛才介紹的是自動控制發展的歷程,那麼就您個人的意見和看法,那麼咱們自動控制的未來的發展方向,有可能是哪個方向?就培養我們這些學生而言,我們怎麼樣提高自己自身素質來向這個方向來靠攏。
答:自動控制我比較是有這么一個觀點:你不能光從搞控制的人來說,我能想出一些方向,我就指給你往前走,我能解決你好多問題。我舉例子來說,瓦特的離心調速器,這個控制系統是先有調速器,先有調節系統,為了提高精度,把這個球做大,做大了以後,系統不穩定了,出了問題去解決它。就是說首先是技術推進它的,這是一個大方向,大家可能現在學理論,就是一些新的理論里邊,可能是最優控制吧,Pontryagin,中文叫龐特里亞金,龐特里亞金(Pontryagin)的那個極大值原理,到底怎麼產生的,我倒想說說這個過程,所以就可能知道,我搞控制的人怎麼搞。
龐特里亞金(Pontryagin)的那個
極大值原理,首先在1953年,前蘇聯開了一個自動控制會議,當時是一些搞工程技術的人員,提出最優控制,就是我們現在說的Bang-Bang(開關)控制。這個是有名的人,是費爾德鮑曼(A.A.Feldbaum)他提出的。龐特里亞金(Pontryagin)是數學家,他在控制會議上聽出點門道來了,他是數學所的,完了開完會以後,他把費爾德鮑曼請到他們數學所做講座,講他的最優控制。講座完了以後,1956年龐特里亞金(Pontryagin)的那個極大值原理就出來了。我就說他數學家先能把問題抽象出來,也跟剛才瓦特的離心調速器一樣,受到當時很多技術的影響,受到好多的一些知識的積累,各方面的知識積累,受到啟發,才出來那個極大值原理。
D. 如何實現控制解耦,怎麼進行電路設計和參數配置
解耦就是用數學方法將兩種運動分離開來處理問題逆變器中一個控制參數或信號可能會被不同控制系統調用解耦使多耦合系統某個參數獨立出來易於控制
E. 常用的解耦設計方法有哪幾種
C)(見線性系統理論),往往使系統難於控制,C化成為解耦規范形,取di=n-1。[1] [編輯本段]相關解法 選擇適當的控制規律將一個多變數系統化為多個獨立的單變數系統的控制問題,i=1,x為狀態向量,C戁AB=0時.吉爾伯特比較深入和系統地加以解決,就稱系統實現了完全解耦,2,這是上述方法的主要缺陷。這種基於精確對消的解耦方法,C戁AB=0…,使構成的多變數控制系統的每個輸出變數僅由一個輸入變數完全控制。解耦控制是多變數系統控制的有效手段。利用結構指數可組成解耦性判別矩陣,B,基本目標是設計一個控制裝置。其一是圍繞Morgan問題的一系列狀態空間方法,每一個輸出又只受到一個控制的作用:首先,靜態解耦控制要比完全解耦控制優越,將輸出矩陣C表示為 C戁為C的第i個行向量,這就構成了「耦合」系統。在解耦控制問題中。隨後、B,基於特徵結構配置的解耦控制和基於H_∞的解耦控制理論。給定n維多輸入多輸出線性定常系統(A。由於耦合關系。 在過去的幾十年中,…。在對系統參數變動的敏感方面:基於Morgan問題的解耦控制,但直到1969年才由E。解耦控制是一個既古老又極富生命力的話題,N=0,其閉環控制系統的傳遞函數矩陣G(s)當s=0時為非奇異對角矩陣,di取為使CiAB≠0的最小正整數 N。這里,m為輸出向量的維數,並且它的閉環傳遞函數矩陣G(s)當s=0時即等於D,其設計目標是被控對象的對角優勢化而非對角化,都會導致解耦性的破壞,m;但當s≠0時,早在30年代末就已提出,不確定性是工程實際中普遍存在的棘手現象,系統可用狀態反饋和輸入變換、性能很差:當C戁B=0、C滿足關於秩的關系式,G(s)不是對角矩陣,…,L為輸入變換矩陣,式中D為非奇異對角矩陣。由這樣選取的K和L所構成的控制系統必定是穩定的,即互不影響的控制,u為輸入向量,通過將它的系數矩陣A,這是一種近似解耦方法。其二是以Rosenbrock為代表的現代頻域法。再規定一組結構指數di(i=1,這種方法屬於全解耦方法,也可採用輸出反饋結合補償裝置的形式,其各對角線上元的值可根據其他性能指標來選取,B;否則、鍋爐調節等工業控制系統中,C),不斷出現一些較復雜的設備或裝置,使控制系統的傳遞函數矩陣為非奇異對角矩陣: 已證明,有兩大系列的解耦方法佔據了主導地位,n-1。[3] [編輯本段]工程背景 在現代化的工業生產中,選取輸入變換矩陣 。在實現解耦以後,如果系統可用狀態反饋來穩定,已經應用在發動機控制,一個多輸入多輸出控制系統就解除了輸入,選擇K使閉環系統矩陣(A-BK)的特徵值均具有負實部。互不影響的控制方式,這些設備或裝置的本身所要求的被控制參數往往較多,它對系統參數的變動很敏感,且不同的輸出由不同的輸入控制,使其實現靜態解耦的狀態反饋矩陣K和輸入變換矩陣L可按如下方式選擇。使多變數系統實現完全解耦的控制器,系統參數的不準確或者在運行中的某種漂移都會破壞完全解耦,因此,從而實現自治控制。對於滿足可解耦性條件的多變數系統,也即系統中每一個控制迴路的輸入信號對所有迴路的輸出都會有影響,則系統可通過引入狀態反饋和輸入變換來實現靜態解耦,K為狀態反饋矩陣,如果引入適當的控制規律,…,既可採用狀態反饋結合輸入變換的形式。對於滿足解耦條件的系統,必須設置多個控制迴路對該種設備進行控制,v為參考輸入向量。多變數系統在實現了靜態解耦後。 完全解耦控制 對於輸出和輸入變數個數相同的系統。由於控制迴路的增加,2。 靜態解耦控制 一個多變數系統在單位階躍函數(見過渡過程) 輸入作用下能通過引入控制裝置實現穩態解耦時,且系數矩陣A,往往會在它們之間造成相互影響的耦合作用,1,B,而每一個迴路的輸出又會受到所有輸入的作用、輸出變數間的交叉耦合。完全解耦控制方式的主要缺點是。對於線性定常系統(A,因而更適宜於工程應用。要想一個輸入只去控制一個輸出幾乎不可能,便可容易地求得所要求的狀態反饋矩陣K和輸入變換矩陣L。 [編輯本段]主要分類 三種解耦理論分別是.G,遇到被控對象的任何一點攝動,實現完全解耦的充分必要條件是矩陣E為非奇異,即通過引入控制規律u=-Kx+Lv,m),從而可以在很大程度上避免全解耦方法的缺陷。多變數系統的解耦控制問題,2,使每一個輸入只控制相應的一個輸出基本解釋 所謂解耦控制系統,就稱實現了靜態解耦控制,就是採用某種結構,尋找合適的控制規律來消除系統種各控制迴路之間的相互耦合關系
F. 什麼是解耦以及常用的解耦方法
1、耦合是指兩個或兩個以上的體系或兩種運動形式間通過相互作用而彼此影響以至聯合起來的現象。 解耦就是用數學方法將兩種運動分離開來處理問題,常用解耦方法就是忽略或簡化對所研究問題影響較小的一種運動,只分析主要的運動。
2、常用的解耦方法:
完全解耦控制:對於輸出和輸入變數個數相同的系統,如果引入適當的控制規律,使控制系統的傳遞函數矩陣為非奇異對角矩陣,就稱系統實現了完全解耦。
靜態解耦控制:一個多變數系統在單位階躍函數(見過渡過程) 輸入作用下能通過引入控制裝置實現穩態解耦時,就稱實現了靜態解耦控制。
軟體解耦:說起軟體的解耦必然需要談論耦合度,降低耦合度即可以理解為解耦,模塊間有依賴關系必然存在耦合,理論上的絕對零耦合是做不到的,但可以通過一些現有的方法將耦合度降至最低。
(6)解耦設計擴展閱讀:
三種解耦理論分別是:基於Morgan問題的解耦控制,基於特徵結構配置的解耦控制和基於H_∞的解耦控制理論。
在過去的幾十年中,有兩大系列的解耦方法佔據了主導地位。
其一是圍繞Morgan問題的一系列狀態空間方法,這種方法屬於全解耦方法。這種基於精確對消的解耦方法,遇到被控對象的任何一點攝動,都會導致解耦性的破壞,這是上述方法的主要缺陷。
其二是以Rosenbrock為代表的現代頻域法,其設計目標是被控對象的對角優勢化而非對角化,從而可以在很大程度上避免全解耦方法的缺陷,這是一種近似解耦方法。
G. 解耦的簡介
數學中解耦來是指使含源有多個變數的數學方程變成能夠用單個變數表示的方程組,即變數不再同時共同直接影響一個方程的結果,從而簡化分析計算。通過適當的控制量的選取,坐標變換等手段將一個多變數系統化為多個獨立的單變數系統的數學模型,即解除各個變數之間的耦合。最常見的有發電機控制,鍋爐調節等系統。軟體開發中的耦合偏向於兩者或多者的彼此影響,解耦就是要解除這種影響,增強各自的獨立存在能力,可以無限降低存在的耦合度,但不能根除,否則就失去了彼此的關聯,失去了存在意義。 三種解耦理論分別是:基於Morgan問題的解耦控制,基於特徵結構配置的解耦控制和基於H_∞的解耦控制理論。
在過去的幾十年中,有兩大系列的解耦方法佔據了主導地位。其一是圍繞Morgan問題的一系列狀態空間方法,這種方法屬於全解耦方法。這種基於精確對消的解耦方法,遇到被控對象的任何一點攝動,都會導致解耦性的破壞,這是上述方法的主要缺陷。其二是以Rosenbrock為代表的現代頻域法,其設計目標是被控對象的對角優勢化而非對角化,從而可以在很大程度上避免全解耦方法的缺陷,這是一種近似解耦方法。
H. 解耦控制系統有哪些典型的解耦方案,各方案有何特點
基本解釋 所謂解耦控制系統,就是採用某種結構,尋找合適的控制規律來消除系統種各控制迴路之間的相互耦合關系,使每一個輸入只控制相應的一個輸出,每一個輸出又只受到一個控制的作用。 解耦控制是一個既古老又極富生命力的話題,不確定性是工程實際中普遍存在的棘手現象。解耦控制是多變數系統控制的有效手段。[3] [編輯本段]工程背景 在現代化的工業生產中,不斷出現一些較復雜的設備或裝置,這些設備或裝置的本身所要求的被控制參數往往較多,因此,必須設置多個控制迴路對該種設備進行控制。由於控制迴路的增加,往往會在它們之間造成相互影響的耦合作用,也即系統中每一個控制迴路的輸入信號對所有迴路的輸出都會有影響,而每一個迴路的輸出又會受到所有輸入的作用。要想一個輸入只去控制一個輸出幾乎不可能,這就構成了「耦合」系統。由於耦合關系,往往使系統難於控制、性能很差。 [編輯本段]主要分類 三種解耦理論分別是:基於Morgan問題的解耦控制,基於特徵結構配置的解耦控制和基於H_∞的解耦控制理論。 在過去的幾十年中,有兩大系列的解耦方法佔據了主導地位。其一是圍繞Morgan問題的一系列狀態空間方法,這種方法屬於全解耦方法。這種基於精確對消的解耦方法,遇到被控對象的任何一點攝動,都會導致解耦性的破壞,這是上述方法的主要缺陷。其二是以Rosenbrock為代表的現代頻域法,其設計目標是被控對象的對角優勢化而非對角化,從而可以在很大程度上避免全解耦方法的缺陷,這是一種近似解耦方法。[1] [編輯本段]相關解法 選擇適當的控制規律將一個多變數系統化為多個獨立的單變數系統的控制問題。在解耦控制問題中,基本目標是設計一個控制裝置,使構成的多變數控制系統的每個輸出變數僅由一個輸入變數完全控制,且不同的輸出由不同的輸入控制。在實現解耦以後,一個多輸入多輸出控制系統就解除了輸入、輸出變數間的交叉耦合,從而實現自治控制,即互不影響的控制。互不影響的控制方式,已經應用在發動機控制、鍋爐調節等工業控制系統中。多變數系統的解耦控制問題,早在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。在對系統參數變動的敏感方面,靜態解耦控制要比完全解耦控制優越,因而更適宜於工程應用。
I. "靜態解耦"和"動態解耦"分別指什麼
靜態解耦就是系統各變數在穩態條件下進行解耦,動態解耦是系統進入動態後的解版耦。靜態解耦比權較理想化,可以通過相對放大系數、不變性原理和對角線法實現解耦,動態解耦意味著耦合程度是時變的,有些情況下可以近似靜態解耦來完成,有的情況不行。具體可以學習文獻《自適應動態解耦的設計》