Re: Programing operations with lists
- To: mathgroup at smc.vnet.net
- Subject: [mg50880] Re: Programing operations with lists
- From: Bill Rowe <readnewsciv at earthlink.net>
- Date: Sat, 25 Sep 2004 01:55:29 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On 9/24/04 at 4:41 AM, guillerm at aida.usal.es (Guillermo Sanchez)
wrote:
>I have two lists with this pattern
>list1={{a1 , b1}, ..., {ai , bi}, ...};
>list2={c1, ..., c(j-1), cj, ...};
>and a function f[x] (ie: f[x_] = 0.2 x);
>I would like grouping and sum the product bi f[ai] where C(j-1)<ai<
>cj
>I show it with an example:
>list1 = {{0.71, 7378}, {1.6, 768}, {2, 2269}, {2.05, 0}, {2.35, 0},
>{2.4, 2608}, {2.6, 193}, {2.8, 4187}, {2.85, 204}, {2.95, 134},
>{3.2,776}, {3.25, 24}, {3.6, 6209}, {3.65, 0}, {3.7, 2809}, {3.95,
>1923}, {4,2627}, {4.1, 25}, {4.15, 1}, {4.2, 0}, {4.25, -15},
>{4.35, 1863}, {4.4, 1797}, {4.45, 7533}, {4.5, 0}, {4.55, 53},
>{4.7, 12045}, {4.9, 7304}, {4.95, 34}};
>list2 = {0.71, 3.2, 4, 4.5, 5}
>The solution should be:
>{{7378 f[0.71] + .. +134 f[2.95]}, ... , {53 f[4.55]+...+34
>f[4.95]}}
It looks to me like the following solves the problem
<<Statistics`
fsum[x_List, y_List, f_] :=
Module[{s = RangeLists[x[[All,1]], y], sp},
sp[data_, lis_] := Select[data,
MemberQ[lis, First[ #1]] & ];
s = (sp[list1, #1] & ) /@ DeleteCases[s, {}];
Total /@ Table[
(Last[#1]*f[First[#1]] & ) /@ s[[n]],
{n, Length[s]}]]
fsum[list1, list2, f]
{7378*f[0.71] + 768*f[1.6] +
2269*f[2] + 2608*f[2.4] +
193*f[2.6] + 4187*f[2.8] +
204*f[2.85] + 134*f[2.95],
776*f[3.2] + 24*f[3.25] +
6209*f[3.6] +
2809*f[3.7] +
1923*f[3.95], 2627*f[4] +
25*f[4.1] + f[4.15] -
15*f[4.25] +
1863*f[4.35] +
1797*f[4.4] +
7533*f[4.45], 53*f[4.55] +
12045*f[4.7] +
7304*f[4.9] + 34*f[4.95]}
--
To reply via email subtract one hundred and four