Numerical convolution for InterpolationFunction
- To: mathgroup at smc.vnet.net
- Subject: [mg77646] Numerical convolution for InterpolationFunction
- From: "Zhao, Liang" <ZhaoL at MedImmune.com>
- Date: Thu, 14 Jun 2007 05:30:29 -0400 (EDT)
This is something I have been working on for long time but just can not
figure out.
The initial objective is very simple.
I want to transform expressions like a.f1[t].f2[t].f3[t]... to
a.f1[t]*f2[t]*f3[t]... (here "*" indicates convolution operation for
illustration purpose and is not Mathematica multiplication symbol). If
functions like f1[t], f2[t] & f3[t] have closed form solutions, the
solution can be as follows:
Clear[f1, f2, f3]
expr=a f3[t] f1[t] f2[t];
expr=expr/.Times->conv;
((expr//.conv[c_/;FreeQ[c,t],r__]->c*conv[r])//.conv[any___,a_[t_],
b_[t_]]:>(var=Unique[t];
conv[any,
function[Integrate[a[#-var]*b[var],{var,0,#}]][t]]))/.conv[
a_]:>a/.function->Function
However, if I want to extend the above code to f1[t], f2[t], f3[t] which
are InterpolationFunctions, where I need to change Integrate to
NIntegrate in the expression, problem starts:
NIntegrate::"nlim": is not a valid limit of integration."
{a NIntegrate[f1[t-var] (NIntegrate[f2[#1-var]
f3[var],{var,0,#1}]&)[var],{var,0,t}]}
Later I find, Mathematica refuse to evaluate a function like:
NIntegrate[((t - t$1383)) NIntegrate[[ExponentialE]^(t$1383 - t$1370)
[ExponentialE]^((-2) t$1370), {t$1370, 0, t$1383}], {t$1383, 0,
2}]
I tried many other routes but things seem to go to the right direction
and I know I must have been very stubborn somewhere. I sincerely ask
help from experts here. Any advice will be greatly appreciated!
L.Z.