<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">
Den här frågan har redan svar här :
Kommentarer
- @belisarius …! # @ * (& @ # ^%
- @ rm-rf Behöver du lite hjälp?
- Specifikt behöver du svaret Använda resultatet av funktioner som returnerar ersättningsregler i den länkade frågan.
- Se även: mathematica.stackexchange.com/q/9035/5
Svar
Du gav inte numeriska värden för några av parametrarna, så jag gjorde några. För vissa kanske du inte får lösningar eller får komplexa lösningar, så det är något du kan titta på eftersom jag inte känner till fysik s av problemet.
Clear[x, t, b, varx, m, v0x]; y[t_] = x[t] /. First@DSolve[{b varx^2 - 2 b varx x"[t] + b x"[t]^2 + m x""[t] == 0, x[0] == x0, x"[0] == v0x}, x[t], t]
ger
(b t varx - m Log[m/(v0x - varx)] + m Log[b t - m/(-v0x + varx)])/b
Då kan du använda funktionen y[t]
parms = {b -> 1, varx -> 2, m -> 1, x0 -> 1, v0x -> 0}; Plot[y[t] /. parms, {t, 0, 1}]
D[y[t] /. parms, t] Out[48]= 2 + 1/(-(1/2) + t)
etc …
Svar
Följer Nasser ” s svar, här är en mindre variant:
x[tt_, {b_, varx_, m_, x0_, v0x_}] := Module[{}, x[t_, {b, varx, m, x0, v0x}] = Block[{x, t}, x[t] /. First@ DSolve[{b varx^2 - 2 b varx x"[t] + b x"[t]^2 + m x""[t] == 0, x[0] == x0, x"[0] == v0x}, x[t], t] ]; x[tt, {b, varx, m, x0, v0x}] ]
Sedan kan du utvärdera det med:
parms = {1, 2, 1, 1, 0}; x[4, parms] Plot[x[t, parms], {t, 0, 1}]
etc. Observera att ODE beräknas bara en gång för varje parametervektor.