Есть ли что-то вроде обобщенного Piecewise в Mathematica? - PullRequest
2 голосов
/ 17 декабря 2011

Я пытаюсь определить кубический сплайн как функцию в Mathematica 8, поскольку у меня есть все P_{i} (которые, конечно, являются полиномами степени 3) для каждого интервала [x_{i}, x_{i + 1}], i = 0, ..., n. Я хочу определить s в интервале [x_{0}, x_{n + 1}] как <code>s(x) = P_{i}(x) if x is in [x_{i}, x_{i+1}]. Как я могу сделать это, когда меняется n? Я думал о Piecewise, но это не сработало.

Ответы [ 3 ]

4 голосов
/ 17 декабря 2011

Это именно то, что вы спрашиваете, если я не ошибаюсь. Это немного уродливо, хотя. Есть лучшие альтернативы.

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 (=) в определении f на SetDelayed (: =), но это подразумевает переоценку Table для каждого вызова f. Не так уж плохо для небольших значений n, но мне это не нравится. Результаты в этом случае выглядят так:

n = 2; f[1/2]
n = 5; f[1/2]

(* ==>  1/2 

   ==>  1/8
*)
1 голос
/ 17 декабря 2011

Иван, я думаю, что есть несколько способов сделать то, что вы хотите, более или менее надуманные, основываясь на вашем комментарии к моему первому ответу. Возможно, вы ищете функциональность Interpolation в целом. Пример:

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

Mathematica graphics

1 голос
/ 17 декабря 2011

Я действительно не понимаю, о чем вы просите, но, исходя из моих самых лучших предположений, вы можете найти значение в этом:

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"}

Извините, если это не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...