Re: Is there a way to make ListConvolve to use a adaptive kernel?
- To: mathgroup at smc.vnet.net
- Subject: [mg78603] Re: Is there a way to make ListConvolve to use a adaptive kernel?
- From: Roland Franzius <roland.franzius at uos.de>
- Date: Thu, 5 Jul 2007 04:03:28 -0400 (EDT)
- Organization: Universitaet Hannover
- References: <f6fqqv$8o9$1@smc.vnet.net>
lsls schrieb:
> Hi All,
>
> Can the function ListConvolve accept a kernel that changes with the
> position that it's operating on? What would be the syntext? If not
> ListConvolve then any other functions that can do adaptive
> convolution?
Consider the two examples
one using counters
In:
z = 1; t = 2;
ListConvolve[{Subscript[a, 1], Subscript[a, 2]},
Subscript[b, #] & /@ Range[1, 6], 1, {Subscript[q,
33]}, (t++^-2*CircleTimes[#1, #2] &), CirclePlus[#1* z++, #2] &]
Out:
{(Subscript[a, 2] \[CircleTimes] Subscript[q, 33])/
4 \[CirclePlus] (Subscript[a, 1] \[CircleTimes] Subscript[b, 1])/
9, (Subscript[a, 2] \[CircleTimes] Subscript[b, 1])/
8 \[CirclePlus]
(Subscript[a, 1] \[CircleTimes] Subscript[b, 2])/25,
(Subscript[a, 2] \[CircleTimes] Subscript[b, 2])/
12 \[CirclePlus] (Subscript[a, 1] \[CircleTimes] Subscript[b, 3])/
49, (Subscript[a, 2] \[CircleTimes] Subscript[b, 3])/
16 \[CirclePlus]
(Subscript[a, 1] \[CircleTimes] Subscript[b, 4])/81,
(Subscript[a, 2] \[CircleTimes] Subscript[b, 4])/
20 \[CirclePlus] (Subscript[a, 1] \[CircleTimes] Subscript[b, 5])/
121, (Subscript[a, 2] \[CircleTimes] Subscript[b, 5])/
24 \[CirclePlus]
(Subscript[a, 1] \[CircleTimes] Subscript[b, 6])/169}
or using the indices
In:
ListConvolve[{Subscript[a, 1], Subscript[a, 2]},
Subscript[b, #] & /@ Range[1, 6], 1, {Subscript[q,
33]}, #2[[2]]*#1 ** #1[[2]] #2 &, #1\[CirclePlus]#2 &]
Out:
{33*Subscript[a, 2] ** 2*Subscript[q, 33] \[CirclePlus]
Subscript[a, 1] ** 1*Subscript[b, 1],
Subscript[a, 2] ** 2*Subscript[b, 1] \[CirclePlus]
2*Subscript[a, 1] ** 1*Subscript[b, 2],
2*Subscript[a, 2] ** 2*Subscript[b, 2] \[CirclePlus]
3*Subscript[a, 1] ** 1*Subscript[b, 3],
3*Subscript[a, 2] ** 2*Subscript[b, 3] \[CirclePlus]
4*Subscript[a, 1] ** 1*Subscript[b, 4],
4*Subscript[a, 2] ** 2*Subscript[b, 4] \[CirclePlus]
5*Subscript[a, 1] ** 1*Subscript[b, 5],
5*Subscript[a, 2] ** 2*Subscript[b, 5] \[CirclePlus]
6*Subscript[a, 1] ** 1*Subscript[b, 6]}
A nice way to write convolutions of lists of numbers with position
dependent kernel is to subscript the lists and defining the plus and
times of subsripted numbers as pure functions depending on the indices.
--
Roland Franzius