我有以下功能:
我必须从这个函数生成2000个随机数,然后进行直方图。 那么我必须确定它们中有多少比P(X> 2)大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)
它给了我以下图片:
我怎么可能告诉我有多少值我有2个以上?
答案 0 :(得分:1)
很简单:
>> Y_greater_than_2 = Y(Y>2);
>> size(Y_greater_than_2)
ans =
1 1998
因此,2000年的1998年价值大于2。
修改强>
如果要查找两个其他值之间的值,例如介于1和4之间,则需要执行以下操作:
>> Y_between = Y(Y>=1 & Y<=4);
>> size(Y_between)
ans =
1 2
答案 1 :(得分:0)
这就是我的想法:
for i=1:2000
x=rand(1);
Y(i) = 3*(log(x))^(6/5);
X(i)=x;
end
plot(X,Y)
U是一个统一的随机变量,你可以从中得到X.所以你需要在MATLAB中使用rand函数。
之后你实施:
size(Y(Y>2),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,lambda
和k
然后检查
bigger_2 = X(X>2);
只返回大于2的值,如果你想要大于2的元素数
No_bigger_2=numel(bigger_2);
答案 3 :(得分:0)
我将假设您所呈现的内容应该是基于反演的随机变量生成算法,并且您需要实值(非复杂)解决方案,因此您省略了否定在对数上签名。如果这些假设是正确的,那么就没有必要模拟得到你的答案。
根据规定的假设,您的公式是互补累积分布函数(CCDF)的倒数。它是互补的,因为较小的U值给出较大的X值,反之亦然。解决U的(校正的)公式。使用Matlab实现中的值:
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。 / p>
如果lambda在激进区内,则进行适当的调整,但导致解决方案的代数类似。除非我弄乱了算术,否则比例将达到55.22%。
如果您仍然需要模拟这一点,那么了解分析答案可以帮助您确认模拟的正确性。