Preguntas sobre Matlab, ¡pida consejo a expertos!
Devuelve una matriz de 10 por 100 con valores en (-2, - 1)
o entre (1, 2). Hay aproximadamente 666 números que son negativos:
suma(R(:)lt;0), suma(n(:)==3)
del intervalo (100, 200) El peso es cero, el intervalo
tmp = [LowerBound UpperBound];
if any(isnan(tmp(:))| isinf(tmp(:)))| | any(isnan (Peso(:))| isinf(Peso(:))),
error(' Los intervalos o pesos no pueden contener NaN o Infs.');
end
Es bueno dar advertencias cuando los intervalos se superponen. Si se superponen, cuando se ordenan los intervalos,
el límite inferior del intervalo es menor que el límite superior del intervalo de peso.
El límite inferior del intervalo es menor que el anterior
El límite superior del intervalo
tmp = sortrows(tmp);
si hay alguno(tmp(2:end,1) lt; tmp(1:end-1,2)),
advertencia([mfilename ':OverlappingIntervals'], ..
'Los intervalos se superponen.' ) ;
end
El truco consiste en juntar todos los intervalos. Peso
Intervalos más grandes Peso
Los intervalos más grandes deberían hacerse más grandes, por lo que es más probable que ocurran. El rango completo
abarca números entre 0 y IntervalEdges(fin):
IntervalSize = (UpperBound - LowerBound);
IntervalEdges = [0 cumsum( Peso; (:) . * IntervalSize(:)].'' ;
si IntervalEdges(end) == 0,
todos los intervalos tienen una longitud y/o peso de cero, entonces no hay nada que hacer
error([ mfilename ':AllZero'],...
'Todos los intervalos tienen una longitud y/o peso de cero.')
p>
end
try
Deje que RAND detecte errores en el parámetro de tamaño
R = rand(N entre 0 y 1 Número aleatorio<); /p>
catch
Replantear error
ERR = lasterror;
ERR.message = strrep(ERR. rand', [mfilename ' (en una llamada a RAND) ']);
rethrow(ERR);
end
si está vacío(R),
Allí No hay nada que hacer, por ejemplo, cuando N contiene 0.
p>
ind = [];
return
end
¿A qué intervalo pertenecen estos números aleatorios?
[ind, ind] = histc(IntervalEdges(end) * R(:), IntervalEdges); #ok, la primera salida no se utiliza
Ahora una nueva serie de números aleatorios entre 0 y 1 Mapa a sus respectivos intervalos. Tenemos que crear una nueva serie, de lo contrario no serán posibles todos los valores de un intervalo
.
R(:) = LowerBound(ind) IntervalSize (ind) .* rand(numel(R),
También devuelve el número de intervalos con la misma forma que R
p>ind = remodelar(ind, size(R));
#depurar gráficos
E = linspace(min(Interval(:)) , max(Interval( . )), 100);
E también devuelve el número de intervalos con la misma forma que R
:)),
);N2 = histc(R (:), E);
figura;
subtrama(2, 1, 1); bar(E, N2, 'histc' 33 histc 35 histc 34 p> p>
subplot(2, 1, 2); plot(sort(R(:)), 'k.')
Esta es una función, llame. directamente después de guardar
gt; [k1, k2]=randinterval([1 10], [1 2; 5 6], [3 1])
k1 =
5,6154 1,7919 1,9218 1,7382 5,1763 5,4057 1,9355 1,9169 5,4103 1,8936
k2 =
2 1 1 1 2 2 1 2 1 1 2 1
k1 =
k2 =
2 1 1 1 1 2 2 1 1 2 1
k2 =
2 1 1 1 1 2 2 1 1 1 2 1