菜鸟求助:matlab如何取某一范围的随机数(要求可以取到端点)
发布网友
发布时间:2022-05-07 20:47
我来回答
共3个回答
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000
热心网友
时间:2023-11-11 08:19
简单,把10改成11就可以了~R=-5+11*rand()
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000
热心网友
时间:2023-11-11 08:19
简单,把10改成11就可以了~R=-5+11*rand()
热心网友
时间:2023-11-11 08:19
简单,把10改成11就可以了~R=-5+11*rand()
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000
热心网友
时间:2023-11-11 08:19
简单,把10改成11就可以了~R=-5+11*rand()
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000
热心网友
时间:2023-11-11 08:19
简单,把10改成11就可以了~R=-5+11*rand()
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000
热心网友
时间:2023-11-11 08:19
简单,把10改成11就可以了~R=-5+11*rand()
热心网友
时间:2023-11-11 08:18
rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。
如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。
但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)
想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。
R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五
热心网友
时间:2023-11-11 08:18
x=-pi:2*pi/10000:pi;%在[-pi,pi]中取10001个点(包括2端点),这个数值取决于你所要求的随机精度
res=x(floor(rand(1)*10001)+1)
%在这10001个点中随机取一个点
如果精度为0.001,[0,180]直接在(0,180001)范围内向下取整再除以1000就行了
res=floor(rand(1)*180001)/1000