Apparently it is possible to build and InterpolatingFunction that accepts a vector input and returns a vector output:

```
FunctionInterpolation[
 Evaluate[Table[D[{Sin[x y], Cos[x y]}, {{x, y}, k}], {k, 0, 2}]], {x,
   0., 2. Pi}, {y, 0., 2. Pi}]
%[1, 2]
{Sin[1 2], Cos[1 2]} // N

```

> 
> InterpolatingFunction[{{0., 6.28319}, {0., 6.28319}}, <>]
> 
> 
> {0.909518, -0.415989}
> 
> 
> {0.909297, -0.416147}
> 
> 
> 

However trying to build an InterpolatingFunction from a scalar input with vector output I get an error and an interpolating function with scalar output:

```
FunctionInterpolation[{Cos[t], Sin[t]}, {t, 0., 2. Pi}]

```

> 
> During evaluation of In[224]:= FunctionInterpolation::ncvb:
>  FunctionInterpolation failed to meet the prescribed accuracy and
>  precision goals after 6 recursive bisections near t = {0.}. Continuing
>  to refine elsewhere. >>
> 
> 
> During evaluation of In[224]:= FunctionInterpolation::ncvb:
>  FunctionInterpolation failed to meet the prescribed accuracy and
>  precision goals after 6 recursive bisections near t = {0.019635}.
>  Continuing to refine elsewhere. >>
> 
> 
> During evaluation of In[224]:= FunctionInterpolation::ncvb:
>  FunctionInterpolation failed to meet the prescribed accuracy and
>  precision goals after 6 recursive bisections near t = {0.0392699}.
>  Continuing to refine elsewhere. >>
> 
> 
> During evaluation of In[224]:= General::stop: Further output of
>  FunctionInterpolation::ncvb will be suppressed during this
>  calculation. >>
> 
> 
> Out[224]= InterpolatingFunction[{{0., 6.28319}}, <>]
> 
> 
> 0.53844
> 
> 
> 

I'm unsure about the syntax so I tried also:

```
In[227]:= FunctionInterpolation[{{Cos[t], Sin[t]}}, {t, 0., 2. Pi}]
%[1]

```

> 
> During evaluation of In[227]:= Thread::tdlen: Objects of unequal
>  length in {-0.785398,-0.261799,0.261799,0.785398}^{} cannot be
>  combined. >>
> 
> 
> During evaluation of In[227]:= Thread::tdlen: Objects of unequal
>  length in {-0.241564+3.14159 I,-1.34018+3.14159 I,-1.34018,-0.241564}
>  {} cannot be combined. >>
> 
> 
> During evaluation of In[227]:= Thread::tdlen: Objects of unequal
>  length in {-0.785398,-0.261799,0.261799,0.785398} {} cannot be
>  combined. >>
> 
> 
> During evaluation of In[227]:= General::stop: Further output of
>  Thread::tdlen will be suppressed during this calculation. >>
> 
> 
> During evaluation of In[227]:= FunctionInterpolation::nreal: Near t =
>  0.7853981633974483`, the function did not evaluate to a real number. >>
> 
> 
> During evaluation of In[227]:= FunctionInterpolation::nreal: Near t =
>  0.8342673824532895`, the function did not evaluate to a real number. >>
> 
> 
> During evaluation of In[227]:= FunctionInterpolation::nreal: Near t =
>  2.356194490192345`, the function did not evaluate to a real number. >>
> 
> 
> During evaluation of In[227]:= General::stop: Further output of
>  FunctionInterpolation::nreal will be suppressed during this
>  calculation. >>
> 
> 
> Out[227]= InterpolatingFunction[{{0., 6.28319}}, <>]
> 
> 
> Out[228]= {0.539949, 0.841086}
> 
> 
> 

I suppose the task can be accomplished, so What is the proper syntax?

UPDATE
------

I'm interested to build a single vector interpolating function of a scalar variable, given a possibly "opaque" vector function of a numerical scalar variable. Say

```
pf[t_?NumericQ] := With[{expensiveCalc=...}, {xof[expensiveCalc], yof[expensiveCalc]}]

pi = FunctionInterpolation[pf[t], {t,t1,t2}]

```

I was trying to use `FunctionInterpolation` in the hope to produce a "smooth" output of an expensive function describing a curve in a parametric form, evaluating the function where is more needed, and to later recognize some feature of the graph of the function(roghly speaking the point of maximal curvature, maybe directly with `FindMaximum` and something like `pi''`).

Other options comes to mind to solve this problem (for example `ParametricPlot`, `Sow/Reap` and hopefully `ListInterpolation`), but I'm still interested to the original question for the sake of knowledge.