Forum » Šola » Simultano reševanje Diff enačb problem
Simultano reševanje Diff enačb problem
WarLord11 ::
V Wolfram Mathematici sem spisal kodo za reševanje dveh 2 drugega reda in ene prveg, pa vedarl mi zadeva neki noče delat. Slučajno kdo vidi problem
Koda:
Clear[cO2g,cO2l,cHAl]
{cO2g[z_],cO2l[z_],cHAl[z_]}={cO2g[z],cO2l[z],cHAl[z]}/.NDSolve[{
\[Phi]g cO2g'[z]+ kLaL[\[Phi]v[[i]],\[Rho]l,DO2,\[Mu]L] Ar (cO2g[z]/HO2plus-cO2l[z])==0,
DL[\[Phi]v[[i]]] Ar cO2l''[z]-\[Phi]v[[i]] cO2l'[z]+ kLaL[\[Phi]v[[i]],\[Rho]l,DO2,\[Mu]L] Ar (cO2g[z]/HO2plus-cO2l[z])-ksas[\[Phi]v[[i]],\[Rho]l,DO2,\[Mu]L] Ar( cO2l[z]-co2sss[cHAl[z],c02v[z]])==0,
DL[\[Phi]v[[i]]] Ar cHAl''[z]-\[Phi]v[[i]] cHAl'[z]-ksas[\[Phi]v[[i]],\[Rho]l,DHA,\[Mu]L] Ar (cHAl[z]-cHAsss[cHAl[z],c02l[z]])==0,
(*Robni pogoji*)
cO2g[0]==cg0,
cO2l'[0]==1/(-DL[\[Phi]v[[i]]] Ar)*\[Phi]v[[i]](cO2lv-cO2l[z]),
cHAl'[0]==1/(-DL[\[Phi]v[[i]]] Ar )*\[Phi]v[[i]](cHAv-cHAl[z]),
cO2l'[H]==0,
cHAl'[H]==0
},{cO2g,cO2l,cHAl},{z,0,H}][[1]];,0,H\}\right][[1]];\right)1]];
Koda:
Clear[cO2g,cO2l,cHAl]
{cO2g[z_],cO2l[z_],cHAl[z_]}={cO2g[z],cO2l[z],cHAl[z]}/.NDSolve[{
\[Phi]g cO2g'[z]+ kLaL[\[Phi]v[[i]],\[Rho]l,DO2,\[Mu]L] Ar (cO2g[z]/HO2plus-cO2l[z])==0,
DL[\[Phi]v[[i]]] Ar cO2l''[z]-\[Phi]v[[i]] cO2l'[z]+ kLaL[\[Phi]v[[i]],\[Rho]l,DO2,\[Mu]L] Ar (cO2g[z]/HO2plus-cO2l[z])-ksas[\[Phi]v[[i]],\[Rho]l,DO2,\[Mu]L] Ar( cO2l[z]-co2sss[cHAl[z],c02v[z]])==0,
DL[\[Phi]v[[i]]] Ar cHAl''[z]-\[Phi]v[[i]] cHAl'[z]-ksas[\[Phi]v[[i]],\[Rho]l,DHA,\[Mu]L] Ar (cHAl[z]-cHAsss[cHAl[z],c02l[z]])==0,
(*Robni pogoji*)
cO2g[0]==cg0,
cO2l'[0]==1/(-DL[\[Phi]v[[i]]] Ar)*\[Phi]v[[i]](cO2lv-cO2l[z]),
cHAl'[0]==1/(-DL[\[Phi]v[[i]]] Ar )*\[Phi]v[[i]](cHAv-cHAl[z]),
cO2l'[H]==0,
cHAl'[H]==0
},{cO2g,cO2l,cHAl},{z,0,H}][[1]];,0,H\}\right][[1]];\right)1]];
- spremenil: WarLord11 ()
one too many ::
Kaj ne dela? Vrže ven error, računa počasi, kaj?
- Pogost problem je tole: http://mathematica.stackexchange.com/qu...
- Po mojih izkušnjah lahko vstavljanje funkcij v funkcije v... vzame veliko časa, ker program to dela na vsakem koraku. To preprečiš z ukazom Evaluate[]. Splača se ti izraze prej izračunat in poeonstavit s FullSimplify[]. Npr. to je problem pri *Solve[] in Plot[]-ih ter predvsem pri analitičnem računanju.
Če je problem v časovni zahtevnosti, poskusi čim več funkcij prevesti (v C, če imaš C compiler in verzijo >= 8), glej Compile[]. Ampak to se pozna samo pri dolgih izrazih, pri Sin[], seveda ne boš profitiral. Ravno tako pri NDSolve[]. Vse te metode so v bistvu že prevedene.
Reševanje je lahko zamudno, zaradi same narave problema. Imaš več stopenj med začetnim in končnim produktom? Se katera izmed faz spreminja zelo hitro? Potem imaš lahko tog sistem. Pobrskaj po Help-u (Mathematica ima odličen Help, le težko je najti prave stvari). Npr. tole. Včasih pomagajo tudi implicitne metode.
Grške črke so sicer super, ampak sam sem že imel nekaj težav z njimi.
Funkcijo imaš definirano kot f[x_] = ..., ponavadi se jo definira kot f[x_]:= (razlaga).
Zapisano imaš tudi f[x] = f[x]/.NDSolve[...f[x]...]. Daj raje levi f[x] v fSol[x] ali kaj takega. Ne vem, v Mathematici to verjetno deluje (saj imaš Clear[...] v isti celici? Hm, a je kaka razlika med Clear in ClearAll?), ampak v drugih programskih jezikih pa pogosto ne. Slaba praksa!
Pa tudi spremenil boš nek pogoj, zagnal še enkrat NdSolve in si takoj že zbrisal rešitev. Kaj če si vmes premisliš?
- Pogost problem je tole: http://mathematica.stackexchange.com/qu...
- Po mojih izkušnjah lahko vstavljanje funkcij v funkcije v... vzame veliko časa, ker program to dela na vsakem koraku. To preprečiš z ukazom Evaluate[]. Splača se ti izraze prej izračunat in poeonstavit s FullSimplify[]. Npr. to je problem pri *Solve[] in Plot[]-ih ter predvsem pri analitičnem računanju.
Če je problem v časovni zahtevnosti, poskusi čim več funkcij prevesti (v C, če imaš C compiler in verzijo >= 8), glej Compile[]. Ampak to se pozna samo pri dolgih izrazih, pri Sin[], seveda ne boš profitiral. Ravno tako pri NDSolve[]. Vse te metode so v bistvu že prevedene.
Reševanje je lahko zamudno, zaradi same narave problema. Imaš več stopenj med začetnim in končnim produktom? Se katera izmed faz spreminja zelo hitro? Potem imaš lahko tog sistem. Pobrskaj po Help-u (Mathematica ima odličen Help, le težko je najti prave stvari). Npr. tole. Včasih pomagajo tudi implicitne metode.
Grške črke so sicer super, ampak sam sem že imel nekaj težav z njimi.
Funkcijo imaš definirano kot f[x_] = ..., ponavadi se jo definira kot f[x_]:= (razlaga).
Zapisano imaš tudi f[x] = f[x]/.NDSolve[...f[x]...]. Daj raje levi f[x] v fSol[x] ali kaj takega. Ne vem, v Mathematici to verjetno deluje (saj imaš Clear[...] v isti celici? Hm, a je kaka razlika med Clear in ClearAll?), ampak v drugih programskih jezikih pa pogosto ne. Slaba praksa!
Pa tudi spremenil boš nek pogoj, zagnal še enkrat NdSolve in si takoj že zbrisal rešitev. Kaj če si vmes premisliš?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | v čem je problem pri tem pcju?Oddelek: Pomoč in nasveti | 763 (590) | Ribič |
» | Januar nov rekordno topel mesecOddelek: Novice / Znanost in tehnologija | 15998 (13093) | gzibret |
» | I7 vs i5Oddelek: Pomoč in nasveti | 1601 (1374) | XzupanX |
» | NSA izvajala prisluškovanje Američanom že pred 11. septembrom?Oddelek: Novice / Zasebnost | 4794 (3226) | Pravnicek |