"Szimulációhoz" függvény, ami leírja ezt?
2015-11-30T22:48:42+01:00
2015-12-07T20:55:08+01:00
2022-07-22T02:43:49+02:00
  • Én nem akarok.
    És éppen ez az, hogy a leírtak alapján szerintem ő sem azt szeretne, csak hirtelenjében ezzel tudta megfogni, hogy mit is szeretne.

    Amennyiben pl ez egy játékhoz kell, ahol ő hozza a szabályokat, akkor későbbiekben, ha a visszajelzések alapján módosítani akar a függvényen, úgy elég nehézkesen fog tudni egy megfelelő diff. egyenletet konstruálni magának.
    Mutasd a teljes hozzászólást!
  • Sokkal egyszerűbben megkonstruálhatod, amire szükséged van.
    Kezelhetőbb és egyszerűbb megoldás.

    Akkor is diffegyenletet akarsz megoldani.
    Mutasd a teljes hozzászólást!
  • Elnézést kérek mindenkitől, hogy nem tudtam pontosan megfogalmazni a kérdésemet, és azért is, mert sajnos a gyorsan érkező üzenetek miatt nem láttam ezt az üzenetet. Pedig ha ezt el tudtam volna olvasni, akkor megspórolhattunk volna pár hozzászólást.

    Köszönöm szépen a segítséget, ez rá világított arra, hogy már kicsit elfelejtettem a diff. egyenleteket, és végre saját magam is tapasztalhattam a gyakorlati hasznát eme tudásnak.

    Visszaolvasva igencsak túl bonyolítottam a kérdésemet, és rossz irányból akartam megközelíteni a problémámat.

    Köszönöm szépen még egyszer! :)
    Mutasd a teljes hozzászólást!
  • Számodra semmilyen előnye nem lesz, hogy diff egyenletet oldasz meg.
    Sokkal egyszerűbben megkonstruálhatod, amire szükséged van.
    Kezelhetőbb és egyszerűbb megoldás.
    Mutasd a teljes hozzászólást!
  • Hogy oldottad meg a diff egyenletet?

    Oktatták a' zegyetemen és emlékeztem rá. Ez az egyik mód, a másik meg a számológép (vagy online megfelelője).
    Mutasd a teljes hozzászólást!
  • Igen, ez kellene. Hogy oldottad meg a diff egyenletet? Nekem nem ez jött ki általános megoldásra, sajnos gyorsan felejtek, így már most nem emlékszem, hogy hogyan lehet helyesen megoldani.
    Mutasd a teljes hozzászólást!
  • Igen, ellenőriztem, ez jó megoldása az egyenletnek, amit írtam.
    Mutasd a teljes hozzászólást!
  • De szerintem itt egyáltalán nem fontos a folytonosság, tehát még egyszerűbb, ha az adott pontok között lineárisan közelítesz (egyenesekkel). Nem lesz folytonos a függvényed, de minek kellene, hogy az legyen?
    Így még egyszerűbb a feladatod..

    Ha te kreálod a feladatot, akkor érdemes nem megnehezítened a saját dolgod :)
    Mutasd a teljes hozzászólást!
  • P'(t) = 50 - P(t)
    P(0) = 15

    P(t) = 50 - 35*e^(-t) emlékeim szerint. Ez így néz ki, kb. 6 óra után már beállt 50-re a populáció mérete.
    @op: ez kellene?
    Mutasd a teljes hozzászólást!
  • A kérdezőnek egy másik sokkal egyszerűbb és jobban kontrolálható megoldást javasolnék a diff. egyenlet helyett.

    1. Felveszed néhány pontban a populációd növekményét, ahogy szeretnéd, hogy kinézzen.
    0.-ról indulva tehát.
    24 óra után 15
    48 óra után 35
    ..
    xy óra után 50

    Utána erre a néhány pontra illesztesz egy neked megfelelő fokú polinómot.
    Na és onnantól elég ezzel a polinómmal számolni. Ez nagyon egyszerűen megy (csak idő függő a polinóm, marad az eredeti korábban leírt integrálós módszer)
    Amennyiben nagyobb mint 50-jönne ki, ott pedig telítesz, hogy akkor 50 és pont, nincs többé változás.
    Mutasd a teljes hozzászólást!
  • Én a topicnyitó hozzászólásból indultam ki: Ezt írta eredetileg:

    T - eltelt idő
    X - populáció T idővel korábban
    Y - populáció növekedés óránként T idővel korábban
    Y = 50-X

    Ez nekem egyértelmű:

    populáció növekedés óránként = 50 - populáció,

    vagyis:

    P'(t) = 50 - P(t)

    Mondjuk a későbbi hozzászólásokat nem olvastam részletesen.
    Mutasd a teljes hozzászólást!
  • Az a baj, hogy nem vagyok benne biztos, hogy erre gondolt.
    Amik szerepeltek korábban megoldások, pl. 50-x esetén jó nagy számok jöttek ki, mégsem ellenkezett.
    Holott ebben a formában értelmezve a feladatot 50-nél nem lehet nagyobb, sőt soha el sem éri..
    Mutasd a teljes hozzászólást!
  • Körülményesen írta le, de a leírása alapján neki az lenne ideális, ha a

    P'(t) = 50 - P(t)

    diffegyenletnek kapna egy zárt alakú formuláját, ami tuldajdonképpen konstans időben számolná neki, mintha tetszőlegesen finom iterációval számolgatná a T, X, Y változókkal leírt képleteit.
    Mutasd a teljes hozzászólást!
  • miért nem hangzott még el a differenciálegyenlet kifejezés

    Mert úgy látszik, még nem sikerült megértenünk, hogy a kérdező folytonos vagy diszkrét függvényeket, illetve idő- vagy populációfüggő számítást szeretne...
    Mutasd a teljes hozzászólást!
  • Úgy hogy nem ugyanarról a feladatról beszélsz.

    Amit mi számolunk neked, ott a függvényed, a növekmény (60 - t) az idő függvénye és nem a populációjé.
    Tehát 1 órával később is csak 59 lesz a növekmény és 60 - a populáció.

    Amiről te beszélsz, az egy elsőrendű diff egyenlet
    dx/dt = 60 - x
    Így megoldva a feladatot 37.9 lesz a népesség 1 óra után.
    Mutasd a teljes hozzászólást!
  • Én nem értem, hogy ebben a topicban miért nem hangzott még el a differenciálegyenlet kifejezés.

    Szerintem a topicnyitó feladata egy elsőrendű lineáris differenciálegyenlet (már ha jól emlékszem a definíciókra, csak nagyon halványan dereng):

    P'(t) = 50 - P(t)

    Vagyis van egy függvényünk; P(t), amely az idő függvényében adja meg a populációt. Az a tudásunk, hogy ennek a függvénynek a meredeksége mindig '50 - aktuális érték', a fenti diffegyenlet.

    Most, hogy felírtuk a diffegyenletet, jöhet a megoldása. Gondolom egyszerá, de én már semmire nem emlékszem a diffegyenlet megoldási módszerek közül, örülök hogy egyáltalán fel tudom írni az egyenletet egy egyszerább feladat esetén.

    Viszont az itt elhangzott megoldások nem tűnnek korrektnek, legalábbis nem hangzott el indoklás, hogy miért pont az az integrálfüggvény lenne a megoldás. Olyan, mintha a kollégák a

    P'(t) = 50 - t

    diffegyenletet akarnák megoldani, amit azon kevés diffegyenlet közé tartozik, amit diffegyenletekről való tanulás nélkül is meglehet oldani, de nem ez a feladat szerintem, hanem még egyszer:

    P'(t) = 50 - P(t)

    Vagyis az egyenletben szerepel a P függvény és a deriváltja is.
    Mutasd a teljes hozzászólást!
  • Igen, ezt értem, de még azt nem értem, hogy 1 óra alatt hogy jöhet ki 59.5, amikor vázlatosan leírva:
    1 perc után +1, 1.02 perc után +1 ...... (15-ös népesség): 1.33 perc után +1, 1.36 perc után +1 ....
    30-as népesség: 2 perc után +1, 2.06 perc után +1 ... 59-es népességnél már 60 perc +1 ember. És ezt nem értem, hogyha az 1 perc a fele népességnél már kétszeresére nőtt, akkor hogy lehetséges az, hogy csak fél a különbség. 

    Szóval ha folyamatosan 60 a növekmény, akkor 1 óra alatt 60 lesz. És hogy lehet az, hogy kb 35-40 percnél már megvan a 30-as népesség, ami azt jelenti, hogy utána már csak 2+ percenként nő egyel a népesség. 

    Röviden: Nem értem, hogy hogy lehet ilyen kicsi a különbség a konstans növekmény, és a lineáris, monoton csökkenő növekmény között.
    Mutasd a teljes hozzászólást!
  • Newton–Cotes-formula – Wikipédia <- erre gondoltam, bocs a pongyola megfogalmazásért. A kérdező gondolkodásmódja alapján szerintem diszkrét pontokban (óránként) mindig ismert a növekményfüggvény értéke, ahogy láttam, így ha a lineárisnál összetettebb függvényt szeretne alkalmazni, a trapézmódszer már nem működik, de a téglalapokra osztással egy ciklussal tetszőleges hibahatáron belül meghatározható a keresett érték.

    A kérdező kicsit bajban van a diszkrét és a folytonos függvény fogalmával.
    @op: ha 15 darab valamid van, és óránként 2-vel több lesz, akkor másfél óra múlva folytonos függvénnyel számolva 18 valamid, diszkréttel számolva 17 valamid lesz. Melyiket szeretnéd?
    Mutasd a teljes hozzászólást!
  • Te t0-t számoltad ki és t0->t integráltál, én meg a függvényt betoltam x-en úgy, hogy t=-15-ben legyen x=0, a gondolatmenet igazából ugyanaz, bár a te megoldásod szebb.
    Mutasd a teljes hozzászólást!
  • Az 59.5 úgy jön ki, hogy t=0-ban 60 a növekmény, t=1-ben (60-1) 59. Közte meg lineárisan változik.
    Tehát így jött ki az 59.5-ed.
    Kicsit félre értettem, hogy mit is szeretnél.
    Mutasd a teljes hozzászólást!
  • zárt alakban fel nem írható integrállal rendelkező függvény adja a populációdat, akkor Newton módszerrel ki tudod számolni az integrált tetszőleges precizitással.

    Zárt intervallumon folytonos függvény Riemann integrálható. Célszerű folytonos függvényeket használni, tehát direkt olyat konstruálni és akkor nincs probléma :)

    A Newton módszer az nem numerikus gyökkeresés? Bár sokféle Newton dolog létezik, de számomra az ugrik be.
    Vannak numerikus integrál módszerek, de az, amire én gondolok, mint Newton módszer, az nem az.
    Mutasd a teljes hozzászólást!
  • Magát az elméletét értem, csak azt nem tudom, hogy ha pl 0 kezdőértékkel akarom kiszámolni a 60-x-es növekményt 1 óra alatt, akkor az eredmény ugye 59.5. (0-tól 1-ig integrálom a 60-x-et = 60*1 - 1/2)
    Ha csak konstans 60 lenne az óránkénti növekmény, akkor ugye 1 óra alatt 60 lesz a népességem, mert 1 percenként 1.
    És csak nem tudom felfogni, hogy csak féllel lesz kisebb a népesség a konstans növekményhez képest, amikor már 30-as népességnél is már csak 2 percenként jön 1 ember? Szóval itt minimum 1 perc kiesik. (és minden 30-as népesség feletti +1 ember már 2-nél több percet vesz igénybe)
    És ezért nem tudom felfogni, hogy hogy lehetséges az, hogy csak féllel lesz kevesebb a népeség.
    Mutasd a teljes hozzászólást!
  • Ha a kezdeti populációd 15, a növekedési függvényed már nem 50-x, hanem 35-x, így azzal kell számolni.

    Ezzel most szerintem kicsit megkavartad. A függvényen ne módosítgassunk, a végén még azt hiszi, hogy mindig
    egy új üggvénnyel dolgozik és megpróbálja leprogramozni az integrál kiszámítását.

    A képlet helyesen, ahogy korábban már írtad:

    P(t) = P(t0) + integrál{t0->t}(fx)
    Ahol
    P(t) a populáció a t időpillanatban
    t0 a kezdeti időpont
    fx a függvény

    Tehát a konkrét példára:

    P(35.1726) = 15 + integrál{15 -> 35.1726}( 50-x )
    Mutasd a teljes hozzászólást!
  • Akkor nézzük még egyszer: a növekedési függvényed görbéje alatti terület T0 és T között adja meg a populációd teljes növekedését T0 és T között. Ehhez hozzá kell adnod a kezdeti populációd számosságát és megkapod T-ben a populációd.
    Ha a kezdeti populációd 15, a növekedési függvényed már nem 50-x, hanem 35-x, így azzal kell számolni. (Technikailag ez továbbra is 50-x, csak T=-15 ponton veszi fel a maximumát, nem T=0-ban, ezzel kell korrigálni).

    Integrál 0-tól 20.1726-ig (35-x) dx = 502.574. Ehhez hozzáadod a kezdőpopulációdat (15) és megkapod, hogy T-ben a populációd 517.574 elemű.
    Mutasd a teljes hozzászólást!
  • Rendben, értem.
    Csak a biztonság kedvéért: hogy számoljam ki pontosan az értékét az alábbinak:

    T = 20.1726 órával ezelőtt a populáció 15, és akkor a növekedés  35/óra. Növekedés függvénye legyen a szokásos 50-x.

    integrálja: 50t - t^2/2
    Integrálni szeretném a függvényt addig, amíg nem éri el a standard állapotot, szóval ehhez kéne tudnom, hogy az integrál fgv hol veszi fel a maximális értékét. Ehhez deriválni kell, ami 50-t lesz. Vagyis t = 50.
    Integrálba behelyettesítve ez olyan 1250. Nem hiszem, hogy ez a helyes érték, mert 1 óra alatt,( ha még nem is csökkenne minden populáció növekedéssel a növekedési érték), már akkor is 50 lenne a populáció, és 0 a növekedés.
    Szóval szerintem ez túl nagy érték
    Mutasd a teljes hozzászólást!
  • Az általad felvetett probléma konyha nyelven a kamatos kamat.

    Én nem agodnék a pontoság miatt egy olyan rendszerben, ahol populáció növekedési rátája konstans.
    Mutasd a teljes hozzászólást!
  • Igen, ezt tudom, de ez nem annyira pontos.
    Mutasd a teljes hozzászólást!
  • - Iterálj ennyiszer a képleteddel

    ... helyett a lineáris függvény integráljába behelyettesítheti, és konstans időben kiszámolhatja.

    Példa (ami a vizualizációdon is látszik): x(t0) = 0, y = x - 50 -> a t. időpillanatban (integrál 0-tól t-ig (50 - x) dx = ) 50x - x^2/2 +c.


    @op: a +c jelenleg x(t0)*t, ami 0. Behelyettesítve: ha a növekedési függvényed y=50-x és kezdetben a populációd 0, pl. a t=20 időpillanatban 50*t - t^2/2 + x(t0)*t = 50*20 - 20^2/2 + 0*20 = 800 elemű lesz a populációd. Az is látható, hogy t=50-nél a populációd értéke eléri a maximumot (2500), utána pedig csökkenni kezd (ha nem veszel fel kivételt erre az esetre a kódodban és a növekmény pl. t=70-nél -20, akkor ez így is van rendjén).
    Mutasd a teljes hozzászólást!
  • Mert a trapéz (jelen esetben trapéz) területe adja a populációt.

    Vizualizálva a csatolt képen
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Ha másodperces bontást akarsz akkor ne órában add meg az összefüggést, pusztán átláthatóság céljából.
    Ha ezzel megvagy:
     - Tárold le, hogy mikor látta utoljára játékos a populációt
     - Kérd le az időt
       - (Mentsd le az időt, kelleni fog a következő számításnál)
     - Vond ki egymásból
     - Iterálj ennyiszer a képleteddel
     - Opcionális: szakitsd meg az iterációkat amennyiben a rendszered stabil

    Üdv: B
    Mutasd a teljes hozzászólást!
abcd