From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29494 invoked by alias); 3 Jun 2007 16:19:27 -0000 Received: (qmail 29484 invoked by uid 22791); 3 Jun 2007 16:19:25 -0000 X-Spam-Check-By: sourceware.org Received: from web50912.mail.re2.yahoo.com (HELO web50912.mail.re2.yahoo.com) (206.190.38.159) by sourceware.org (qpsmtpd/0.31) with SMTP; Sun, 03 Jun 2007 16:19:22 +0000 Received: (qmail 91820 invoked by uid 60001); 3 Jun 2007 16:19:20 -0000 X-YMail-OSG: rKwBdNIVM1k5N0CJez.I0in_aYuFSSxP08aB4IfEiNsxK8QdyFubftm3gEWaAMK8dVEJfIZjnX19Xqee4asqs0p3hVy3V3UqALXg Received: from [35.9.70.77] by web50912.mail.re2.yahoo.com via HTTP; Sun, 03 Jun 2007 09:19:20 PDT X-Mailer: YahooMailRC/651.29 YahooMailWebService/0.7.41.16 Date: Sun, 03 Jun 2007 16:19:00 -0000 From: eknecronzontas Subject: Re: Help! Questions for the developers of GSL ODE: Complex-valued ODEs and the "jac" function in GSL ODE solver? To: Michael , gsl-discuss@sources.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset=ascii Message-ID: <659222.91262.qm@web50912.mail.re2.yahoo.com> Mailing-List: contact gsl-discuss-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gsl-discuss-owner@sourceware.org X-SW-Source: 2007-q2/txt/msg00027.txt.bz2 Yes GSL's ode solver only handles real equations. However, there is no factor of two slowdown, as you're only explicitly doing with GSL what matlab must do internally. Whenever you write two complex-valued ODE's (no matter what software you use) you are doing nothing more than implicitly writing 4 real ODE's. The "jac" function is the Jacobian. For yprime_i=f_i(y_j) the Jacbian gives the matrix which is (d f_i)/(dy_j). I don't quite remember the ordering (whether i or j is rows or columns) though. The specification of the Jacobian is indeed documented at: http://www.gnu.org/software/gsl/manual/html_node/Defining-the-ODE-System.html I assume your boundary conditions couple these ODE's which could be solved separately since 'x' does not appear in the first equation. Take care, Andrew ----- Original Message ---- From: Michael To: gsl-discuss@sources.redhat.com Sent: Sunday, June 3, 2007 4:18:17 AM Subject: Help! Questions for the developers of GSL ODE: Complex-valued ODEs and the "jac" function in GSL ODE solver? Help! Complex-valued ODEs and the "jac" function in GSL ODE solver? Hi all, I am new to GSL ode, I started looking it because I really need to speed my current Matlab program, which runs ODE solvers repeatedly for thousands to millions of times. I found the GSL example ode program difficult to understand, and here are my questions: (1) I have to solve the following complex-valued non-linear ODE numerically, using GSL's ode solver. But it seems that GSL's ode solver only supports real-valued ODE... My ODEs are: y' = c1 * y + c2 + c3*exp(c4* y + c5*i) x' = c6 * y here c1, c2, c3, c4, c5 and c6 are real numbers , and "i" is the unit of imaginary numbers. I am planning to decompose y into yr and yi, x into xr and xi, the real parts and the imaginary parts. And solve separately: yr' = c1 * yr + c2 + c3*exp(c4* yr)*cos(c4* yi + c5) yi' = c1 * yi + c2 + c3*exp(c4* yr)*sin(c4* yi + c5) xr' = c6 * yr xi' = c6 * yi -------------------- Am I right? Is this the best approach to handle the ODEs with a solver only supports real values? My original solutions were already too slow, now by having to solve 4 equations, it is even slower, and double the computing time... Any better approaches? (2) In the sample GSL ode code, there is a function called "jac", how do I define the "jac" function for my ODE equations, as shown above? int jac (double t, const double y[], double *dfdy, double dfdt[], void *params) { double mu = *(double *)params; gsl_matrix_view dfdy_mat = gsl_matrix_view_array (dfdy, 2, 2); gsl_matrix * m = &dfdy_mat.matrix; gsl_matrix_set (m, 0, 0, 0.0); gsl_matrix_set (m, 0, 1, 1.0); gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0); gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0)); dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } --------------------- There is no documentation talking about this "jac" function. I really don't know how to define my "jac" function for my own ode equations. Could you please help me? Thanks a lot! Mike