请教如何写计算质点沿无摩擦斜面下滑的微分代数方程的初始条件?
mathematica吧
全部回复
仅看楼主
level 1
请教各位:想求出一个质点沿一无摩擦斜坡下滑的轨迹,但不太会设初始条件。错在哪呢?应该怎么改呢?恳请指教,万分感谢。程序如下:g = -9.8;
slideBall[k_, ramp_, {x0_, y0_}] :=
Module[{end, xtraj, ytraj, ntraj,
angleG2ramp = PlanarAngle[{0, 0} -> {{0, -1}, {1, ramp'[x0]}}]}
, {xtraj, ytraj, ntraj} =
NDSolveValue[{x''[t] == n[t]*Cos[angleG2ramp],
y''[t] == n[t]*Sin[angleG2ramp] + g, y[t]/x[t] == ramp'[x[t]]
, x'[0] == 0, x[0] == x0, y'[0] == 0, y[0] == y0,
n[0] == -g*Sin[Pi/4], n'[0] == 0
, WhenEvent[
y[t] < ramp[x[t]], {x'[t], y'[t]} ->
slide[k, ramp][{x[t], x'[t], y[t], y'[t]}]]}
, {x, y, n}, {t, 0, .5},
Method -> {"IndexReduction" -> Automatic}];
Show[Plot[ramp[x], {x, 0, 10.1},
PlotRange -> {Automatic, {-.5, 1.5}}, AspectRatio -> Automatic,
ImageSize -> 1000]
, ParametricPlot[{xtraj[t], ytraj[t]}, {t, 0, .5},
PlotStyle -> Red]]]
slide[k_, ramp_][{x_, xp_, y_, yp_}] :=
Module[{angleG2ramp =
PlanarAngle[{0, 0} -> {{0, -1}, {1, ramp'[x]}}]},
RegionNearest[
HalfLine[{x, y}, {1, ramp'[x + .01]}], {x, y} + {xp, yp}] - {x, y}]
ramp[x_] := If[x < 1, 1 - x, 0];
slideBall[.9, ramp, {.1, .9}]
2022年10月20日 13点10分 1
1