Wrong answer

29 views
Skip to first unread message

Tony K B

unread,
Jul 21, 2024, 3:33:30 AM (5 days ago) Jul 21
to sympy
got wrong answer for this ODE y''+y'+0.25y=0, Out put attached. Correct answer is (c_1+c_2*x)e^{-0.5x}. thank you
Wrong_Ans1

Oscar Benjamin

unread,
Jul 21, 2024, 3:48:31 AM (5 days ago) Jul 21
to sy...@googlegroups.com
Thanks. This is a bug so best to open a GitHub issue:

https://github.com/sympy/sympy/issues

If you use rational numbers rather than floats it gives the correct answer:

In [9]: print(dsolve(nsimplify(ode), y))
Eq(y(x), (C1 + C2*x)*exp(-x/2))

In [10]: print(dsolve(ode, y))
Eq(y(x), (C1*sin(5.98941528027496e-13*x) +
C2*sin(6.42110952905754e-13*x) + C3*cos(5.98941528027496e-13*x) +
C4*cos(6.42110952905754e-13*x))*exp(-0.5*x))

There are two different bugs here. The first is roots being inaccurate
for floats:

In [6]: roots(x**2 + x + 0.25)
Out[6]: {-0.5 - 5.98941528027496e-13⋅ⅈ: 1, -0.5 + 6.42110952905754e-13⋅ⅈ: 1}

In [7]: roots(x**2 + x + Rational(0.25))
Out[7]: {-1/2: 2}

In general it is difficult to handle multiple roots in floating point.
I think it would be reasonable for roots to convert the floats to
rational and compute a square-free factorisation before doing anything
else though.

Somehow getting the wrong roots then results in having four rather
than two terms in the solution. There is a bug in the
nth_linear_constant_coefficient solver handling the roots somewhere.

--
Oscar

On Sun, 21 Jul 2024 at 10:33, Tony K B <tonn...@cet.ac.in> wrote:
>
> got wrong answer for this ODE y''+y'+0.25y=0, Out put attached. Correct answer is (c_1+c_2*x)e^{-0.5x}. thank you
>
> --
> 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 sympy+un...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/82af3e38-0dff-4ebe-be8e-102df4e37a79n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages