Soru sorBulanık Mantık Üçgen Üyelik Fonksiyonu Yazmak
rabia tarafından 5 yıl önce soruldu

Üçgen üyelik fonksiyonu kod ya da pseudo kodu yazmama yardımcı olur musunuz? Benim yazdığım fonksiyon programda 3 kere kullanıldığı halde tek eğri çizdirebiliyor, ve sonucu hep 0 buluyor. Min değerleri nasıl yaparım.
%*********************************
%*Triangle Membership Function
%muX=triangle(x1,x2,x3,x)
function mu=triangle(x1,x2,x3,x)
%clear; clg; clc;
x1=50; x2=100; x3=100;
x=0:0.01:100;
a=(x-x1)/(x2-x1);
b=(x3-x)/(x3-x2);
mu=max(min(a,b),0);
plot(x,mu);
xlabel('x kesin sayisi');
ylabel('Uyelik Derecesi');
grid
end
Bunu nasıl üç eğri haline getirebilirim ya da yenisini nasıl yazarım. Uygulamaya çalıştığım denklem bu:
https://hizliresim.com/FqyR6N

8 Cevap
ekremt Yönetici tarafından 5 yıl önce cevaplandı

Merhaba,
Kodunuz sonucunda elde etmek istediğiniz sonuç aşağıdaki linkteki gibi mi ? Doğru ise yanıtı düzenleyip iletebilirim.
https://hizliresim.com/j8mBKF

rabia tarafından 5 yıl önce cevaplandı

Şuna bezer bir çizime ihtiyacım var :https://hizliresim.com/mLQRi6
Aralığım şu şekilde;

X-Öğrenci Sayısı

DX = [0, 0, 50]

OX = [0, 50, 100]

YX = [50, 100, 100]

ekremt Yönetici tarafından 5 yıl önce cevaplandı

Öncelikle eğer hazır komut kullanmak isterseniz direkt olarak çözdüğünü belirtmek isterim.
Ardından kod parçanızda bir kaç değişiklik ile çözüme ulaşmak mümkün oldu.
Çözümü beklediğiniz gibi alabilirsiniz

clear; clc; clc;

x = 0:0.01:100;
d1 = 0; 
d2 = 0;
d3 = 50;

o1 = 0; 
o2 = 50;
o3 = 100;

y1 = 50; 
y2 = 100;
y3 = 100;

ds1 = (x-d1)/(d2-d1);
ds2 = (d3-x)/(d3-d2);
sond = max(min(ds1,ds2),0);

os1 = (x-o1)/(o2-o1);
os2 = (o3-x)/(o3-o2);
sono = max(min(os1,os2),0);

ys1 = (x-y1)/(y2-y1);
ys2 = (y3-x)/(y3-y2);
sony = max(min(ys1,ys2),0);


plot(x,sond);
xlabel('X Değerleri');
ylabel('Uyelik Derecesi');
grid

hold on
plot(x,sono);
plot(x,sony);
hold off
rabia tarafından 5 yıl önce cevaplandı

Çok soru sordum ama ben programımda söyle değerler verdim;
 
%X-Number of Students

LXL = 0; LXT = 0; LXR = 50;
MXL = 0; MXT = 50; MXR = 100;
HXL = 50; HXT = 100; HXR = 100;

% Y-Current Applicability

LYL = 0; LYT = 0; LYR = 0.5;
MYL = 0; MYT = 0.5; MYR = 1;
HYL = 0.5; HYT = 1; HYR = 1;

% Z-Theoretical Infrastructure Contribution

LZL = 0; LZT = 0; LZR = 0.5;
MZL = 0; MZT = 0.5; MZR = 1;
HZL = 0.5; HZT = 1; HZR = 1;

% W-Will you continue?

NWL = 0; NWT = 0; NWR = 0.5;
UWL = 0; UWT = 0.5; UWR = 0.5;
YWL = 0.5; YWT = 0.5; YWR = 0.5
 
3 giriş bir çıkışlı bir sistemi mamdani algoritmasına göre fis kullanmadan x = 40; y = 0.2; z = 0.6; bu girişler için çözmek istiyorum. Bu fonksiyonda yukarıda verdiğim X,Y,Z girişleri ve W çıkışı icin 3 derecede left(L), top(T) ve right(R) için değerlerini programdan alsınlar ama fonksiyon bu işlevleri gerçekleştirsin istiyorum. Bu konuda bir düzenlemeyi nasıl yaparım. Matlab'da çok yeniyim çok soru soruyorum kusura bakmayın. 

