forum.alglib.net http://forum.alglib.net/ |
|
odesolver http://forum.alglib.net/viewtopic.php?f=2&t=24 |
Page 1 of 1 |
Author: | ChemE [ Fri Jun 11, 2010 7:44 pm ] |
Post subject: | odesolver |
Can U please tell me how to run odesolver in VBA from Excel? Thanks! |
Author: | Doug Jenkins [ Sun Jun 13, 2010 11:55 am ] |
Post subject: | Re: odesolver |
The basics are in the code below; I'll post more details and some examples on my blog in the next few days: Code: ' Dimension an array for the results ReDim YA2(0 To M - 1, 0 To N - 1) ' Set up the "State" object to transfer data between the AlgLib code and your code to evealuate the differential equations ' See AlgLib code comments or manual for more details Call ODESolverRKCK(YA(), N, XA2, M, Eps, Step, State) ' Loop through ODESolver and evaluation of DE until all steps have converged Rtn = True Do While Rtn = True Rtn = ODESolverIteration(State) ' Either hard code evaluation of the Diff Equn(s) or call a VBA function with the name specefied in FuncName as shown below State.DY = Application.Run(FuncName, State.X, State.Y, CoeffA) Loop ' Extract the results array from the State function Call ODESolverResults(State, M, XA2, YA2, Rep) ODE = YA2 A typical simple function to evaluate the Dif Equn is shown below: Code: Function ODEFunc1(X As Double, Y As Variant, CoeffA As Variant) As Variant Dim ResA(0 To 0) As Double ResA(0) = CoeffA(1, 1) * Y(0) ODEFunc1 = ResA End Function To call that function insert the line: FuncName = "ODEFunc1" Note that Y, CoeffA and the function return value are dimensioned as variants because they may contain 1 or more values. |
Author: | ChemE [ Sun Jun 13, 2010 12:19 pm ] |
Post subject: | Re: odesolver |
Thanks! By the way, nice blog. |
Author: | Doug Jenkins [ Fri Jun 18, 2010 3:02 am ] |
Post subject: | Re: odesolver |
I have now posted details of running the AlgLib ODE solver routine via an Excel UDF here: http://newtonexcelbach.wordpress.com/20 ... ith-excel/ The post includes a link to a download file, including all the necessary code and the five examples shown. |
Author: | marcof [ Wed Jun 30, 2010 8:46 am ] |
Post subject: | Re: odesolver |
Hi, Great code! Can I solve systems of differential equations with this code? I have a system with 9 differential equations that I solve usually with matlab (ode45), but I would love to solve it with an excel base software. Is it possible? Best regards MF |
Author: | Doug Jenkins [ Wed Jun 30, 2010 10:11 am ] |
Post subject: | Re: odesolver |
Marco - I imagine that it is possible, but I'd have to look into it and I don't have time at the moment. Maybe Sergey can give some guidance! |
Author: | Sergey.Bochkanov [ Thu Jul 01, 2010 8:11 am ] |
Post subject: | Re: odesolver |
marcof wrote: Can I solve systems of differential equations with this code? I have a system with 9 differential equations that I solve usually with matlab (ode45), but I would love to solve it with an excel base software. If you talk about something like Code: dy0/dx = f0(y0, ..., y8, x) dy1/dx = f1(y0, ..., y8, x) ... dy8/dx = f8(y0, ..., y8, x) then - yes, you can do it. ODESolverState structure has Y and DY fields which are vectors. You can read y0..y8 and x from State.Y[0:8] and State.X and write f0...f8 to State.DY[0:8] every time you return from ODESolverIteration function. |
Author: | marcof [ Wed Jul 07, 2010 5:45 pm ] |
Post subject: | Re: odesolver |
Brilliant! Many thanks for your code. I will use it for sure in the near future!! MF |
Page 1 of 1 | All times are UTC |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |