0
|
5524 Views
|
5 Replies
|
0 Total Likes
View groups...
Share
GROUPS:

# Integrate product of linear interpolation functions?

Posted 10 years ago
 I have made some simple linear interpolation functions: nM = 7; xi = Table[2 (j - 1)/(nM - 1), {j, nM}];\[CurlyPhi][1] = Interpolation[{{xi[[1]], 1}, {xi[[2]], 0}, {xi[[nM]], 0}}, InterpolationOrder -> 1]; \[CurlyPhi][2] = Interpolation[{{xi[[1]], 0}, {xi[[2]], 1}, {xi[[3]], 0}, {xi[[nM]], 0}}, InterpolationOrder -> 1]; \[CurlyPhi][nM - 1] = Interpolation[{{xi[[1]], 0}, {xi[[nM - 2]], 0}, {xi[[nM - 1]], 1}, {xi[[nM]], 0}}, InterpolationOrder -> 1]; \[CurlyPhi][nM] = Interpolation[{{xi[[1]], 0}, {xi[[nM - 1]], 0}, {xi[[nM]], 1}}, InterpolationOrder -> 1]; Do[\[CurlyPhi][j] = Interpolation[{{xi[[1]], 0}, {xi[[j - 1]], 0}, {xi[[j]], 1}, {xi[[j + 1]], 0}, {xi[[nM]], 0}}, InterpolationOrder -> 1], {j, 3, nM - 2}];  The Integrate[ ] function can do a definite integral without a problem. For example \!$$\*SubsuperscriptBox[\(\[Integral]$$, $$0$$, $$2$$]$$\(\[CurlyPhi][ 1]'$$[x] \[DifferentialD]x\)\)  gives the exact answer -1. However the definite integral of the product of two such functions returns unevaluated, even though the piecewise polynomial ought to be integrable. For example \!$$\*SubsuperscriptBox[\(\[Integral]$$, $$0$$, $$2$$]$$\(\[CurlyPhi][ 1]'$$[x] $$\[CurlyPhi][4]'$$[x] \[DifferentialD]x\)\)  returns \!$$\*SubsuperscriptBox[\(\[Integral]$$, $$0$$, $$2$$]$$\(\* TagBox[ RowBox[{"InterpolatingFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"{", RowBox[{"0", ",", "2"}], "}"}], "}"}], ",", "\<\"<>\"\>"}], "]"}], False, Editable->False][x]\ \* TagBox[ RowBox[{"InterpolatingFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"{", RowBox[{"0", ",", "2"}], "}"}], "}"}], ",", "\<\"<>\"\>"}], "]"}], False, Editable->False][x]$$ \[DifferentialD]x\)\)  What went wrong here? Thanks in advance for helping!
5 Replies
Sort By:
Posted 10 years ago
 Piecewise[ ] works great! Thank you!
Posted 10 years ago
 Rather than nested is statements, the better approach would be to use the function Piecewise:http://reference.wolfram.com/language/ref/Piecewise.html
Posted 10 years ago
 OK just did a quick experiment. The bottom line:The Interpolation function is really easy to set up with nice clean code. But afterwards it's nearly useless when there are unknown coefficients.The nested If[ ] statements is harder to set up and uglier to look at. But the integration with unknown coefficients works like a charm. :)Hope this helps someone that's doing similar kind of computation.
Posted 10 years ago
 Thanks! The problem with NIntegrate is that it does not work when there are unknown coefficient of the integrand. In other words it can't doNIntegrate[ A[1] fn[x] + ... ] = A[1] NIntegrate[ fn[x] ] + ...where fn[x] can be evaluate to numerical values but A[1] is an unknown coefficient.The actual integrand have many terms and it will be tedious to rewrite the whole thing by hand. Is there a way to instruct NIntegrate[ ] to integrate just the numerical part and leave the unknown coefficient alone?Another approach I thought of is to rewrite the interpolation function as a bunch of nested If[ ] statements. Would that be more integrable?
Posted 10 years ago
 I suspect that you are seeing that Mathematica can properly Integrate and InterpolationFunction as it knows its piecewise functional form from its internal data structures. However the product of two InterpolationFunctions is not of that form -- it doesn't automatically get reinterpreted as a single InterpolationFunction. So to achieve what you are calculating when you have products of InterpolationFunctions (or their derivatives) you should use NIntegrate.