rabia tarafından 5 yıl önce cevaplandı

Çok soru sordum ama ben programımda söyle değerler verdim;
 
%X-Number of Students

LXL = 0; LXT = 0; LXR = 50;
MXL = 0; MXT = 50; MXR = 100;
HXL = 50; HXT = 100; HXR = 100;

% Y-Current Applicability

LYL = 0; LYT = 0; LYR = 0.5;
MYL = 0; MYT = 0.5; MYR = 1;
HYL = 0.5; HYT = 1; HYR = 1;

% Z-Theoretical Infrastructure Contribution

LZL = 0; LZT = 0; LZR = 0.5;
MZL = 0; MZT = 0.5; MZR = 1;
HZL = 0.5; HZT = 1; HZR = 1;

% W-Will you continue?

NWL = 0; NWT = 0; NWR = 0.5;
UWL = 0; UWT = 0.5; UWR = 0.5;
YWL = 0.5; YWT = 0.5; YWR = 0.5
 
3 giriş bir çıkışlı bir sistemi mamdani algoritmasına göre fis kullanmadan x = 40; y = 0.2; z = 0.6; bu girişler için çözmek istiyorum. Bu fonksiyonda yukarıda verdiğim X,Y,Z girişleri ve W çıkışı icin 3 derecede left(L), top(T) ve right(R) için değerlerini programdan alsınlar ama fonksiyon bu işlevleri gerçekleştirsin istiyorum. Bu konuda bir düzenlemeyi nasıl yaparım. Matlab'da çok yeniyim çok soru soruyorum kusura bakmayın. 

ekremt Yönetici tarafından 5 yıl önce cevaplandı

Problem değil. Bütün bir ödevi, çalışmayı yollamak yerine; Sorun, araştıralım, deneyelim birlikte çözüme ulaşırız bilgimiz varsa. Bu platformun amacı da bu zaten.
Sorunuza hızlıca bir yanıt vermek gerekirse;
%X-Number of Students Bu kısım zaten ilk ilettiğiniz ve size çözüm olarak ilettiğim kısımdaki değerler ile aynı o yüzden yapmış olduğum çalışmayı incelerseniz burası için çözüme ulaşabilirsiniz. Giriş değeri x = 40 dediğini de yapmış olduğum kod parçasında 0'dan 100'e kadar olan yeri 40'a kadar yaparak çözebilirsiniz.
FIS kullanımı olmasın derken standar fuzzy arayüzü kullanımını engellemiş oluyorsunuz.
X, Y ve Z için kod parçasını düzenleyerek tekrar bir deneyin girişleriniz ile birlikte. 
Mamdani Algoritması için de bir kaynak veya anlatım mevcut ise ona göre de bakabiliriz, ismen hatırlasam da tam olarak kullanımı için bakmam gerekli.
Diğer kısımlar için de gün içinde fırsat buldukça bakmaya çalışacağım.

rabia tarafından 5 yıl önce cevaplandı

şimdi yaptığım çalışmada fonksiyon ve program ayrı olsun ben programımda fonksiyonu kullanayım istiyorum. Yani bir triangle .m fonksiyon dosyam ve bir tane de ana programım bulunan mamdani.m dosyam var. Ben mamdani algoritmamı kodladım çalışıyor. şimdi triangle . m dosyasındaki üçgen üyelik fonksiyonumu programa çağırdığımda o da doğru değeri gönderiyor. Ama son halini gözlemlemek istiyorum bunun için bir çizim yapamıyor. amaçladığım şey fonksiyon içerisinde değer ataması yapmadan program çıktısı olarak W çıkış uzayımı görmek istiyorum. Nasıl yaparım?

ekremt Yönetici tarafından 5 yıl önce cevaplandı

Tam olarak anlayamadım kusura bakmayın. 
Fonksiyon içine değer ataması yapmadıktan sonra fonksiyon kullanma sebebiniz nedir ? Sonuçta fonksiyonun amacı program içinde sıklıkla kullanılacak kısımları yeni bir m. file yapıp giriş değerlerini verip arka planda çalıştırdıktan sonra çıkış değerini ana programınıza göndermek için kullanılır.
Çizim kısmını ana program içinde ve fonksiyon içinde tanımlayabilirsiniz.
Bir kere daha açık bir şekilde açıklayıcı bir şekilde sorunuzu ifade edebilir misiniz ?