Red de conocimiento informático - Aprendizaje de programación - Preguntas sobre Matlab, ¡pida consejo a expertos!

Preguntas sobre Matlab, ¡pida consejo a expertos!

function, , [1 2; 100 200; -2 -1; 12 12], [1 0 2 3]);

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>

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