主要内容

이번역최신을있지않습니다않습니다。최신내용으로보려면를하십시오하십시오하십시오。

난수생성제어

이예제에서는RNG함수를난수을제어하는을줍니다줍니다줍니다。

matlab에서(의사)난수는兰德함수,兰迪함수,兰德함수로생성합니다。다른많은함수를호출하는데,이세는기본인구성요소입니다입니다。이세함수모두RNG를사용할있는하나의난수에종속됩니다됩니다。

참고참고,matlab에서“난수”는는할수는수는아니며아니며,결정론결정론(确定性算法)에에에생성생성된다는된다는점유의합니다합니다합니다합니다。이알고리즘을모르는에게는해당값독립독립인인난수열인것처럼보이도록매우되었으며,다양한적검정통과하였습니다하였습니다。여기에서함수사용하면결정론장점을하여을수행할수있습니다있습니다。

  • 난수를하는을하고동일한를얻을수있음

  • 반복된수행할매번다른난수사용점점보장보장됨

또한개별계산의바른지증명하는데데데데데데의장점을활용할수도있습니다있습니다。

“다시시작”

matlab을다시해새로운새로운matlab세션세션兰德,,,,兰迪,,,,兰德중하나를시켜출력값을해보면일련의숫자가숫자가숫자가숫자가숫자가재시작재시작재시작재시작과함께동일하게다시다시반환반환되는것것것을을알수수수。matlab을을다시하지않고생성기상태를바꾸어생성생성을처음부터부터다시시작시작하도록설정할수있습니다있습니다있습니다。이러한기능포함계산을반복동일한를경우유용할수있습니다있습니다。

RNG를사용간단방법으로난수를설정으로수있습니다있습니다있습니다。

RNG默认兰德%返回与启动时相同的值
ANS = 0.8147

matlab시작의의“디폴트”설정은무엇,RNG默认值는어떤을요요?입력값없이RNG를호출알고리즘메르센트위스터이며시드값은은은은임임을알있습니다있습니다있습니다。

RNG
ans =带有字段的结构:类型:'Twister'种子:0状态:[625x1 UINT32]

아래에서는状态필드를위의출력을을하여하여,matlab에서에서생성되는방식을을제어하고변경변경하는방법을자세히살펴보겠습니다살펴보겠습니다살펴보겠습니다살펴보겠습니다。여기서는,위의값을현재종류의가가兰德,,,,兰迪,,,,兰德에사용알있습니다있습니다。

비반복성

兰德,,,,兰迪,,,,兰德중하나할마다이함수들공유난수생성기새값을가져옵니다가져옵니다。연속된통계으로이라이라있습니다있습니다있습니다。그러나위언급이은은은을을시작때초기화되고동일동일한숫자를합니다합니다합니다。분명히말,동일한“난수”를하는은적으로이라수없습니다없습니다。Matlab세션세션세션에서된계산통계적으로된된된것처럼결합해야에는설정을디폴트설정는안됩니다됩니다。

새matlab세션세션한난수가되지하는가지간단한방법은난수생성기에대해대해다른시드값값선택선택선택하는것것입니다。이를간단히하려면RNG를사용시간기반으로시드을됩니다됩니다됩니다。

RNG洗牌兰德
ANS = 0.8975

“洗牌”을사용마다의시드값다르게됩니다됩니다됩니다。입력값없이RNG를호출사용시드값을할있습니다있습니다있습니다。

RNG
ans =带有字段的结构:类型:'Twister'种子:196721948状态:[625x1 UINT32]
RNG洗牌%每次都会产生不同的种子RNG
ans =带有字段的结构:类型:'Twister'种子:196721955状态:[625x1 UINT32]
兰德
ANS = 0.0316

“洗牌”을사용생성기시드값을다시할수있습니다있습니다。matlab에서“진정한”임의성얻기위해'shuffle'shuffle'을하는이편리하고유용한방법방법고생각할수도있습니다있습니다。그러나대부분의경우“洗牌”은전혀할필요가없습니다。현재시간기반으로값을선택하면兰德,,,,兰迪,,,,兰德에서얻는의적향상향상되지않으며않으며않으며않으며않으며의의의의의의임의성이이더높아지지도높아지지도높아지지도matlab을할마다생성기시드하거나하거나하거나하거나하거나,난수난수하는일부일부대규모대규모계산계산실행하기하기전전에에생성기생성기의시드시드시드값값을을다시다시다시지정괜찮지만괜찮지만것것것하면난수적에영향미칠수실제로는않습니다않습니다않습니다。

