2014-09-29 37 views
0

我有以下功能:確定數量的頻率,如果模擬

enter image description here

我有機會從這個函數2000的隨機數,然後進行直方圖。 然後我必須確定它們中有多少個比P更大(X> 2)。

這是我的函數:

%function [ output_args ] = Weibullverdeling(X) 
%UNTITLED Summary of this function goes here 
% Detailed explanation goes here 
for i=1:2000 
    % x= rand*1000; 
    %x=ceil(x); 
    x=i; 
    Y(i) = 3*(log(x))^(6/5); 
    X(i)=x; 
end 
plot(X,Y) 

,它給了我下面的圖片:enter image description here

我怎麼可能讓它來告訴我有多少價值我有超過2個?

+0

通常在隨機變量生成和模擬中,'U'用來表示一個介於0和1之間的均勻隨機數。該日誌將是負數,所以除非lambda也是負數,否則我認爲你的公式是錯誤的。另外,這個方程在根的下方有lambda,但是你的Matlab公式在功率之外。您能否澄清一下您的配方應該是什麼樣的,並且您是否正確轉錄了它? – pjs 2014-09-29 19:25:24

+0

您的代碼不會返回您的任務。因此,無論是在代碼中出現錯誤,還是在制定應該做的事情時出現錯誤。現在你可以繪製你的公式,從1到2000.步驟1.因此,你根本沒有任何隨機(或統一)分佈。在你的文本中,你說你必須「從這個函數生成2000個隨機數」。這表明你應該計算2000年隨機數的log(x),最有可能在你沒有告訴我們的兩個寄宿生之間。請編輯您的問題以解釋哪一個是正確的。 – 2014-09-30 10:06:01

回答

1

很簡單:

>> Y_greater_than_2 = Y(Y>2); 
>> size(Y_greater_than_2) 
ans = 

     1 1998 

所以這是1998年值超出2000是大於2

編輯

如果你想找到另外兩個值之間的值,比如在1到4之間,你需要做類似的事情:

>> Y_between = Y(Y>=1 & Y<=4); 
>> size(Y_between) 
ans = 

    1 2 
+0

我試過這個也得到了值bwtween(1 <= X <= 4),它仍然給我1 1998年,所以我認爲這個答案是不正確的:這是我是如何做到的:Y_between = Y(1 <= Y <= 4);然後大小(Y_之間)。 – 2014-09-29 15:39:49

+0

你做得不對。我會編輯我的答案。 – am304 2014-09-29 15:44:40

0

這是我認爲:

for i=1:2000 
    x=rand(1); 
    Y(i) = 3*(log(x))^(6/5); 
    X(i)=x; 
end 
plot(X,Y) 

U是一個統一的隨機變量,從中所以你需要使用rand函數在MATLAB中就可以得到十。

在這之後您實現:

size(Y(Y>2),2); 
0

您可以直接執行代碼(這裏k是你的根,n是數據點的數量,y是分佈數量最多,x是分配的最小數量和lambda在方程)的lambda

X=(log(x+rand(1,n).*(y-x)).*lambda).^(1/k); 
result=numel(X(X>2)); 

讓分裂並解釋其詳細:

你想了許多的第k個根:

number.^(1/k) 

你想有一個數字的自然對數:

log(number) 

要乘某事。:

numberA.*numberB 
你想獲得

讓說,X和Y之間的1000個隨機數字:

(x+rand(1,1000).*(y-x)) 

你想所有這一切結合起來:

x= lower_bound; 
y= upper_bound; 
n= No_Of_data; 
lambda=wavelength; %my guess 
k= No_of_the_root; 
X=(log(x+rand(1,n).*(y-x)).*lambda).^(1/k); 

所以,你只需要插入您的x,y,n,lambdak

然後檢查

bigger_2 = X(X>2); 

這將只返回的值大於2,如果你想比2

No_bigger_2=numel(bigger_2); 
0

我要去的假設更大的元素個數,你已經提出了什麼是應該是一個基於反演的隨機變量生成算法,並且您需要實值(而不是複雜)解,因此您省略了對數上的負號。如果這些假設是正確的,則不需要模擬來獲得答案。

在規定的假設下,您的公式是補充累積分佈函數(CCDF)的倒數。它是互補的,因爲較小的U值給出較大的X值,反之亦然。從你的matlab實現解決(校正)公式U.使用的值:

 X = 3 * (-log(U))^(6/5) 
    X/3 = (-log(U))^(6/5) 
-log(U) = (X/3)^(5/6) 
     U = exp(-((X/3)^(5/6))) 

由於這是CCDF,在用於X的值堵塞給出的概率(或比例)的結果的比X.求解更大對於X = 2,產量爲0.49,也就是說,結果中的49%應該大於2.

如果lambda在基團內,但通向解的代數相似,則進行適當調整。除非我搞亂算術,否則比例將是55.22%。

如果你仍然需要模擬這個,知道分析答案應該可以幫助你確認你的模擬的正確性。