- 积分
- 42
- 注册时间
- 2005-10-22
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2008-4-18 10:50:36
|
显示全部楼层
来自 湖北武汉
 - Unprotect[GWR];
- Begin["User`NumericalLaplaceTransformInversion`Private`"]
- GWR[F_, t_, M_:12, precin_:0] := Module[
- {M1, G0, Gm, Gp, best, expr, \[Tau] = Log[2]/t, Fi, broken, \
- prec},
- If[precin <= 0, prec = 21 M/10, prec = precin];
- If[prec <= $MachinePrecision, prec = $MachinePrecision];
- broken = False;
- If[Precision[\[Tau]]<prec,\[Tau]=SetPrecision[\[Tau],prec]];
- Do[Fi[i] = N[F[i \[Tau]], prec], {i, 1, 2 M}];
- (* Fi[I]为F[Ln2/T*N] *)
- M1 = M;
- Do[
- G0[n - 1] = \[Tau] (2n)!/(n!(n - 1)!)Sum[
- Binomial[n, i](-1)^i Fi[n + i], {i, 0, n}];
- If[Not[NumberQ[G0[n - 1]]], M1 = n - 1; G0[n - 1] =.; Break[]];
- , {n, 1, M}];
- Print["参数 ",G0[0],"参数 ",G0[M-1]];
- Do[Gm[n] = 0, {n, 0, M1}];
- best = G0[M1 - 1];
-
- Do[
- Do[
- expr = G0[n + 1] - G0[n];
- If[Or[Not[NumberQ[expr]], expr == 0], broken = True; \
- Break[]];
- expr = Gm[n + 1] + (k + 1)/expr;
- Gp[n] = expr;
- If[OddQ[k],
- If[n == M1 - 2 - k, best = expr]
- ];
- , {n, M1 - 2 - k, 0, -1}];
- If[broken, Break[]];
- Do[Gm[n] = G0[n]; G0[n] = Gp[n], {n, 0, M1 - k}];
- , {k, 0, M1 - 2}];
- best
- ]
- End[] (* User`NumericalLaplaceTransformInversion` *)
复制代码 |
|