[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## [Help-gsl] ODE system (vectorial)

**From**: |
Altro |

**Subject**: |
[Help-gsl] ODE system (vectorial) |

**Date**: |
Sat, 23 Jul 2011 11:14:42 +0200 |

**User-agent**: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 |

Hi,
I'm trying to integrate an ODE system using odeiv2.

`There are 2*n variables, we call them x_i and y_i, where i range from 0
``to n.
`The system has this form:
x'_i= f( sum_i)
y'_i=g(...x_i, y_i, .... , sum_i)
where
sum_i = y_0 + y_1 + y_2 + ....y_n

`I define the system with (second argument is a pointer to the Jacobian
``matrix, but I do not need it) :
`
N=2*n;
gsl_odeiv2_system sys = {func, NULL, N, ¶meters};
I have some doubt in the definition of argument func.
I implement my functions in this way:

`int func (double t, const double *x, double *f, void *params) { //odd
``index entries of x[] correspond to y_i, while even index entries
``correspond to x_i
` structype S = *(structype *)params;
int i, j;
for (i=0; i<N; i=i+2) {
S.sum[i/2]=0;
for (j=0; j<N; j=j+2) {
S.sum[i/2]=S.sum[i/2] + x[j+1];
}

` f[i] = S.param1 * f(S.sum[i/2]) ;
`` //x'_i= f( sum_i)
`` f[i+1]= S.param2 * x[i] * f(S.sum[i/2]) + S.sum[i/2] *
``x[i+1]; //y'_i=g(...x_i, y_i, .... , sum_i)
` }
return GSL_SUCCESS;
}
where
typedef struct {
double param1;
double param2;
double *sum; //sum is a vector of dimension n.
} structype;
and
double f(double x)
is an external function.
Is this implementation correct?

`I wonder if it is better to implement the system using sum_i as a third
``variable, so having a system of dimension 3*n...
`
Regards,
A.

[Prev in Thread] |
**Current Thread** |
[Next in Thread] |

**[Help-gsl] ODE system (vectorial)**,
*Altro* **<=**