日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模糊控制控制器设计

發布時間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模糊控制控制器设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模糊控制設計控制器

模糊控制的具體過程不詳細介紹,具體參考例子參考博客:https://www.cnblogs.com/long5683/p/9963488.html

問題

使用一個具體的問題來解釋模糊控制器的設計:設計一個模糊控制器,通過控制進水電磁閥V1的開啟度,將液位穩定在倒錐形容器的液位高度h。變量的量化等級均為5級,取5個語言值。設計模糊控制器
圖如下:

一維模糊控制器

設計:
e=h0?he=h_0-he=h0??h
則為eee的大小分成五類:負大(NB)、負小(NS)、零(ZOZ_OZO?)、正小(PS)、正大(PB)
根據偏差e的變化范圍分為五個等級:-2,-1,0,+1,+2。得到水位變化(e)模糊表:

控制量u為調節閥門開度的變化。將其分為五個模糊集:負大(NB),負小(NS),零(ZO),正小(PS),正大(PB)。并將u的變化范圍分為七個等級:-3,-2,-1,0,+1,+2,+3。得到控制量(u)模糊劃分表。

根據日常的經驗,設計以下模糊規則:

(1)“若e負大,則u負大”

(2)“若e負小,則u負小”

(3)“若e為0,則u為0”

(4)“若e正小,則u正小”

(5)“若e正大,則u正大”

其中,排水時,u為負,注水時,u為正。

上述規則采用“IF A THEN B”形式來描述:

(1) if e=NB then u=NB

(2) if e=NS then u=NS

(3) if e=0 then u=0

(4) if e=PS then u=PS

(5) if e=PB then u=PB

下面是matlab程序:

a=newfis('fuzzf'); %輸入 f1=1; a=addvar(a,'input','e',[-2*f1,2*f1]); a=addmf(a,'input',1,'NB','trimf',[-2*f1,-2*f1,-1*f1]); a=addmf(a,'input',1,'NS','trimf',[-2*f1,-1*f1,0]); a=addmf(a,'input',1,'Z','trimf',[-1*f1,0,1*f1]); a=addmf(a,'input',1,'PS','trimf',[0,1*f1,2*f1]); a=addmf(a,'input',1,'PB','trimf',[1*f1,2*f1,2*f1]); %輸出 f8=1; a=addvar(a,'output','u',[-3*f8,3*f8]); a=addmf(a,'output',1,'NB','trimf',[-3*f8,-3*f8,-1*f8]); a=addmf(a,'output',1,'NS','trimf',[-3*f8,-1*f8,1*f8]); a=addmf(a,'output',1,'Z','trimf',[-2*f8,0,2*f8]); a=addmf(a,'output',1,'PS','trimf',[-1*f8,1*f8,3*f8]); a=addmf(a,'output',1,'PB','trimf',[1*f8,3*f8,3*f8]); %規則庫 rulelist=[1 1 1 1; %第一列為輸入,第二列為輸出,第三列為權重(一般取1),第四列為and/or(1為and,2為or)2 2 1 1; %第一第二列的1為NB,2為NS,3為Zo,4為PS,5為PB,具體規則參考規則表上。3 3 1 1;4 4 1 1;5 5 1 1;]; a=addrule(a,rulelist); showrule(a) a1=setfis(a,'DefuzzMethod','mom'); writefis(a1,'fuzzf'); a2=readfis('fuzzf'); figure(1);plotfis(a2); figure(2);plotmf(a,'input',1); figure(4);plotmf(a,'output',1); %disp('fuzzy Controller table:e=[-3,+3],ec=[-3,+3]');%顯示矩陣和數組內容 %推理 for i=1:1:5 %因為輸入變化等級有五個e(i)=i-3; %變化等級的范圍在-2~+2Ulist(i)=evalfis([e(i)],a2); end Ulist=round(Ulist) %單獨推理 E=-1; %e為NS時進行推理 u=evalfis(E,a2);

一維模糊控制器的系統框架圖如下:

e的隸屬函數圖像如下:

u的隸屬函數圖如下:

二維模糊控制器

在上面的基礎上,引入偏差變化量(ececec),此處ec為NB意思是加水快,NS為加水慢,Z為加水無變化,PS為排水慢,PB為排水快速。因此我們可以得到25條規則如下:

