Gå til innhold

Kaotisk ligning/funksjon med random y-verdi


Anbefalte innlegg

Hey, jeg leter fælt etter en matematisk funksjon med disse trekkene:

  • Kaotisk: Inneholder en konstant som er ekstremt sensitiv (chaos theory / butterfly effect)
  • Tilfeldig: Gir en tilsynelatende tilfeldig y-verdi for hver x-verdi.

 

Funksjonen skal altså kunne brukes som en slags "random number generator", hvor konstanten er et seed, og man får et tilfeldig tall for hver x-verdi.

 

Eksempel:

k=123

f(x)=blablabla*k

f(1)=4

f(2)=11

f(3)=10

 

 

Edit: Et alternativt spørsmål, siden det over er ganske merkelig:

Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed. Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt.

Endret av Joagamer
Lenke til kommentar
Videoannonse
Annonse

Hva er galt med å bruke randomize(k); echo rand(); echo rand();

 

Nå vil syntaksen variere fra programmeringsspråk til programmeringsspråk men felles for de fleste (alle) har en generator for tilfeldige tall som ikke genererer tilfeldige tall men som alle trenger en startverdi. Det som gjør generatoren tilsynelatende tilfeldig er at startverdien beregnes ut fra flere variabler, deriblandt klokken.

 

For mer informasjon om hvordan dette virker i .net sjekk http://www.techrepublic.com/article/working-with-random-numbers-in-net-applications/5663283

 

Hvis du er mer interessert i funksjonen bak denne funksjonaliteten så er wikipedia et fint sted å begynne.

Lenke til kommentar

Hva er galt med å bruke randomize(k); echo rand(); echo rand();

 

Nå vil syntaksen variere fra programmeringsspråk til programmeringsspråk men felles for de fleste (alle) har en generator for tilfeldige tall som ikke genererer tilfeldige tall men som alle trenger en startverdi. Det som gjør generatoren tilsynelatende tilfeldig er at startverdien beregnes ut fra flere variabler, deriblandt klokken.

 

For mer informasjon om hvordan dette virker i .net sjekk http://www.techrepublic.com/article/working-with-random-numbers-in-net-applications/5663283

 

Hvis du er mer interessert i funksjonen bak denne funksjonaliteten så er wikipedia et fint sted å begynne.

 

Kan ikke bruke rand() pga. jeg trenger en serie med tall for hvert seed. rand(seed) gir bare ett tall.

Lenke til kommentar

  • Kaotisk: Inneholder en konstant som er ekstremt sensitiv (chaos theory / butterfly effect)
  • Tilfeldig: Gir en tilsynelatende tilfeldig y-verdi for hver x-verdi.

 

Funksjonen skal altså kunne brukes som en slags "random number generator", hvor konstanten er et seed, og man får et tilfeldig tall for hver x-verdi.

Her er den orginale pseudo-random-generatoren i C (kopert fra boken The C Programming Language):

 

unsigned long int next = 1;

/* returns random int between 0..32767 */
int rand(void)
{
   next = next * 1103515245 + 12345;
   return (unsigned int)(next/65536) % 32768;
}

/* set seed for rand */
void srand(unsigned int seed)
{
   next = seed;
}

Endret av torbjørn marø
Lenke til kommentar

unsigned long int next = 1;

/* returns random int between 0..32767 */
int rand(void)
{
   next = next * 1103515245 + 12345;
   return (unsigned int)(next/65536) % 32768;
}

/* set seed for rand */
void srand(unsigned int seed)
{
   next = seed;
}

Takk. :) Men det er ikke akkurat det jeg trenger.

 

Edit: Uansett kjekt å ha ihvertfall.

Edit2: skrev om tenkefeil..

Endret av Joagamer
Lenke til kommentar

Jeg kan prøve å forklare på en litt annen måte; Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed.

Edit: Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt.

Endret av Joagamer
Lenke til kommentar

Jeg kan prøve å forklare på en litt annen måte; Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed.

Edit: Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt.

 

Nå vet jeg ikke hvordan seed-funksjonen til implementasjonen/plattformen din er... Så hvis den ikke fungerer slik du ønsker, kan du ikke bruke en kryptografisk hash-funksjon, f.eks. MD5 eller SHA1, på seeden, og konvertere resultatet til en tallstrøm?

Lenke til kommentar

Jeg kan prøve å forklare på en litt annen måte; Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed.

Edit: Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt.

 

