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?
İ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
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.
Ö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.
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.
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.
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.
olasılık bizim dışarıdan belirlediğimiz bir değer ,bunu rand < olasilik şeklinde niçin yazdığımızı anlayamadım.
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 .