“洗牌”을사용되는는일련의이동일반복않도록하는것뿐입니다입니다。이기능로하거나도움이대개의경우하지않습니다않습니다않습니다。“洗牌”을사용경우,나중에을반복할있도록있도록RNG가생성한을해야할수도에해야합니다합니다합니다。이방법대해서아래살펴보겠습니다살펴보겠습니다。

반복성과비에대한세부제어제어

지금까지생성기디폴트설정재설정현재에따라생성된시드값값으로이이생성기의의시드시드값을을을다시다시다시다시지정지정지정하는하는하는살펴보았습니다살펴보았습니다살펴보았습니다살펴보았습니다。또한RNG를사용생성기시드를특정값으로지정수있음을확인했습니다했습니다。

동일한을번사용같은계산반복할있습니다있습니다있습니다。예를,다음다음를번할경우,

RNG(1)%种子是任何非负整数<2^32x = randn(1,5)
x =1×5-0.6490 1.1812 -0.7585 -1.1096 -0.8456
rng(1)x = randn(1,5)
x =1×5-0.6490 1.1812 -0.7585 -1.1096 -0.8456

...정확히동일결과됩니다됩니다。이작업이한상황의는는X를지운에만들어서,이후이후이러한값으로으로X에종속의를다시확인경우해당됩니다됩니다됩니다。

반면,각기다른시드값하여한계산반복되지해야할있습니다있습니다있습니다。예를,한matlab세션세션는다음를하고하고하고

rng(2)x2 = sum(randn(50,1000),1);%1000个随机步行试验

다른세션는다음를실행하는,

rng(3)x3 = sum(randn(50,1000),1);

두결과할있으며있으며있으며있으며동일결과가번반복되지않음을분명분명하게확인할할있습니다있습니다있습니다있습니다。

x = [x2 x3];

“洗牌”과마찬가지,matlab의의생성기의값다시지정경우이후의의兰德,,,,兰迪,,,,兰德의모든에을주의주의합니다합니다합니다。반복성이나경우를제외하고하고하고하고는생성기값값을다시지정하지않고않고단순히단순히임의임의값을생성생성생성하는하는하는것이좋습니다좋습니다。생성기시드다시해야경우대개명령이나코드내의눈에잘띄는띄는지점에서수행수행것것이이가장좋습니다좋습니다。

생성기유형선택

위에서대로생성기시드값지정수있을뿐뿐아니라아니라아니라아니라아니라아니라아니라아니라할난수난수난수생성기생성기의유형유형선택할할수도수도수도있습니다。생성기유형각기난수열생성합니다합니다。예를의적속성에특정을선택수도있습니다있습니다있습니다。또는다른디폴트생성기를사용한이전버전의의의에서에서결과를다시산출해야하는상황상황이발생발생수도있습니다있습니다있습니다。

생성기유형하는다른일반적는는는는는는임임의임임의입력데이터를를생성생성하는하는유효성검사검사테스트를작성작성할할때때테스트에서예측가능가능한항상항상동일동일동일동일동일동일동일동일동일동일동일동일동일하게하게입력데이터를전에RNG를시드함께하면난수의시드이다시됩니다됩니다됩니다。그러나특정이유인해유형이변경된다면兰德,,,,兰迪,,,,兰德의출력해당값으로예상값달라집니다달라집니다달라집니다。따라서100%확실한을위해유형을수도있습니다있습니다있습니다있습니다。

예를,다음다음을할경우경우

