<å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

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

ange bildbeskrivning här

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *