Hi Nijso, I've made some changes to the code - split it up into functions and added all the Riccati ODEs with Rational Solution from the report <https://www3.risc.jku.at/publications/download/risc_5197/RISCReport15-19.pdf>. The present code can solve all the ODEs, but not completely in the sense that I've substituted for constants like a, b, c with values in the equation. I have a doubt in Step 11 of Algorithm 11 <https://www3.risc.jku.at/publications/download/risc_5387/PhDThesisThieu.pdf> . I'm unable to understand how to compute solutions symbolically when the value of "m" is unknown. Is it possible? I can use sympy's assumptions to make sure that m.is_integer gives True, but how do I find polynomial solutions of degree "m" for the auxiliary equation when "m" is unknown?
Naveen On Tuesday, March 30, 2021 at 2:16:14 PM UTC+5:30 [email protected] wrote: > Hi Naveen, > > This ODE comes from Banks, Gundersen, Laine: Meromorphic Solutions of the > Riccati Differential Equation (example 4.2 > http://www.acadsci.fi/mathematica/Vol06/vol06pp369-398.pdf) > > ode = y(x).diff(x) - y(x)**2 - 21/2 + 9/4*x**2 > > Your current implementation fails to find the solution (-1/(x-1) -1/x - > 1/(x+1) + 3x/2) > > > This ODE is example 4.6 from the thesis of Thieu: > > ode = y(x).diff(x) - ( (-3*x**2+2*x-2)/(x*(x-1)**2) - > (6*x**2-x+3)/(x*(x-1))*y(x) - (3*x**2+1)/(x)*y(x)*y(x)) > > Your implementation finds 3 complex solutions while it should return 1 > rational solution. > > Best regards, > Nijso > > On Tuesday, 30 March 2021 at 09:53:35 UTC+2 [email protected] wrote: > >> By the way, Naveen, could you create a repository for your work? It will >> be easier to work with. >> >> Best regards, >> Nijso >> >> On Tuesday, 30 March 2021 at 09:48:48 UTC+2 [email protected] wrote: >> >>> Hi Naveen, Oscar, >>> I agree with Oscar that there is still much work to be done, even having >>> 'only' the rational Riccati solver implemented and tested is still a lot of >>> work, after all you have to implement and test all subcases (movable poles, >>> fixed poles, poles at infinity). And the solver should not only work on the >>> solvable ODEs, but should also not get stuck on ODEs that are not solvable >>> using this method. Also sometimes we will find only special solutions and >>> we would need to construct the general solution from them. Since this is a >>> core solver for possibly many other solvers, it is important that it >>> functions very well. >>> >>> I have put the first 367 kamke odes (the ODEs of first order and first >>> degree) in sympy format in a list, it is here: >>> https://github.com/bigfooted/sympy_ode >>> >>> I think a modular approach is best and the solver should consist of a >>> number of independent functions that can be re-used elsewhere. For instance: >>> isRiccati(ode) : return True if the input ODE is Riccati, False >>> otherwise, >>> Riccati2Normal(ode) : returns the Riccati ode in normal form, >>> Poles(ode) : returns the poles, and their order and multiplicities, >>> etc.. >>> But I think you have made a good start. >>> >>> Regarding the GSoC application: I would focus a bit more on that now, >>> it's always good to be able to get some feedback before submitting (not >>> sure how that works regarding independent reviewing, though). >>> >>> Best regards, >>> Nijso >>> >>> >>> ... >>> >>> >>> >>> On Tuesday, 30 March 2021 at 08:34:12 UTC+2 [email protected] >>> wrote: >>> >>>> Hi Oscar, >>>> >>>> Should we add all the ODEs of Kamke and Murphy or only Riccati ODEs? In >>>> either case, how do we plan on parsing the solution from >>>> Maple/Mathematica? >>>> I could see that there is a Mathematica Parser, but even that seems to be >>>> very basic and is not parsing some complex expressions. >>>> >>>> Naveen >>>> On Monday, March 29, 2021 at 7:17:25 PM UTC+5:30 Naveen Saisreenivas >>>> Thota wrote: >>>> >>>>> > When reviewing GSOC applications (just speaking for myself - I am not >>>>> > the only reviewer) I am most interested in ensuring that we can get >>>>> > the best contributors who are capable of making the most valuable >>>>> > contributions to important parts of SymPy. What you are proposing >>>>> here >>>>> > is a significant improvement to an important part of SymPy so the >>>>> main >>>>> > points to focus on in your application are: >>>>> > 1) making it clear why this is important and how significant the >>>>> improvement is >>>>> > 2) demonstrating that you personally understand what needs doing and >>>>> > are capable of doing the necessary work >>>>> >>>>> Okay, thank you for the advice, Oscar! I'll make the proposal and post >>>>> it here so that you and others can review it. >>>>> >>>>> Naveen >>>>> On Monday, March 29, 2021 at 5:03:53 PM UTC+5:30 Oscar wrote: >>>>> >>>>>> On Mon, 29 Mar 2021 at 10:42, Naveen Saisreenivas Thota >>>>>> <[email protected]> wrote: >>>>>> > >>>>>> > > I think you underestimate how much work is involved in really >>>>>> making >>>>>> > > the implementation robust and complete. Note that it's much >>>>>> better to >>>>>> > > have a well-tested, complete, efficient implementation of a >>>>>> single >>>>>> > > algorithm with nicely organised and documented code than it is to >>>>>> have >>>>>> > > multiple half-implemented algorithms. As Nijso emphasised earlier >>>>>> the >>>>>> > > most important thing first is to establish a systematic test >>>>>> base. We >>>>>> > > should get the Kamke examples in and you should verify that this >>>>>> does >>>>>> > > find all the rational function solutions for all of the Ricatti >>>>>> ODEs. >>>>>> > >>>>>> > I was thinking as much, but I wanted to ask just to know your >>>>>> opinion as well. I did test the current code with some examples, but I >>>>>> am >>>>>> yet to test it with all of them. So, from what you say, I am planning to >>>>>> include Rational Riccati Solver and ODE test bank (Kamke and Murphy) as >>>>>> the >>>>>> primary items to be done and leave computation of rational solutions for >>>>>> a >>>>>> general 1st order equation as a bonus? Will this be okay? >>>>>> >>>>>> Yes, I think that sounds good. >>>>>> >>>>>> Note, as I said in reply to some other queries about GSOC exactly >>>>>> what >>>>>> you would or wouldn't achieve within the duration of the project is >>>>>> less important than demonstrating that you are capable of making >>>>>> significant contributions to SymPy. All tasks can turn out to be >>>>>> harder or easier than expected so it's hard to estimate in advance >>>>>> what is possible given a fixed timeframe. >>>>>> >>>>>> When reviewing GSOC applications (just speaking for myself - I am not >>>>>> the only reviewer) I am most interested in ensuring that we can get >>>>>> the best contributors who are capable of making the most valuable >>>>>> contributions to important parts of SymPy. What you are proposing >>>>>> here >>>>>> is a significant improvement to an important part of SymPy so the >>>>>> main >>>>>> points to focus on in your application are: >>>>>> 1) making it clear why this is important and how significant the >>>>>> improvement is >>>>>> 2) demonstrating that you personally understand what needs doing and >>>>>> are capable of doing the necessary work >>>>>> >>>>>> Then if your application is successful and it turns out that (based >>>>>> on >>>>>> the work you have already done) it is not hard to complete some of >>>>>> the >>>>>> tasks listed then there is no shortage of other things to be done for >>>>>> ODEs in SymPy. On the other hand if one of the tasks turns out to be >>>>>> more involved than expected then it is better to limit the scope of >>>>>> the project later and make sure that the parts that are implemented >>>>>> are done well. >>>>>> >>>>>> A general point that I often make to students is that (usually) it is >>>>>> better to do half a job well than to do the whole job badly. If half >>>>>> a >>>>>> job is done well then it makes a good starting point for someone in >>>>>> future to finish that work. If the whole job is done badly it >>>>>> potentially makes it more difficult for someone else to improve that >>>>>> work than it would be for them if starting from scratch. >>>>>> >>>>>> Oscar >>>>>> >>>>> -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/8966d0a7-1c5e-4572-b22f-afd1557f99b0n%40googlegroups.com.
