在Mathematica中有类似于Generalized Piecewise的东西吗?

时间:2011-12-17 14:53:55

标签: wolfram-mathematica

我正在尝试将一个三次样条函数定义为Mathematica 8中的函数,因为每个区间{{1}我都得到P_{i}(当然,这是3次多项式) }}。我想要做的是将[x_{i}, x_{i + 1}], i = 0, ..., n区间s定义为[x_{0}, x_{n + 1}]。如果s(x) = P_{i}(x) if x is in [x_{i}, x_{i+1}]变化,我该怎么做?我在想s(x) = P_{i}(x) if x is in [x_{i}, x_{i+1}]但是没有用。

3 个答案:

答案 0 :(得分:4)

如果我没弄错的话,这正是你所要求的。虽然这有点难看。有更好的选择。

n = 5;
ClearAll[f];
f[x_] = Piecewise[Table[{x^k, (k - 1)/n < x <= k/n}, {k, 0, n}]]

enter image description here

f[1/2]

(* ==> 1/8 *)

如果你想让结果依赖于全局变量n的当前状态(我不提倡),你可以在{的定义中替换Set(=) {1}}使用f(:=),但这意味着每次SetDelayed的调用都会重新评估Table。对n的小值来说并不坏,但我不喜欢它。在这种情况下的结果看起来像这样:

f

答案 1 :(得分:1)

我真的不明白你要求的是什么,但是按照我最好的猜测,你可能会发现这个价值:

p = {func1, func2, func3, func4, func5};

s = If[
      1 <= # <= Length@p,
      p[[Floor[#]]][#],
      "Undefined"
    ] &;

s /@ {2.4, 1.2, 3.3, 4.8, 1.3, -2.5}
{func2[2.4], func1[1.2], func3[3.3], func4[4.8], func1[1.3], "Undefined"}

如果这没用,我很抱歉。

答案 2 :(得分:1)

Ivan,我认为根据你对我的第一个答案的评论,有很多方法可以做你想要的,或多或少的做作。也许您最常寻找Interpolation的功能。例如:

n = 5;
Table[{k/n, k}, {k, 0, n}]
f = Interpolation[%, InterpolationOrder -> 0];
Plot[f[i], {i, 0, 1}, PlotRange -> All]

Mathematica graphics