Two questions about my code: 1.) Estimating random number with and without rng ('shuffle'); 2.) storaging results
Ältere Kommentare anzeigen
I want to estimate random numbers with the weibull distribution.
1.) "wblrnd" generates random numbers of my function "custompdf". So do "rng ('shuffle')".
In "results" I can see my results. When I run my code(without changing it), it displays random numbers.
When I I delete the line with rng ('shuffle'), it also display random numbers.
So whats the difference?
2.) Someone helped me to storage my code for a better overview and for flexibilty of "b" and "T" (In case I change them)
Its the line beginning with "results". It works really nice, but I dont really understand the line. Can someone explain what the line is doing? I am really a noob in Matlab.
clear all;
n = 100;
t0 = 0.5;
b = 1:3;
T = 1:3;
rng ('shuffle')
for v_T= T
for v_b= b
data(:,v_b,v_T) = wblrnd(v_b,v_T, [n,1]) + t0;
start = [1 0 0];
custompdf = @(x,a,b,c) (x>c).*(b/(a-c)).*(((x-c)/(a-c)).^(b-1)).*exp(-((x-c)/(a-c)).^b);
opt = statset('MaxIter',1e3,'MaxFunEvals',1e3,'FunValCheck','off');
params(v_b,1:3,v_T) = mle(data(:,v_b,v_T),'pdf',custompdf,'start',start,'Options',opt,'LowerBound',[0 0 0],'UpperBound',[Inf Inf min(data(:,v_b,v_T))])
params(v_b,4,v_T) = v_b;
params(v_b,5,v_T) = v_T;
params(v_b,6,v_T) = t0;
params(v_b,7,v_T) = n;
end
results((v_T-1)*length(b)+1:v_T*length(b), 1:size(params, 2)) = params(:,:,v_T);
end
6 Kommentare
David Hill
am 3 Sep. 2020
Without rng('shuffle'), everytime you start MATLAB you will get the same randomn number stream.
Mustafa Vural
am 3 Sep. 2020
David Hill
am 3 Sep. 2020
That was my understanding. This might be helpful to you: https://www.mathworks.com/help/matlab/ref/randstream.html?s_tid=srchtitle
Mustafa Vural
am 3 Sep. 2020
Dana
am 3 Sep. 2020
Here's what I did:
- Close all open instances of Matlab.
- Open Matlab.
- Type rand, which returns 0.81472.
- Close Matlab.
- Open Matlab again.
- Type rand, which again returns 0.81472.
So at least for my version of Matlab, without using rng('shuffle') I get the same random number draw each time I re-open Matlab. Try the exact above experiment and tell me whether you get a different number on the second rand call. If so, just enter rng and post the output, and maybe we can diagnose the problem. For me, that looks like:
>> rng
ans =
struct with fields:
Type: 'twister'
Seed: 0
State: [625×1 uint32]
Mustafa Vural
am 3 Sep. 2020
Akzeptierte Antwort
Weitere Antworten (1)
Mario Malic
am 3 Sep. 2020
Bearbeitet: Mario Malic
am 3 Sep. 2020
1 Stimme
I agree with Dana and David. Here's my contribution to the rand as well.
>> rand
ans =
0.8147
About the second question: params is a 3D array, and it assigns values from v_T "page" to the results array.
2 Kommentare
Mustafa Vural
am 3 Sep. 2020
Mario Malic
am 3 Sep. 2020
For first question, checking the documentation you will get an answer faster.
1:size(params, 2)) - numbers from 1 to size of params in column direction.:
%
(v_T-1)*length(b)+1:v_T*length(b), 1:size(params, 2)
For v_T == 1 it will assign values to indices 1:3
For v_T == 2 it will assign values to indices 4:6 and so on.
There is probably a better way to rewrite this to look more understandable.
Kategorien
Mehr zu Random Number Generation finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!