這里仔細解釋一下,黑色的字體為U的動作,紅色字體橫著的為輸入水位偏差e,豎著的為偏差變化量ec。
舉個例子:
If e=NB and ec=NB then U=NB (如果水位極高,水加的快,則排水排的快)
if e=PS and ec=PB then U=PB (如果水位略微低,水排的很快,則需要加水加大)
此時我們已經有了規則表,因此直接進入matlab上程序:

a=newfis('fuzzf'); %e f1=1; a=addvar(a,'input','e',[-2*f1,2*f1]); a=addmf(a,'input',1,'NB','trimf',[-2*f1,-2*f1,-1*f1]); a=addmf(a,'input',1,'NS','trimf',[-2*f1,-1*f1,0]); a=addmf(a,'input',1,'Z','trimf',[-1*f1,0,1*f1]); a=addmf(a,'input',1,'PS','trimf',[0,1*f1,2*f1]); a=addmf(a,'input',1,'PB','trimf',[1*f1,2*f1,2*f1]); %ec f2=1; a=addvar(a,'input','ec',[-2*f2,2*f2]); %這里我們的ec還是選擇五個模糊集的語言 a=addmf(a,'input',2,'NB','trimf',[-2*f2,-2*f2,-1*f2]); a=addmf(a,'input',2,'NS','trimf',[-2*f2,-1*f2,0]); a=addmf(a,'input',2,'Z','trimf',[-1*f2,0,1*f2]); a=addmf(a,'input',2,'PS','trimf',[0,1*f2,2*f2]); a=addmf(a,'input',2,'PB','trimf',[1*f2,2*f2,2*f2]); %u f8=1; a=addvar(a,'output','u',[-3*f8,3*f8]); a=addmf(a,'output',1,'NB','trimf',[-3*f8,-3*f8,-1*f8]); a=addmf(a,'output',1,'NS','trimf',[-3*f8,-1*f8,1*f8]); a=addmf(a,'output',1,'Z','trimf',[-2*f8,0,2*f8]); a=addmf(a,'output',1,'PS','trimf',[-1*f8,1*f8,3*f8]); a=addmf(a,'output',1,'PB','trimf',[1*f8,3*f8,3*f8]); %rule rulelist=[1 1 1 1 1; %這里第一列為輸入e,第二列為輸入ec,第三列為輸出u1 2 1 1 1;1 3 1 1 1;1 4 3 1 1;1 5 4 1 1;2 1 1 1 1;2 2 1 1 1;2 3 2 1 1;2 4 3 1 1;2 5 4 1 1;3 1 1 1 1;3 2 2 1 1;3 3 3 1 1;3 4 4 1 1;3 5 5 1 1;4 1 2 1 1;4 2 3 1 1;4 3 4 1 1;4 4 5 1 1;4 5 5 1 1;5 1 2 1 1;5 2 3 1 1;5 3 5 1 1;5 4 5 1 1;5 5 5 1 1;]; a=addrule(a,rulelist); showrule(a) a1=setfis(a,'DefuzzMethod','mom'); writefis(a1,'fuzzf'); a2=readfis('fuzzf'); disp('fuzzy Controller table:e=[-2,+2],ec=[-2,+2]'); %推理 Ulist=zeros(5,5); %這里的ulist為一個5x5的矩陣 for i=1:5for j=1:5e(i)=-3+i;ec(j)=-3+j;Ulist(i,j)=evalfis([e(i),ec(j)],a2);end endUlist=round(Ulist)' figure(1); plotfis(a2); figure(2);plotmf(a,'input',1); figure(3);plotmf(a,'input',2); figure(4);plotmf(a,'output',1);

整個二維模糊控制器的框架圖如下:

e的隸屬函數圖如下:

ec的隸屬函數圖如下:

u的隸屬函數圖如下:

補充

此處的輸入量化等級是題目要求為五級,正常情況,可以自行根據情況選擇,若等級選擇高了會更精細,但是系統復雜程度會上升。變量的語言值也可以選擇多幾個,例如PM、NM等。
二維模糊控制器的設計過程中,該控制器的規則表可以自行定義,程序運行后能與自己設計的規則對應到就行。

總結

以上是生活随笔為你收集整理的模糊控制控制器设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。