2016-03-26 18 views
1

Rasgele değişkenim için N senaryoları oluşturmak için Monte Carlo yaklaşımını kullanıyorum. Bu senaryoları M x N matrisinde saklıyorum. Matriste meydana gelen her senaryo (sütun) olasılığını hesaplamak istiyorum.Matriste her bir sütunun olasılığını bulun

histc() komutunu kullanmayı denedim, ancak çalışmıyor. Optimizasyon problemi için kullanmak için bu olasılıkları nasıl bulabilirim ve bir vektörde saklayabilirim?

cevap

0

Bu "senaryo" matrisinin aktarımı için unique'u kullanabilir ve işlev çağrısının üçüncü çıktısını inceleyebilirsiniz. Üçüncü çıktı, matriste görülen her olası benzersiz duruma benzersiz bir kimlik atar. Tüm satırları tek bir örnek olarak değerlendirmek için 'rows' bayrağını da belirtmek istersiniz. 'rows' belirtmezseniz, matrisinizdeki her bir öğe, tüm sütunun (veya dönüştürülen matrisin satırının) tek bir örnek olmasını istediğiniz tek bir örnek olarak kabul edilir. Ayrıca, sütunlar boyunca unique ile çalışamıyoruz maalesef bunun yerine matrisi dönüştürmeniz gerekiyor.

Ayrıca, her bir kimliğin her bir benzersiz olayla nasıl eşleştiğini incelemek için de ilk çıktıyı da isteyeceksiniz. Çıktıların sütunlarla eşleşmesi için bu çıkış değişkenini sonuna kadar transpoze ettiğinizden emin olun. Daha sonra her bir "senaryonun" ortaya çıkışını belirlemek için histc veya histcounts'u kullanabilir ve böylece bir eşdeğer durumun üstlenilmesi olasılığını bulabilirsiniz.

İşte hızlı bir örnek. Biz 7 etkinlik varken senaryonun boyutluluğu 3 olduğunu görüyoruz

>> A = [0 0 0; 1 1 1; 1 0 0; 0 0 1; 0 0 0; 0 0 1; 1 1 1].' 

A = 

    0  1  1  0  0  0  1 
    0  1  0  0  0  0  1 
    0  1  0  1  0  1  1 

: Ben A saklanan bu olaylar matrisi olduğunu varsayalım. Ben unique ile söylediklerini yapmak verir:

>> [un, ~, id] = unique(A.', 'rows'); %' 
>> un = un.' %' 

un = 

    0  0  1  1 
    0  0  0  1 
    0  1  0  1 

>> id 

id = 

    1 
    4 
    3 
    2 
    1 
    2 
    4 

Biz kolon [0; 0; 0] ID 1 ait olduğunu görebiliyorum, kolon kimliği 2-[0; 0; 1] harita, kolon kimliği 3'e [1; 0; 0] harita ve kimliği 4'e nihayet [1; 1; 1] haritalar. un tüm benzersiz sütunları saklarken, id bize bu eşleştirmeyi sağlar. id değişkenine başvurup yukarıda gördüğümüz haritayı incelediğinizde, her bir sütunu karşılık gelen kimlikleriyle değiştirebilirsiniz.

Biz daha sonra her oluşum olasılıkları belirleyebilir:

N = size(un,2); %// Get total number of unique scenarios 
M = size(A,2); %// Get total number of scenarios 
prob = histc(id, 1 : N)/M; %// Finding probabilities 

Biz alıyorum:

>> prob 

prob = 

    0.2857 
    0.2857 
    0.1429 
    0.2857 

Bu bizim verilerle kabul eder. [0; 0; 0], [0; 0; 1] ve sütunları için, her sütunun iki oluşumu vardır ve bu nedenle olasılıklar 2/7 = 0.2857 olur. [1; 0; 0]'un diğer sütununun yalnızca bir oluşumu vardır ve bu nedenle olasılık 1/7 = 0.1429 olur. senin matris varsayarak bu nedenle kolayca hamur kopyalayabilirsiniz listeleme tam kodu için


, A depolanır:

[un, ~, id] = unique(A.', 'rows'); %'// Assigning each event a unique ID 
un = un.'; %'// Transpose to ensure compatibility 
N = size(un,2); %// Get total number of unique scenarios 
M = size(A,2); %// Get total number of scenarios 
prob = histc(id, 1 : N)/M; %// Finding probabilities 
İlgili konular