0

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

但是对于双数我该怎么办?

4

1 回答 1

1

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

并从范围 [0 1] 更改为 [ab] 使用这行代码:

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

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

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

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

从 [ab] 更改为 [0 1] 你也可以这样做:

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

所以如果 r = 5 在 [0 10] 范围内,则 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, operator) 返回一个模糊集 C,作为应用由字符串 operator 表示的函数的结果,该函数对采样的凸模糊集 A 和 B 执行二元运算。 A 和 B 的元素源自采样宇宙 X 的凸函数:

  1. A、B 和 X 是相同维度的向量。
  2. 运算符是以下字符串之一:“sum”、“sub”、“prod”和“div”。
  3. 返回的模糊集 C 是一个与 X 长度相同的列向量。

最后,您可以使用 MATLAB 中的“evalfis”函数执行模糊推理计算。该函数的输入和输出也是实数:

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

此语法生成响应

out =
    7.0169
    19.6810 
于 2013-07-18T15:08:02.060 回答