私は初心者です。matlab にマトリックスがあり、マトリックスの数値をファジー数値に変換し、これらのファジー数値を関数の入力に使用したいのですが、これを行うにはどうすればよいですか? このように数値を 1000 で割って、数値を 0,1 の間の倍精度数値に変換するのは正しいですか? [256,12;3,56]--->[0.256,0.12;0.003,0.056]
しかし、倍数の場合はどうすればよいですか?
私は初心者です。matlab にマトリックスがあり、マトリックスの数値をファジー数値に変換し、これらのファジー数値を関数の入力に使用したいのですが、これを行うにはどうすればよいですか? このように数値を 1000 で割って、数値を 0,1 の間の倍精度数値に変換するのは正しいですか? [256,12;3,56]--->[0.256,0.12;0.003,0.056]
しかし、倍数の場合はどうすればよいですか?
あいまいな数字とはどういう意味ですか?!! 私の知る限り、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 の凸関数から導出されます。
最後に、MATLAB の「evalfis」関数を使用して、ファジー推論計算を実行できます。この関数への入力と出力も実数です。
fismat = readfis('tipper');
out = evalfis([2 1; 4 9],fismat)
この構文は、応答を生成します
out =
7.0169
19.6810