Nå vet jeg ikke hvordan seed-funksjonen til implementasjonen/plattformen din er... Så hvis den ikke fungerer slik du ønsker, kan du ikke bruke en kryptografisk hash-funksjon, f.eks. MD5 eller SHA1, på seeden, og konvertere resultatet til en tallstrøm?

Det blir vel ikke en uendelig tallrekke? MD5 har f.eks. en lengde på 32. Et eksempel på uendelig er en sinus-bølgefunksjon, men den har like verdier hele veien, og er heller ikke kaotisk. Er ikke lett det her. :ermm:

Lenke til kommentar

 int seed = 10000;
 random generator = new random(seed);
 for (int cnt = 0; cnt < 10; ++cnt)
 {
   echo generator.next()
 }

 random generator2 = new random(seed+1);
 for (int cnt = 0; cnt < 10; ++cnt)
 {
   echo generator2.next()
 }

 

Cluet er at en seed-verdi alltid gir den samme rekken med tilfeldige tall. En liten endring i seed-verdien vil endre utfallet av random.

 

Se også http://msdn.microsoft.com/en-us/library/system.random.aspx

 

...og koden er ikke testet men det skal ikke være langt unna sannheten.

 

...når jeg tenker meg om så er vel ikke echo man vil bruke men printf eller noe i C#. :)

Lenke til kommentar
  • 1 måned senere...

 int seed = 10000;
 random generator = new random(seed);
 for (int cnt = 0; cnt < 10; ++cnt)
 {
   echo generator.next()
 }

 random generator2 = new random(seed+1);
 for (int cnt = 0; cnt < 10; ++cnt)
 {
   echo generator2.next()
 }

 

Cluet er at en seed-verdi alltid gir den samme rekken med tilfeldige tall. En liten endring i seed-verdien vil endre utfallet av random.

 

Se også http://msdn.microsoft.com/en-us/library/system.random.aspx

 

...og koden er ikke testet men det skal ikke være langt unna sannheten.

 

...når jeg tenker meg om så er vel ikke echo man vil bruke men printf eller noe i C#. :)

Ja, det skjønner jeg. Men mitt clue er at jeg trenger en uendelig random tallrekke for hvert seed, ikke bare ett tall. :)

Lenke til kommentar

...og det får du så lenge du ikke destruerer de generatorene som er opprettet. Så lenge generatorene lever så vil de produsere sin fulle psudotilfeldige rekke for sitt seed.

 

Edit for å klargjøre:

 

 int seed = 10000;
 random generator = new random(seed);
 random generator2 = new random(seed+1);

 for (int cnt = 0; cnt < 10; ++cnt)
 {
   echo generator.next()
   echo generator2.next()
 }

Her er samme koden bare med to randomgeneratorer som hver generererer 10 tall. Hvis du øker fra 10 til uendelig (while(true)) så vil du få en uendelig rekke fra begge generatorene.

Endret av BlueEAGLE
Lenke til kommentar

...og det får du så lenge du ikke destruerer de generatorene som er opprettet. Så lenge generatorene lever så vil de produsere sin fulle psudotilfeldige rekke for sitt seed.

 

Edit for å klargjøre:

 

 int seed = 10000;
 random generator = new random(seed);
 random generator2 = new random(seed+1);

 for (int cnt = 0; cnt < 10; ++cnt)
 {
   echo generator.next()
   echo generator2.next()
 }

Her er samme koden bare med to randomgeneratorer som hver generererer 10 tall. Hvis du øker fra 10 til uendelig (while(true)) så vil du få en uendelig rekke fra begge generatorene.

Ah, jeg beklager. Men kan man gjøre det samme i PHP?

Lenke til kommentar

PHP har kun en tilgjengelig generator for psudotilfeldige tall. For å gjøre noe tilsvarende i PHP så må du lage din egen psudorandomgenerator i PHP som en klasse hvor konstruktøren tar et seed og funksjonen bruker dette seedet til å lage en gitt rekke.

 

For å få dette til så må du lese deg opp på måter å generere tilfeldige tall i linker postet over og skrive dette som en PHP-klasse.

Lenke til kommentar

PHP har kun en tilgjengelig generator for psudotilfeldige tall. For å gjøre noe tilsvarende i PHP så må du lage din egen psudorandomgenerator i PHP som en klasse hvor konstruktøren tar et seed og funksjonen bruker dette seedet til å lage en gitt rekke.

 

For å få dette til så må du lese deg opp på måter å generere tilfeldige tall i linker postet over og skrive dette som en PHP-klasse.

Challenge accepted. :) tyty!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...