當 輸入超出範圍時,我想通過用常數替換外推值來「修改」Mathematica的插值[]函數(在 維中)。Mathematica插值[]當超出範圍時保持不變
換句話說,如果插值域爲[1,20]和f [1] == 7和 F [20] == 12,我想:
f[x] = 7 for x<=1
f[x] = 12 for x>=20
f[x] = Interpolation[...]
然而,這種失敗:
(* interpolation w cutoff *)
interpcut[r_] := Module[{s, minpair, maxpair},
(* sort array by x coord *)
s = Sort[r, #1[[1]] < #2[[1]] &];
(* find min x value and corresponding y value *)
minpair = s[[1]];
(* ditto for max x value *)
maxpair = s[[-1]];
(* return the pure function representing cutoff interpolation *)
Piecewise[{
{minpair[[2]] &, #1 < minpair[[1]] &},
{maxpair[[2]] &, #1 > maxpair[[1]] &},
{Interpolation[r], True}
}]]
test = Table[{x,Prime[x]},{x,1,10}]
InputForm[interpcut[test]]
Piecewise[{{minpair$59[[2]] & , #1 < minpair$59[[1]] & },
{maxpair$59[[2]] & , #1 > maxpair$59[[1]] & }},
InterpolatingFunction[{{1, 10}}, {3, 1, 0, {10}, {4}, 0, 0, 0, 0},
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}, {{2}, {3}, {5}, {7}, {11}, {13}, {17},
{19}, {23}, {29}}, {Automatic}]]
我敢肯定我錯過了一些基本的東西。什麼?
OK,但是這欺騙。我希望它能像Interpolation []那樣返回一個純函數。 interpcut應該將一個數組作爲輸入並返回一個純函數作爲輸出。否則,我不得不重寫很多東西。 – barrycarter 2010-12-18 03:56:21
好吧,事實證明,調用你的函數interpcut1,然後做: interpcut [r_]:=函數[x,interpcut1 [r,x]] 有竅門。 – barrycarter 2010-12-18 04:49:14
@barrycarter是的,一旦你得到了純粹的功能,你可以重新定義它,只要你想...... – 2010-12-18 04:52:44