忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/23 (Sat) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2009/04/26 (Sun) / 編集
1/(1.0+0.01*(x-50.0)^2.0);が上に凸のグラフになってしまう罠発生

test=(1.0+0.01*(50-50.0)^2.0);
test =1

test=(1.0+0.01*(x-50.0)^2.0);
test(51) =1

test=1/(1.0+0.01*(x-50.0)^2.0);
test(51) =0.0000669
ダレカタスケテ、、、

どうやら正しくは「test=1 ./ (1.0+0.01 .* (x-50.0) .^ 2.0);」らしい、演算子を「./」にしないと行列の割り算になってしまい、数字がおかしくなるらしい。


あとあれ、比較演算子を使う(例えば「muA>=0.2」)と答えは真理値で「....FFFFTT.....」みたいな感じになるけど、グラフとして表示するためにはbool2s関数で数値に変換しないといけないらしい、、、

ファジィ理論のアルファカット(α-cut)の例をのせてみる
clear;

//alpha_cut

alpha=0.2

x=[0:1:100];//xの範囲

muA=1.0 ./ (1.0+0.01 .* (x-50) .^ 2.0);
alpha_cut = bool2s(muA>=alpha);//真理値を数値へ

//表示
//軸の範囲 rect=[x最小値,y最小値,x最大値,y最大値];
rect=[0,0,100,1];
//刻みの数 tics=[x大きな刻み,x小さな刻み,y大きな刻み,y小さな刻み];
tics=[10,11,1,11];

//title=["表題","x軸名","y軸名"];
title=["Membership func (muA)","x","muA"];
//フレーム作成
plotframe(rect,tics,[%f,%f],title);
//グラフ1を表示
plot(x,muA,":r");
//グラフ2を表示
plot(x,alpha_cut,"-b");
//凡例 legend("グラフ1","グラフ2",右上);
legend("Menbership","alpha cut",1);
alpha cutの例

拍手[1回]

PR
忍者ブログ [PR]