Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 16:59
    czgdp1807 review_requested #17881
  • 16:59
    czgdp1807 labeled #17881
  • 16:58
    sympy-bot updated the wiki
  • 16:58
    sympy-bot commented #17844
  • 16:58

    asmeurer on master

    copy edit functions/special/bes… copy edit functions/special/bet… copy edit functions/special/bsp… and 22 more (compare)

  • 16:58
    asmeurer closed #17844
  • 16:57
    asmeurer commented #17844
  • 16:56
    sylee957 commented #17884
  • 15:04
    asmeurer commented #17891
  • 14:44
    smichr edited #17889
  • 14:39
    smichr commented #17661
  • 14:19

    smichr on master

    printing:Fix permutation repr t… Save state of print_cyclic Merge pull request #17891 from … (compare)

  • 14:19
    smichr closed #17891
  • 14:19
    smichr closed #17884
  • 14:01
    serkin starred sympy/sympy
  • 13:32
  • 13:05
    codecov[bot] commented #17891
  • 11:58
    sympy-bot commented #17891
  • 11:58
    aditisingh2362 edited #17891
  • 11:58
    sympy-bot commented #17891
V Gladkova
@valglad
Ah, wait, that doesn't flatten it. So you'll have to do what you did or use SymPy's flatten anyway... Never mind then

Actually,

solution = np.array(*[e for e in r_tmp]).astype(float)

should flatten it as well

Igor Morgado
@igormorgado
@valglad thank you.
Igor Morgado
@igormorgado

