Soru sorBir kural altında rand() fonksiyonun kullanımı
crysis tarafından 6 yıl önce soruldu

Merhaba elimde daha önceden topladığım 100 sayılık bir veri seti var.Öncelikle veri setinden rastgele 25 sayı seçeceğim.Daha  sonra seçilen bu sayılar üzerinde rand() fonksiyonunu kullanarak üretilme olasılığı eşit olmayan  A kuralı altında 10 tane yeni  sayı üretmek istiyorum.
A kuralı:Seçilen sayı üzerinde basamak tekrarı yaptırıp yazdırmak örn: 13 yerine 113,131,133…..
Sorum A kuralı ile rand() fonksiyonunu nasıl birleştirebiliriz?

10 Cevap
En iyi cevap
Caglar Yönetici tarafından 6 yıl önce cevaplandı

İlgili sayi icin olasiligi elde ettikten sonra, if ile işlem yap ya da yapma diyebilirsiniz
…..
olasilik=olasiliklar(secilmis_sayilar(g_sayi)); %secilen sayi icin degisiklik yapma olasiligi, 0-1 arasinda tanimlanmis olmali
if rand > olasilik 
…. yukarida yazdigim degisiklik islemleri …. %buraya sifirin basa geldigi durum icin de kontrol eklemek saglikli olabilir
end

Caglar Yönetici tarafından 6 yıl önce cevaplandı

En efektif yol mu emin değilim ama,
hangi yuz sayiyi sececegimizi, rastgele bir logical vektor olusturarak belirleyebiliriz
sayilar=…
secim=randperm(100,25); %1'den 100'e kadar 25 farklı sayi uydur. 
secilmis_sayilar=sayilar(secim); %sayilar vektorunden, uydurulan siraya denk gelenleri sec
Sadece bir basamak tekrar edecek değil mi?
Doğrudan basamak üzerinde işlem yapmak char'a gecis yapmadan mumkun mu bilemiyorum.
for g_sayi=1:1:numel(secilmis_sayilar)
aktif_sayi_char=num2str(secilmis_sayilar(g_sayi));
basamak_sayisi=numel(aktif_sayi_char);
secilen_basamak=randi(basamak_sayisi)
kacinci_siraya_yerlesecek=randi(basamak_sayisi+1); %soldan
yeni_sayi_char=[aktif_sayi_char(1:(kacinci_siraya_yerlesecek-1)) aktif_sayi_char(secilen_basamak) aktif_sayi_char(kacinci_siraya_yerlesecek:end)];
yeni_sayi(g_sayi)=str2num(z);
end
 
İlk sayilar vektorundeki değer tam sayi olmazsa hata verebilir. Bunun icin donusum veya assert kontrolu konabilir. Bir de, ortalardan sıfırı seçim sayının başında tekrar ettirmeye çalıştığında sayı değişmeyecektir.

crysis tarafından 6 yıl önce cevaplandı

Öncelikle cevabınız için teşekkür ederim,evet sadece 1 basamak olması yeterli.Dediğiniz gibi tam sayı olmamasından dolayı hata aldım bunu gidermek  ve soruyu basitleştirmek için; Öncelikle sayıları tam sayıya yuvarladım  ve sayıların şeklinde olduğunda varsayalım.
sayilar =(15,66,23,34,45,72,68)
  "sayilar" içerisinden  kendimizin seçtiği 3 sayı için örneğin (15,72,68) için üretilecek  rastgele tekrarlayan sayılarda 15 için yapılacak her tekrarlama işleminin(155,151,115,515,551) hangisinin olduğunun önemi yok sadece 1'nin üretilip yazdırılma olasılığı %20 ,72 için her tek tekrarlama işleminin olasılığı %25,68 için ise %40  olma olasılıklarını koyarken nasıl bir yöntem izleyeceğemi anlayamadım.

Caglar Yönetici tarafından 6 yıl önce cevaplandı

Neyin olasılığını tarif ettiğinizi tam anlayamadım.
Diyelim 15 sayısı seçildi. 20% ihtimalle bir tekrarlama işlemi yaptırılsın, 80% yaptırılmasın, mı?
Tekrarlama yaptırılırsa tamamen rastgele yaptırılacak.

crysis tarafından 6 yıl önce cevaplandı

Evet dediğiniz gibi 15 sayısı seçilirse 20% ihtimalle tekrarlama işlemi yaptırılsın(orijinal yapısının bozulma olasılığı da diyebiliriz) bu tekrarlama işlemi sonucunda çıkacak sayı 151 de olur 115 de olur farketmez sadece yapısının bozulması önemli.

crysis tarafından 6 yıl önce cevaplandı

Evet dediğiniz gibi 15 sayısı seçilirse 20% ihtimalle tekrarlama işlemi yaptırılsın(orijinal yapısının bozulma olasılığı da diyebiliriz) bu tekrarlama işlemi sonucunda çıkacak sayı 151 de olur 115 de olur farketmez sadece yapısının bozulması önemli.

Caglar Yönetici tarafından 6 yıl önce cevaplandı

Bu olasılıklar nerede tutuluyor peki?

Caglar Yönetici tarafından 6 yıl önce cevaplandı

bir önceki cevapta
rand < olasilik 
olmasi lazimdi.

crysis tarafından 6 yıl önce cevaplandı

olasılık bizim dışarıdan belirlediğimiz bir değer ,bunu rand  < olasilik şeklinde niçin yazdığımızı anlayamadım.

Caglar Yönetici tarafından 6 yıl önce cevaplandı

Rand her seferinde 0 1 arası, rastgele bir değer verecek. Siz olasılık 0.89 derseniz mesela, Rand eşit dağılım sağladığı için 88.9% ihtimalle 0.89dan küçük bir sayı verecek ve işlemi yapacak. Kucuktur yerine kucuk esit de kullanabilirsiniz. "matlabde bir işlemi %x ihtimalle yaptırma" sorusunun en genel yöntemi budur .