rng(0,'twister'

兰德,,,,兰迪,,,,兰德은0으로으로을지정한에(Mersenne Twister)생성기생성기을합니다합니다。

다음과같이“ combrecursive'를사용하면

rng(0,“ combrecursive'

결합다중적(组合多个递归)생성기알고리즘이됩니다。이알고리즘트위스터에서지원않는일부기능을합니다합니다합니다。

다음명령을하면

rng(0,'v4'

Matlab 4.0에서값사용생성기됩니다됩니다됩니다됩니다됩니다됩니다됩니다。

또한다음사용난수생성기를설정되돌릴수도있습니다있습니다。

RNG默认

matlab릴리스릴리스디폴트생성기설정이바뀔있으므로장기관점에서보면보면'默认'를사용에예측가능결과를못할있습니다있습니다있습니다。'默认'를사용생성기간단히초기화할수있지만있지만있지만것과과가까운가까운결과를얻으려면얻으려면생성기생성기유형유형과과시드값값값값을을을지정지정지정것것좋습니다좋습니다좋습니다。

반면,대화형방식작업수행하고요구경우에는시드과함께함께RNG를호출이간단하며대부분경우합니다합니다합니다。

난수생성기설정과복원

입력값없이RNG를호출에서설명한두가지정보정보정보정보과생성기에마지막으로으로지정된된값값정수를를포함포함포함하는하는하는필드로필드로구성구성된된스칼라구조체가

s = rng
s =带有字段的结构:类型:'Twister'种子:0状态:[625x1 UINT32]

세번째필드인状态에는생성기상태벡터이됩니다됩니다됩니다。이상태가난수열에서값생성하기위해적으로유지하는정보입니다입니다。兰德,,,,兰迪,,,,兰德중하나할마다이함수들이생성기의내부업데이트됩니다됩니다됩니다。따라서RNG에서반환정보나타내는상태에는가캡처된시점부터일련일련의난수난수를반복반복하는하는데필요필요필요한한한한정보정보정보가가가있습니다있습니다있습니다있습니다。

이출력을정보를수있는반면,RNG는설정를나타내는구조체도입력값으로받으므로포함해해당을저장후에복원하여계산을반복반복수수있습니다。설정에을시키면나중얻을결과예측할있습니다있습니다있습니다。여기“나중”라는라는표현은현재현재현재세션세션기준바로다음순간부터몇후후후후후후후후후후후후후후후후후후후후후후후후후후후순간순간다음다음다음다음다음다음다음즉,난수열난수열설정저장시점언제결과를할수있습니다있습니다。예를다음과같습니다。

x1 = randn(10,10);%在随机数序列中前进s = rng;%保存设置此时x2 = randn(1,5)
x2 =1×50.8404 -0.8880 0.1001 -0.5445 0.3035
x3 = randn(5,5);%在随机数序列中前进rng(s);%将发电机返回到保存状态x2 = randn(1,5)%重复相同的数字
x2 =1×50.8404 -0.8880 0.1001 -0.5445 0.3035

시드값설정엉성하게초기화되지만되지만되지만되지만나타내는를사용하여생성기상태상태를저장저장난수열난수열난수열어느부분이든할있습니다있습니다。

설정정보내는생성기상태를데가장일반사용됩니다됩니다됩니다。그러나구조체뿐생성기유형시드도되어있​​으므로생성기유형을일시적적으로전환전환하는하는데데에도편리편리하게하게하게하게사용사용사용수있습니다있습니다있습니다。Matlab 5.0의의생성기중을해야할경우현재설정을저장하는동시동시에이전이전생성기생성기생성기를를를사용

上settings = rng(0,'v5uniform'
前settings =带有字段的结构:类型:'Twister'种子:0状态:[625x1 UINT32]

나중에설정복원수있습니다있습니다。

RNG(前启)

설정값주는에있는내용은해서는됩니다됩니다됩니다。특히,상태벡터생성는안,생성기생성기에되도록형식을구성해서됩니다됩니다됩니다。

더간단유연한코드작성

RNG를사용생성기을몰라도다음수행수있습니다있습니다있습니다。

  • 난수생성기시드다시지정

  • 난수생성기설정후복원

또한난수디폴트을모르는상태난수를디폴트으로되돌릴수있습니다있습니다。상황에따라유형을지정하고자하는경우가있을수있는데RNG를사용생성기유형을할할필요가없습니다。

이생성기지정하는과정을뛸되면되면되면되면되면되면있게코드는생성기를사용해야해야해야하는하는하는상황에에자동으로적응되고되고새새새디폴트디폴트난수난수생성기생성기생성기유형유형유형의의의의향상향상된된속성속성속성을을을자동자동

RNGRandstream

matlab에서RNG를사용일반인요건에난수를하여하게제어할수있습니다있습니다。그러나여러난수과병렬생성이포함더복잡한상황에서는그에적합적합한한더욱복잡한복잡한툴이필요필요합니다합니다합니다。Randstream클래스는적합툴툴이며이며이며이며를사용하면생성생성을가장효과효과적으로으로제어할할있습니다있습니다있습니다있습니다。이두상호적활용활용있습니다있습니다있습니다。Randstream의유연성이기반이되면RNG는훨씬하고한구문제공합니다합니다。