Thanks Chris, for pointing me to that PR, I did had a look at that. That PR, exposed me to the mess of solving linear systems in solvers.
AMiT Kumar On Tuesday, March 17, 2015 at 8:07:00 PM UTC+5:30, Chris Smith wrote: > > See also https://github.com/sympy/sympy/pull/2580 which started some work > related to solving systems of equations. > > On Monday, March 16, 2015 at 8:50:48 PM UTC-5, AMiT Kumar wrote: >> >> The primary hints doesn't have much significance, the sub hints >> are the main hints which would contain various methods, used >> to solve different equations. >> >> The primary hint is just the primary information we would like to extract >> from input, (I should rather rename it) >> to classify equation on the basis of univariate", >> "multivariate_or_parametric", "single_eq", "multiple_eq. >> >> For example: >> >> def classify_primaryhint(f): >> """Clasifies expression(s) `f` based on the primaryhints. >> Primaryhints are >> "univariate", "multivariate_or_parametric", "single_eq", " >> multiple_eq". >> >> >> Examples >> ======== >> >> >> >>> from sympy import * >> >>> from sympy.solvers.solveset import * >> >>> from sympy.abc import x >> >>> classify_primaryhint(x**2 + 2*x + 1) >> >>> ['single_eq', 'univariate'] >> >> >> """ >> >> >> phints = [] >> >> >> # classify by number of Equations, i.e single_eq or multiple_eq >> if not iterable(f): >> phints.append('single_eq') >> f = sympify(f) >> free_symbols = set(f.free_symbols) >> >> >> else: >> free_symbols = [] >> for fi in f: >> fi = sympify(fi) >> free_symbols.append(fi.free_symbols) >> if len(f) > 1: >> phints.append('multiple_eq') >> >> >> # classify by univariate and multivariate >> if len(free_symbols) == 1: >> phints.append('univariate') >> elif len(free_symbols) > 1: >> phints.append('multivariate') >> return phints >> >> >> >> Thanks, >> >> AMiT Kumar >> >> On Tuesday, March 17, 2015 at 1:44:38 AM UTC+5:30, Aaron Meurer wrote: >>> >>> Sorry if you already answered this in the application and I didn't see >>> it, but what is the difference between primary hints and subhints? >>> >>> Also, I should point out that you're going to have to remove most (or >>> maybe all) of your formatting when you submit your proposal in >>> Melange. I would just try to make it look as good as possible in >>> Melange, and provide a link to the wiki so people can read it there. >>> >>> Aaron Meurer >>> >>> On Mon, Mar 16, 2015 at 1:39 PM, AMiT Kumar <[email protected]> wrote: >>> > Hi, >>> > >>> > Sorry for late reply, (I was busy with Mid terms & Assignments). >>> > >>> > Based on the above Ideas, I have made the draft of my Proposal on >>> SymPy >>> > wiki, Please have a look: >>> > >>> https://github.com/sympy/sympy/wiki/GSoC-2015-Application-AMiT-Kumar--Solvers-:-Extending-Solveset >>> >>> > >>> > >>> > Thanks, >>> > >>> > >>> > AMiT Kumar >>> > 3rd Year Undergrad >>> > Delhi Technological University >>> > www.iamit.in >>> > >>> > On Tuesday, March 10, 2015 at 12:15:15 AM UTC+5:30, Aaron Meurer >>> wrote: >>> >> >>> >> That sounds good, except as I noted at >>> >> https://groups.google.com/forum/#!msg/sympy/42GdMJ9ssyM/swC6bHVunP8J, >>> >>> >> it's very important to build this around a framework of rewriting and >>> >> decomposition. You want to be able solve, f(g(x)) = 0, where f is a >>> >> polynomial and g is a lambertW (for example). You want the hints to >>> >> be as simple as possible, and any complicated equations to be >>> solvable >>> >> by an application of possibly many hints. This is more complicated >>> >> than what the ODE solver does. >>> >> >>> >> Rewriting basically boils down to simplifying the matching portion of >>> >> the hints. This is something that is not done very well in the ODE >>> >> system, so I would only look there to see how it is lacking. >>> >> >>> >> You want each hint to match a simple pattern, and then have some set >>> >> of rules on how to rewrite different expressions to that pattern >>> >> mathematically, even if they don't match it structurally. I would >>> take >>> >> a look at the rules system used in the fu algorithm, and in the unify >>> >> submodule. Also take a look at Francesco's pattern matching >>> >> suggestions (search the mailing list and the wiki). >>> >> >>> >> Aaron Meurer >>> >> >>> >> On Sun, Mar 8, 2015 at 12:18 AM, AMiT Kumar <[email protected]> >>> wrote: >>> >> > Hi, >>> >> > I was thinking, How about designing the solveset similiar >>> >> > to the ODE Module . Something like hints system to classify >>> solvers? >>> >> > >>> >> > Example: >>> >> > >>> >> > primaryhint = [ >>> >> > "univariate", >>> >> > "multivariate", >>> >> > "single_eq", >>> >> > "multiple_eq" >>> >> > ] >>> >> > >>> >> > >>> >> > subhints = [ >>> >> > 'solve_linear_system' >>> >> > 'linear_trig', >>> >> > 'polynomial', >>> >> > 'transcendental', >>> >> > 'piecewise', >>> >> > 'relational' >>> >> > 'solve_lambertw' >>> >> > 'miscellaneous' >>> >> > ] >>> >> > >>> >> > >>> >> > def classify_solver(f, symbols=None): >>> >> > """ >>> >> > Clasifies the input equation(s)/function(s) to solve for, into >>> >> > possible >>> >> > hints such as linear, univariate, multivariate, etc. >>> >> > """ >>> >> > hints = [] >>> >> > >>> >> > # Methods to classify Equations >>> >> > >>> >> > def solveset(f, symbol=None): >>> >> > >>> >> > if eq_type == 'linear': >>> >> > solve_linear(f, symbol) >>> >> > >>> >> > if eq_type == 'linear_system': >>> >> > solve_linear_system(f, symbol) >>> >> > >>> >> > . >>> >> > . >>> >> > . and so on >>> >> > >>> >> > >>> >> > >>> >> > In that case we will be able to add new solvers, without messing >>> with >>> >> > the others, and we will have a more robust and flexible framework >>> >> > which will be easy to extend. >>> >> > >>> >> > I think, building a robust framework, which felicitates further >>> >> > development, worth much more than adding new solvers. >>> >> > >>> >> > Thoughts from the community are invited. >>> >> > >>> >> > AMiT Kumar >>> >> > >>> >> > -- >>> >> > 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 post to this group, send email to [email protected]. >>> >> > Visit this group at http://groups.google.com/group/sympy. >>> >> > To view this discussion on the web visit >>> >> > >>> >> > >>> https://groups.google.com/d/msgid/sympy/5b7393ef-7d4d-46f9-bfcd-dbbeb38639c4%40googlegroups.com. >>> >>> >>> >> > >>> >> > For more options, visit https://groups.google.com/d/optout. >>> > >>> > -- >>> > 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 post to this group, send email to [email protected]. >>> > Visit this group at http://groups.google.com/group/sympy. >>> > To view this discussion on the web visit >>> > >>> https://groups.google.com/d/msgid/sympy/6247761d-1673-4f10-bfcd-c0b92a555e7b%40googlegroups.com. >>> >>> >>> > >>> > For more options, visit https://groups.google.com/d/optout. >>> >> -- 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 post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/cfd40599-000f-41d8-995c-3ef918723dcc%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
