将数据转换为模糊数据

时间:2013-07-18 15:03:51

标签: matlab fuzzy-logic

我是初学者。我在matlab中有一个矩阵,我想将转换矩阵的数字转换为模糊数,并将这些模糊数用于我的函数输入。我可以这样做吗? 将数字转换为0,1之间的双数,是否正确将数字除以1000? [256,12; 3,56] ---> [0.256,0.12; 0.003,0.056]

但对于双号,我该怎么办?

1 个答案:

答案 0 :(得分:1)

模糊数是什么意思?!!据我所知,MATLAB使用模糊系统的正常数字。之后会有模糊器将实数更改为隶属函数上的点。然后模糊逻辑决定如何选择数字,等等......! 另一方面,如果要将数字的比例更改为[-1 1]或[0 1]范围,则​​它与模糊无关。

并从范围[0 1]更改为[a b]使用以下代码行:

r = a + (b-a)*z;

其中z在[0 1]范围内,r在[a b]

范围内

例如,将z = 0.5从[0 1]更改为[0 10]范围,r变为:

r = 0 + (10-0)*0.5 = 5

从[a b]更改为[0 1]也可以这样做:

z = (r - a)/(b-a);

所以如果在[0 10]范围内r = 5,则z = 0.5,范围为[0 1];

此外,对于真正的模糊操作,请尝试以下方法:

point_n = 101;          % Determines MF's resolution

min_x = -20; max_x = 20;    % Universe is [min_x, max_x]

x = linspace(min_x, max_x, point_n)';

A = trapmf(x, [-10 -2 1 3]);    % Trapezoidal fuzzy set A
B = gaussmf(x, [2 5]);      % Gaussian fuzzy set B

C1 = fuzarith(x, A, B, 'sum');

subplot(2,1,1);
plot(x, A, 'b--', x, B, 'm:', x, C1, 'c');
title('fuzzy addition A+B');

C2 = fuzarith(x, A, B, 'sub');
subplot(2,1,2);
plot(x, A, 'b--', x, B, 'm:', x, C2, 'c');
title('fuzzy subtraction A-B');

C3 = fuzarith(x, A, B, 'prod');

这就是你执行模糊算术的方法。根据MathWorks:

使用区间运算,C = fuzarith(X,A,B,运算符)返回模糊集C作为应用由字符串运算符表示的函数的结果,运算符对采样的凸模糊集A执行二元运算和B.A和B的元素来自采样宇宙的凸函数,X:

  1. A,B和X是相同尺寸的矢量。
  2. 运算符是以下字符串之一:'sum','sub','prod'和 'DIV'。
  3. 返回的模糊集C是具有相同长度的列向量 X
  4. 最后,您可以使用MATLAB中的'evalfis'函数执行模糊推理计算。此函数的输入和输出也是实数:

    fismat = readfis('tipper');
    out = evalfis([2 1; 4 9],fismat)
    

    此语法生成响应

    out =
        7.0169
        19.6810