Re: Function of list of functions
- To: mathgroup at smc.vnet.net
- Subject: [mg104107] Re: Function of list of functions
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Mon, 19 Oct 2009 07:13:26 -0400 (EDT)
- Reply-to: hanlonr at cox.net
Your approach is tailored to a specific case. Recommend that you take a more generalized approach. L = Array[a, {3, 3}]; FuncTestList[n_, v_] := L[[n, v]] FunRes[v_] := Table[FuncTestList[i, v], {i, 1, 3}] These two definitions can be replaced by a single definition that does not depend on the specific array nor a specific array length. Use either of these two definitions FunRes2[a_?MatrixQ, n_Integer?Positive] := Flatten[a[[All, {n}]]] /; n <= Length[a[[1]]] or equivalently FunRes3[a_?MatrixQ, n_Integer?Positive] := Transpose[a][[n]] /; n <= Length[a[[1]]] Verifying that each gives the same results as your definitions for your specific matrix And @@ Table[FunRes[n] == FunRes2[L, n] == FunRes3[L, n], {n, 3}] True For an array with arbitrary dimensions L = Array[a, {RandomInteger[{3, 15}], RandomInteger[{3, 10}]}]; And @@ Table[FunRes2[L, n] == FunRes3[L, n], {n, Length[L[[1]]]}] True Bob Hanlon ---- Andrey <oradev at rambler.ru> wrote: ============= On Oct 17, 3:03 pm, David Bailey <d... at removedbailey.co.uk> wrote: > Andrey wrote: > > Hello! > > May be anybody can help me. So, I have this: > > > L = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}}; > > Fun1[t_] := ListPlot[L[[1, t]]]; > > Fun2[t_] := ListPlot[L[[2, t]]]; > > Fun3[t_] := ListPlot[L[[3, t]]]; > > > FunRes[t_] := {Fun1[t], Fun2[t], Fun3[t]}; > > > Everything is ok, BUT if I want to add element to list of FunRes[t_] > > in loop, I have an error? so I mean this: > > > FunRes[t_] := {}; > > For[i = 1, i <= 3, i++, > > {Subscript[Fun, i][t_] := ListPlot[L[[i, t]]], > > AppendTo[FunRes[t], Subscript[Fun, i][t]]}] > > > Please, help me, where I am wrong? > > It is very hard to figure out what you want to achieve here. Here are a > few thoughts: > > Let's start with a list where we can tell what we are plotting: > > L = {{1, 2, 3}, {10, 20, 30}, {100, 200, 300}}; > > This will plot the second sublist: > > ListPlot[L[[2]]] > > Here is a function that will plot the n'th sublist: > > fun[n_] := ListPlot[L[[n]]] > > e.g. > > fun[3] > > Note that in your code FunRes[t] evaluates a function, so it makes > absolutely no sense to use AppendTo on the result! > > Tell us what you really want to do, and someone will tell you how to do i= t! > > BTW, it is highly recommended that you don't use variable names that > start with a capital letter (unless you use a special character further > in the name) to avoid confusion with Mathematica's symbols. > > David Baileyhttp://www.dbaileyconsultancy.co.uk Thank you everybody for your replays. Sorry for my english. I wanted this, and it is works: L = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}}; FuncTestList[n_, v_] := L [[n, v]] FunRes[v_] := Table[FuncTestList[i, v], {i, 1, 3}]