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);

したがって、範囲 [0 10] で r = 5 の場合、範囲 [0 1] で z = 0.5 です。

さらに、実際のファジー操作については、次のようなことを試してください。

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) は、文字列 operator で表される関数を適用した結果として、ファジー セット C を返します。この関数は、サンプリングされた凸ファジー セット A および B に対してバイナリ演算を実行します。 A と B の要素は、サンプリングされたユニバース X の凸関数から導出されます。

  1. A、B、および X は、同じ次元のベクトルです。
  2. operator は、「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 に答える