» »

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
 Problem

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]];

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š?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

v čem je problem pri tem pcju?

Oddelek: Pomoč in nasveti
9763 (590) Ribič
»

Januar nov rekordno topel mesec

Oddelek: Novice / Znanost in tehnologija
4815998 (13093) gzibret
»

I7 vs i5

Oddelek: Pomoč in nasveti
141601 (1374) XzupanX
»

NSA izvajala prisluškovanje Američanom že pred 11. septembrom?

Oddelek: Novice / Zasebnost
364794 (3226) Pravnicek

Več podobnih tem