当前位置:文档之家› 模糊控制习题一

模糊控制习题一

一、完成下述模糊集合的基本运算:
1、设论域为 12345678{x ,x ,x ,x ,x ,x ,x ,x }X =A 和B 为论域X 上的两个模糊
集合已知:
12345678
1
2
4
5
6
7
8
0.20.40.60.8 1.00.80.50.2A x x x x x x x x 0.50.7 1.00.80.60.40.2B x x x x x x x =
+++++++=
++++++
试计算:A B, A B, A (B A) 。

解: =
B A 8
76543212.05.08.00.10.16.07.05.0X X X X X X X X +++++++;
8765421
2.04.06.08.08.04.02.0X X X X X X X +
+++++=
B A ;
8
7
6
5
4
3
2
1
8.05.08.00.18.06.04.05.0)(X X X X X X X X A B +
++++++=
A ;
2、设X 、Y 、Z 为论域,X 到Y 的模糊关系为R ,Y 到Z 的模糊关系为S 。


知模糊关系矩阵为:
0.30.60.80.10.50.30.80.5
0.20.70.4
0.90.70.2R , S=0.90.10.80.50.10.40.50.3
0.4
0.2
0.60.4
0.1
0.9⎡⎤⎡⎤⎢⎥⎢⎥⎢
⎥⎢⎥
=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦
⎣⎦
, 试求:X 到Z 的模糊关系。

分析:由于R 是X →Y 上的模糊关系,S 是Y →Z 上的模糊关系。

则X →Z 上的模糊关系为R 与S 的模糊合成。

解:编程实现本题的运算程序如下: #include <iostream.h> void main()
{
float d[4]={0};
float a[4][4]={{0.3,0.6,0.8,0.1},{0.5,0.2,0.7,0.4},
{0.9,0.1,0.8,0.5},{0.3,0.4,0.2,0.6}};
floatb[4][3]={{0.5,0.3,0.8},{0.9,0.7,0.2},
{0.1,0.4,0.5},{0.4,0.1,0.9}};
float c[4][3]={0}; int i,j,k;
for (i=0;i<4;i++)
for (k=0;k<3;k++) { for (j=0;j<4;j++) {
d[j]=(a[i][j]>b[j][k])?b[j][k]:a[i][j];
if (d[j]>d[0]) d[0]=d[j]; c[i][k]= d[0]; }
cout<<c[i][k]<<"\t";
}
}
运行上述程序可知:


⎥⎥


⎢⎢⎢
⎢⎣⎡=6.0085
.05.04.04.04.06.04
.05.05
.06.0S R
二、用于模糊控制的不确定性推理
定义论域为X ={x1, x2, x3, x4, x5};Y ={y1, y2, y3, y4, y5} 已知在论域X 上定义如下模糊子集:
*
0.20.40.60.8 1.01x2x3x4x50.7
1.00.80.60.3x1
x2
x3
x4
x5
A x A =+
+++
=
++
+
+
并在论域Y 上定义如下模糊子集:
0.20.50.7 1.00.81y2
y3
y4
y5
y ++++B=
若有如下模糊规则
if x is A then y is B
试完成推理:如果x 是*
A ,求*
B 。

分析:本题为简单的模糊推理,用模糊关系表示如下:
R(x,y)=(A->B)(x,y)=(1-A(x))∨(A(x)∧B(y))
其隶属函数的定义为:))()(())(1(,y x x y x B A A R
μμμμ∧∨-=)( 解:编程实现上述运算:
程序代码如下:
#include <iostream.h> void main() {
float A[5]={0.2,0.4,0.6,0.8,1.0}; float B[5]={0.2,0.5,0.7,1.0,0.8}; float C[5][5]={0}; float F[5][5]={0}; float H[5][5]={0};
int i,j;
for (i=0;i<5;i++) for (j=0;j<5;j++)
{ C[i][j]=(A[i]>B[j])? B[j]:A[i]; // cout<<C[i][j]<<"\t";
}
float D[5]={0}; for (i=0;i<5;i++) {
D[i]=1-A[i];
//cout<<D[i]<<"\t"; }
float E[5]={1,1,1,1,1}; for (i=0;i<5;i++) for (j=0;j<5;j++) {
F[i][j]=(D[i]>E[j])? E[j]:D[i];
//cout<<F[i][j]<<"\t"; }
for (i=0;i<5;i++) for (j=0;j<5;j++) {
H[i][j]=(C[i][j]<F[i][j])?F[i][j]:C[i][j];
cout<<H[i][j]<<"\t"; } }
运行以上程序可知:
⎥⎥⎥⎥
⎥⎥⎦

⎢⎢⎢
⎢⎢⎢⎣⎡=8.01
7
.05
.02
.08.08.07.05.02.06.06.06.05.04
.06
.06.06.06.06.08.08.08.08.08.0R
)
7.0,7.0,7.0,7.0,7.0(**==R A B
5
4
3
2
1
7.07.07.07.07.0*X X X X X B ++++=。

相关主题