The following solves the system in much less time and gives a solution that 
has 30% operations. It's not that SymPy can't solve the system, it's about 
knowing when to do something different and what simplification is most apt 
to be useful.

def test():
    var('a:z')
    e1=(-4*q - 5*r)*(f**2 - 5*f*r/(-4*q - 5*r) + 4*q**2/(
        -4*q - 5*r) + 3*q*r/(-4*q - 5*r))
    e2=10*r*(f**2*(-4*h*q - 4*i*q)/(10*r) + f*(-4*g*q/(5*r
        ) - g - 4*h*q/(5*r) - 2*h - i + 4*q**2/(25*r)
        ) - g/2 + 2*h*q**2/(5*r) - h/2 + 2*i*q**2/(5*r
        ) + 2*q**2/(25*r)+ q + r/2)
    gis=[factor_terms(collect(i, f)) for i in solve(e2,g,
        check=False,simplify=False)]
    fis=solve(e1,f,check=False,simplify=False)
    sol=[]
    for gi in gis:
        for fi in fis:
            fi = factor_terms(fi)
            sol.append({f:fi, g:gi.subs(f, fi)})
    return sol

Issue #15441 has similar problems that have been identified. This case was 
added there, too.

An improvement to the system-solver was removal of connected components. 
The next thing that should probably be done is to recursively remove from 
such subsets equations that uniquely contain a variable of interest or that 
contain only one variable of interest. e.g. given f(a,b,c), g(a,b), h(a), 
solve f for c, g for b and h for a.; for a case like f(a,b,c), g(a,b),h(c), 
solve h for c then solve f and g for a and b.

/c
On Thursday, December 23, 2021 at 3:20:19 AM UTC-6 [email protected] 
wrote:

> “never returns” is a bit of an over statement. About half an hour is not 
> eternity :
>
> >>> from time import time as stime
> >>> t0 = stime() ; Sol2 = solve([e1, e2], [f, g], dict=True) ; t1 = stime() ; 
> >>> print(t1 - t0)
> 1628.6711568832397
>
> ​
> Le mardi 21 décembre 2021 à 11:25:36 UTC+1, [email protected] a 
> écrit :
>
>> After :
>>
>> ```
>> from sympy import symbols, solve
>> f, q, r, h, i, g = map(symbols, 'fqrhig')
>> e1 = -4*f**2*q - 5*f**2*r - 5*f*r + 4*q**2 + 3*q*r
>> e2 = -4*f**2*h*q - 4*f**2*i*q - 8*f*g*q - 10*f*g*r - 8*f*h*q - 20*f*h*r - 
>> 10*f*i*r + 8*f*q**2/5 - 5*g*r + 4*h*q**2 - 5*h*r + 4*i*q**2 + 4*q**2/5 + 
>> 10*q*r + 5*r**2
>> ```
>> trying `solve([e1, e2], [f, g])` never returns.
>>
>> FWIW, in Sage, with equivalent definitions :
>>
>> ```
>> sage: %time solve([e1, e2], [f, g], solution_dict=True)
>> CPU times: user 935 ms, sys: 12.1 ms, total: 947 ms
>> Wall time: 671 ms
>> [{f: -1/2*(5*r + sqrt(64*q^3 + 128*q^2*r + 5*(12*q + 5)*r^2))/(4*q + 5*r),
>>   g: -1/5*(5120*h*q^5 - 1024*q^6 + 625*(12*(2*h + i)*q + 10*h + 5*i)*r^4 
>> + 50*(10*(94*h + 38*i - 1)*q^2 - 24*q^3 + 25*(5*h + i)*q)*r^3 + 
>> 80*(5*(132*h + 36*i - 1)*q^3 - 44*q^4 + 25*h*q^2)*r^2 + 128*(5*(41*h + 
>> 5*i)*q^4 - 26*q^5)*r + (80*(2*h + 2*i + 11)*q^3*r + 64*q^4 + 125*(5*h + 5*i 
>> + 18*q)*r^3 + 625*r^4 + 50*(4*(h + i + 12)*q^2 + 5*(h + 
>> i)*q)*r^2)*sqrt(64*q^3 + 128*q^2*r + 5*(12*q + 5)*r^2))/(1024*q^5 + 
>> 4608*q^4*r + 125*(12*q + 5)*r^4 + 200*(28*q^2 + 5*q)*r^3 + 80*(96*q^3 + 
>> 5*q^2)*r^2)},
>>  {f: -1/2*(5*r - sqrt(64*q^3 + 128*q^2*r + 5*(12*q + 5)*r^2))/(4*q + 5*r),
>>   g: -1/5*(5120*h*q^5 - 1024*q^6 + 625*(12*(2*h + i)*q + 10*h + 5*i)*r^4 
>> + 50*(10*(94*h + 38*i - 1)*q^2 - 24*q^3 + 25*(5*h + i)*q)*r^3 + 
>> 80*(5*(132*h + 36*i - 1)*q^3 - 44*q^4 + 25*h*q^2)*r^2 + 128*(5*(41*h + 
>> 5*i)*q^4 - 26*q^5)*r - (80*(2*h + 2*i + 11)*q^3*r + 64*q^4 + 125*(5*h + 5*i 
>> + 18*q)*r^3 + 625*r^4 + 50*(4*(h + i + 12)*q^2 + 5*(h + 
>> i)*q)*r^2)*sqrt(64*q^3 + 128*q^2*r + 5*(12*q + 5)*r^2))/(1024*q^5 + 
>> 4608*q^4*r + 125*(12*q + 5)*r^4 + 200*(28*q^2 + 5*q)*r^3 + 80*(96*q^3 + 
>> 5*q^2)*r^2)}]
>> ```
>>
>> WTF ?
>>
>>

-- 
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/4992a0a2-468c-4a88-af0a-29ba1132cca5n%40googlegroups.com.

Reply via email to