Function Repository Resource:

SplitVectorValuedPiecewise

Source Notebook

Split a vector-valued piecewise function into a list of piecewise functions

Contributed by: Jan Mangaldan

ResourceFunction["SplitVectorValuedPiecewise"][expr]

converts any vector-valued piecewise functions in expr to a list of piecewise functions.

Examples

Basic Examples (1) 

Convert a vector-valued piecewise expression:

In[1]:=
ResourceFunction["SplitVectorValuedPiecewise"][ \!\(\*
TagBox[GridBox[{
{"\[Piecewise]", GridBox[{
{
RowBox[{"{", 
RowBox[{
RowBox[{"Cos", "[", 
RowBox[{"Sqrt", "[", "x", "]"}], "]"}], ",", 
RowBox[{"Sinc", "[", 
RowBox[{"Sqrt", "[", "x", "]"}], "]"}]}], "}"}], 
RowBox[{"x", ">", "0"}]},
{
RowBox[{"{", 
RowBox[{
RowBox[{"Cosh", "[", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}], "]"}], ",", 
RowBox[{
RowBox[{"Sinh", "[", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}], "]"}], "/", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}]}]}], "}"}], 
RowBox[{"x", "<", "0"}]},
{
RowBox[{"{", 
RowBox[{"1", ",", "1"}], "}"}], "True"}
},
AllowedDimensions->{2, Automatic},
Editable->True,
GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxItemSize->{"Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.84]}, 
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}, "RowsIndexed" -> {}},
Selectable->True]}
},
GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxItemSize->{"Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.35]}, 
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}, "RowsIndexed" -> {}}],
"Piecewise",
DeleteWithContents->True,
Editable->False,
SelectWithContents->True,
Selectable->False,
StripWrapperBoxes->True]\) ]
Out[1]=

Scope (1) 

Convert an expression with multiple piecewise terms:

In[2]:=
ResourceFunction["SplitVectorValuedPiecewise"][\!\(\*
TagBox[GridBox[{
{"\[Piecewise]", GridBox[{
{
RowBox[{"{", 
RowBox[{
RowBox[{"Cos", "[", 
RowBox[{"Sqrt", "[", "x", "]"}], "]"}], ",", 
RowBox[{"Sinc", "[", 
RowBox[{"Sqrt", "[", "x", "]"}], "]"}]}], "}"}], 
RowBox[{"x", ">", "0"}]},
{
RowBox[{"{", 
RowBox[{
RowBox[{"Cosh", "[", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}], "]"}], ",", 
RowBox[{
RowBox[{"Sinh", "[", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}], "]"}], "/", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}]}]}], "}"}], 
RowBox[{"x", "<", "0"}]},
{
RowBox[{"{", 
RowBox[{"1", ",", "1"}], "}"}], "True"}
},
AllowedDimensions->{2, Automatic},
Editable->True,
GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxItemSize->{"Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.84]}, 
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}, "RowsIndexed" -> {}},
Selectable->True]}
},
GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxItemSize->{"Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.35]}, 
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}, "RowsIndexed" -> {}}],
"Piecewise",
DeleteWithContents->True,
Editable->False,
SelectWithContents->True,
Selectable->False,
StripWrapperBoxes->True]\) + \!\(\*
TagBox[GridBox[{
{"\[Piecewise]", GridBox[{
{
RowBox[{"{", 
RowBox[{
RowBox[{
RowBox[{"Sinh", "[", 
RowBox[{"Sqrt", "[", "x", "]"}], "]"}], "/", 
RowBox[{"Sqrt", "[", "x", "]"}]}], ",", 
RowBox[{"Cosh", "[", 
RowBox[{"Sqrt", "[", "x", "]"}], "]"}]}], "}"}], 
RowBox[{"x", ">", "0"}]},
{
RowBox[{"{", 
RowBox[{
RowBox[{"Sinc", "[", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}], "]"}], ",", 
RowBox[{"Cos", "[", 
RowBox[{"Sqrt", "[", 
RowBox[{"-", "x"}], "]"}], "]"}]}], "}"}], 
RowBox[{"x", "<", "0"}]},
{
RowBox[{"{", 
RowBox[{"1", ",", "1"}], "}"}], "True"}
},
AllowedDimensions->{2, Automatic},
Editable->True,
GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxItemSize->{"Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.84]}, 
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}, "RowsIndexed" -> {}},
Selectable->True]}
},
GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxItemSize->{"Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.35]}, 
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}, "RowsIndexed" -> {}}],
"Piecewise",
DeleteWithContents->True,
Editable->False,
SelectWithContents->True,
Selectable->False,
StripWrapperBoxes->True]\)]
Out[2]=

Applications (2) 

Construct a piecewise representation of a B-spline curve:

In[3]:=
knots = {0, 0, 0, 0, 1/4, 1/2, 3/4, 1, 1, 1, 1};
pts = {{0, 0, 0}, {1, 1, 1}, {2, -1, -1}, {3, 0, 1}, {4, 1, -1}};
pf = PiecewiseExpand[
  Table[BSplineBasis[{3, knots}, i, t], {i, 0, 4}] . pts]
Out[4]=

Convert it to a vector with Piecewise components:

In[5]:=
ResourceFunction["SplitVectorValuedPiecewise"][pf]
Out[5]=

Version History

  • 1.0.0 – 30 September 2022

Related Resources

License Information