NestList with two lists
- To: mathgroup at smc.vnet.net
- Subject: [mg131840] NestList with two lists
- From: Joao <joaopereira9 at gmail.com>
- Date: Wed, 16 Oct 2013 04:59:36 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
Hi I use a runge kutta 4 algorithm and apply it to a discretized problem in which "time input" is given as a the number of the node (integer). As the rk4 evaluates a function also in the mid of the interval my input "time" is a even number of nodes. 0, 2, 4, ......In order to allow evaluation at 1, 3 ... I do not have the function defined outside the nodes and the nodes are prefixed. I do need however, in another part of my model to have the function evaluated in all nodes (even and odd). I performed a change to my algorithm (Source: jason cantarella's http://www.jasoncantarella.com/) This version I have know is working but I wonder if it could be done better by using NestList more effectively. rk4new[f_, tini_, tf_, xini_, n_] := Module[{h, list, step, oddnodes, evennodes}, Clear[h, list, step, oddnodes, evennodes]; h = (tf - tini)/n; list = {{tini, xini}} step[{t_, x_}] := Module[{k1, k2, k3, k4}, k1 = h * f[t, x]; k2 = h * f[t + h / 2, x + k1 / 2]; k3 = h * f[t + h / 2, x + k2 / 2]; k4 = h * f[t + h, x + k3]; oddnodes = AppendTo[list, {t + h / 2, x + 1 / 24 (5 k1 + 4 k2 + 4 k3 - k4)}]; list = oddnodes; {t + h, x + 1 / 6 (k1 + 2 k2 + 2 k3 + k4)}]; evennodes = NestList[step, {tini, xini}, n]; Drop[Riffle[oddnodes, evennodes], 1] ]; I would like the NestList function produce the oddnodes and evennodes simultaneously, I thought of defining the final line in step as two lists, the problem is that both evaluate with the same (single) argument. I haven't been able so far to figure out a way to do it. I believe the speed may by increased slightly and since this algorithm is going to be ran thousands of times it could be useful. I would appreciate some help on this issue. Thanks in advance Joao