OneBounce[k_, ramp_][{t0_, x0_, xp0_, y0_, yp0_}] :=
Module[{sol, t1, x1, xp1, y1, yp1, gramp, gp},
sol = First[NDSolve[
{x''[t] == 0, x'[t0] == xp0, x[t0] == x0,
y''[t] == -9.8 , y'[t0] == yp0, y[t0] == y0},
{x, y},
{t, t0, \[Infinity]},
Method -> {"EventLocator", "Event" :> y[t] - ramp[x[t]]},
MaxStepSize -> 0.01]];
t1 = InterpolatingFunctionDomain[x /. sol][[1, -1]];
{x1, xp1, y1, yp1} =
Reflection[k, ramp][{x[t1], x'[t1], y[t1], y'[t1]} /. sol];
Sow[{x[t] /. sol, t0 <= t <= t1}, "X"];
Sow[{ y[t] /. sol, t0 <= t <= t1}, "Y"];
Sow[{x1, y1}, "Bounces"];
{t1, x1, xp1, y1, yp1}]
这个是mathematica软件帮助中的一个自定义函数,计算一个小球从一次弹跳到下一次弹跳的解。
这个函数定义中,[k_, ramp_][{t0_, x0_, xp0_, y0_, yp0_}]是两对[]连写在一起的。这种写法很好,能很清晰的看出自变量的分类。
我感到奇怪的是,为什么在帮助里完全查不到这种函数定义写法的说明。都是在函数名后只能跟着一对[]。
Module[{sol, t1, x1, xp1, y1, yp1, gramp, gp},
sol = First[NDSolve[
{x''[t] == 0, x'[t0] == xp0, x[t0] == x0,
y''[t] == -9.8 , y'[t0] == yp0, y[t0] == y0},
{x, y},
{t, t0, \[Infinity]},
Method -> {"EventLocator", "Event" :> y[t] - ramp[x[t]]},
MaxStepSize -> 0.01]];
t1 = InterpolatingFunctionDomain[x /. sol][[1, -1]];
{x1, xp1, y1, yp1} =
Reflection[k, ramp][{x[t1], x'[t1], y[t1], y'[t1]} /. sol];
Sow[{x[t] /. sol, t0 <= t <= t1}, "X"];
Sow[{ y[t] /. sol, t0 <= t <= t1}, "Y"];
Sow[{x1, y1}, "Bounces"];
{t1, x1, xp1, y1, yp1}]
这个是mathematica软件帮助中的一个自定义函数,计算一个小球从一次弹跳到下一次弹跳的解。
这个函数定义中,[k_, ramp_][{t0_, x0_, xp0_, y0_, yp0_}]是两对[]连写在一起的。这种写法很好,能很清晰的看出自变量的分类。
我感到奇怪的是,为什么在帮助里完全查不到这种函数定义写法的说明。都是在函数名后只能跟着一对[]。