wow. :-( Given the matrix PI

array([[ -0.917,   0.042,   0.   ,   0.   ,  -1.   ],
       [  0.708,  -1.125,   0.042,   0.   ,   5.   ],
       [  0.375,   1.125,  -1.125,   0.042, -10.   ],
       [ -0.208,  -0.042,   1.125,  -1.125,  10.   ],
       [  0.042,   0.   ,  -0.042,   1.125,  -5.   ],
       [  0.   ,   0.   ,   0.   ,  -0.042,   1.   ]])

and the vector c

array([-1.   ,  0.   ,  0.   , -0.042,  1.083, -0.042])

the solution given by

linsolve(Matrix(np.c_[PI,c]))

returns an EmptySet()

while the same operation in Maple 16 returns non empty, and exactly

np.array([649/576, 143/192, 75/64, 551/576, -25/13824])

that in float is around

array([ 1.127,  0.745,  1.172,  0.957, -0.002])

Any ideas?

maple_answer.png
the example in maple is shown above
Igor Morgado
@igormorgado
just to make clear, the float points in my PI matrix are not exactly 3 digits precision, I'm just showing the first 3 most significant digits using: np.set_printoptions(precision=3)
for sake of this test it was created using the ratios, as in
PI = np.array([
    [-11/12, 1/24, 0, 0, -1],
    [ 17/24, -9/8, 1/24, 0 ,5],
    [3/8, 9/8, -9/8, 1/24, -10],
    [-5/24, -1/24, 9/8, -9/8, 10],
    [1/24, 0, -1/24, 9/8, -5],
    [0, 0, 0, -1/24, 1]
])
Ideas, are very likely welcome.
Igor Morgado
@igormorgado
Using np.linalg.lstsq(PI, c, rcond=-1)[0] returned the expected answer as: array([ 1.127, 0.745, 1.172, 0.957, -0.002])
Igor Morgado
@igormorgado
but still, I would like to know what I'm doing wrong on Sympy side.
Kalevi Suominen
@jksuom

It seems that your system is over-determined. It has 6 equations in 5 variables. It can have solutions only if the determinant of the extended system is 0.

>>> P = Matrix([[ -0.917,   0.042,   0.   ,   0.   ,  -1.   ],
...        [  0.708,  -1.125,   0.042,   0.   ,   5.   ],
...        [  0.375,   1.125,  -1.125,   0.042, -10.   ],
...        [ -0.208,  -0.042,   1.125,  -1.125,  10.   ],
...        [  0.042,   0.   ,  -0.042,   1.125,  -5.   ],
...        [  0.   ,   0.   ,   0.   ,  -0.042,   1.   ]])
>>> c = Matrix([-1.   ,  0.   ,  0.   , -0.042,  1.083, -0.042])
>>> Pc = P.row_join(c)
>>> Pc.det()
0.000998125750125132

In this example, the determinant not 0 because of the inaccuracy of floating point numbers. Hence there is no solution.

Kalevi Suominen
@jksuom
You can probably find a solution if you remove one of the equations.
Het Patel
@hetp111
is NumPy related to sympy?
i am learning python megacourse on udemy and it is also teaching numpy, so i was wondering if it might be useful
Igor Morgado
@igormorgado
@hetp111 not related but can work together.
V Gladkova
@valglad
The lack of solutions is definitely a precision issue - if you input all entries as Rational (e.g. Rational(1,2) instead of 1/2), then linsolve returns the same as Maple (though obviously that's awkward)
V Gladkova
@valglad

A potential solution could be to define

rationalize = lambda x: [nsimplify(e) for e in x]

(this will turn numbers from a list into rationals). And then do

PI = Matrix(map(rationalize, [
    [-11/12, 1/24, 0, 0, -1],
    [ 17/24, -9/8, 1/24, 0 ,5],
    [3/8, 9/8, -9/8, 1/24, -10],
    [-5/24, -1/24, 9/8, -9/8, 10],
    [1/24, 0, -1/24, 9/8, -5],
    [0, 0, 0, -1/24, 1]
]))

and similarly for c. I've just checked and this returns the right solutions

Igor Morgado
@igormorgado
@jksuom I cant remove any variable unfortunately.
@valglad Amazing! I will test.
Kalevi Suominen
@jksuom
Do not remove any variables. There are too few already. Remove one of the equations.
There are 6 rows and only 5 columns. One row could be omitted.
Igor Morgado
@igormorgado
@jksuom I can't either, they are strict contraints in my solution space.
Kalevi Suominen
@jksuom
If there is a solution, then the same solution is obtained after one equation is omitted.
Kalevi Suominen
@jksuom
In [7]: linsolve(Pc[:5, :])
Out[7]: 
{(1.12549831271091, 0.749071392102014, 1.16564957508439, 0.96140585029474, -0.
000620954287620833)}
Igor Morgado
@igormorgado
@valglad Thanks. rationalize function worked (in fact I was using Fractions.from_float() before, this work better). But I could not apply your lambda function to a 2-d matrix, just 1-d.
I have created mrationalize = lambda x: [nsimplify(e) for e in [r for r in x]] that I do not like much the fell.
V Gladkova
@valglad
Doing map(rationalize, list_of_lists) inside the Matrix call (like I did above when creating PI) would probably be easiest
Adoa Coturnix
@adoa

I have a problem with calculating eigenvectors for a simple 3x3 matrix in sympy. Trying to execute

q = symbols("q", positive=True)
m = Matrix([[-2, exp(-q), 1], [exp(q), -2, 1], [1, 1, -2]])
#m.eigenvects(simplify=True)
m.eigenvals()

results in very complicated expressions for the eigenvalues, trying to get the eigenvectors fails with a NotImplementedError. I expect the latter to be due to the former. However, when trying to do the same thing in Mathematica, I get much simpler expressions for everything. Is there some option / flag that I can set to have sympy compute these eigenvalues and eigenvectors? Is there currently some form of limitation within sympy that prevents me from doing this?

Het Patel
@hetp111
what are all the prerequisite i need to have before contributing to opensource (sympy) ? I have a pretty good hold of python now. Github is very confusing for me.
Aaron Meurer
@asmeurer
It helps to understand git/github, but generally the best way to learn them is to use them
@adoa does Mathematica give a simpler expression for the eigenvalues?
Oh apparently they can be simplified if you call simplify
Het Patel
@hetp111
@asmeurer Ty, do i need to learn git or github? is learning github enough? i have never done opensource before, should i start with sympy?
Aaron Meurer
@asmeurer
You need to learn the basics of git, to download the code and push it up to GitHub
@adoa it seems there is a simplify flag, but it doesn't work
Het Patel
@hetp111
@asmeurer can't i do it manually through github website?
Kalevi Suominen
@jksuom
I suspect that there is not enough support for simplifying hyperbolic functions.
This may help you
Aaron Meurer
@asmeurer
@adoa I opened sympy/sympy#15118 for your issue
Het Patel
@hetp111
@Malkhan52 Thank ypu,
Aaron Meurer
@asmeurer
Het Patel
@hetp111
@asmeurer I am using windows, will i have any problems? or do i need linux?
Aaron Meurer
@asmeurer
You can use windows.
You should use whichever you feel more comfortable with
Het Patel
@hetp111
I am aiming for GSoC 2019, what is the procedure?
(sorry for these silly questions... I am trying my best ,i just need some guidance )
Malkhan Singh
@Malkhan52

I'm getting this error '''>>> expr = cos(x)

expr.subs(x-1,y)
cos(x)
expr = cos(x+1)
expr.subs(x-1,y)
cos(y + 2)
'''

where will it be in code?

Aaron Meurer
@asmeurer
Somewhere in the core