I may give the step-by-step technical explanation why eq.subs works this 
way:

- The subexpressions of x**2 + 5 are x**2, and 5, which is eq.args
- The subexpressions of x**2 are x and 2, which is (x**2).args
- There are no subexpressions of 5, because 5 is an atom.
- There are no subexpressions of 2, because 2 is an atom.
- There are no subexpressions of x, because x is an atom.

And the subs, (reasonably) works when the expression that is substituted, 
is equal to the expression, or its subexpressions.
x is recursively the subexpression of x**2 + 5, so eq.subs(x, 1) works,
however, x+1 is not the subexpression of  x**2 + 5, so eq.subs(x+1,2) works.

Although this is not 100% everything about how subs works, however, I think 
that it explains fairly most of the logic about the subs, 
and I hope it can be useful for your programming experience with subs.
The reason that subs(x+1, 2) does not work, is debatable that it should be 
a bug, or it should be intended part of the design,

However, I'm weighted towards the opinion that it shouldn't be part of the 
design, 
because it is much more complicated and opens up much more rooms for 
extension or incompleteness, if we adopt that as part of the design.
For example, if subs(x+1, 2) works, then we should also think of how 
subs(x**2 + 1, 2), or how subs(x**3 + 1, 2) works,
and I'm afraid that such discussions like this clearly gets into discussing 
very complicated mathematics that you or me are not familiar with.

On Friday, March 29, 2024 at 10:04:03 AM UTC+1 [email protected] 
wrote:

> Hello SymPy community,
> I want to ask if you guys allow me I would like to raise a issue or we can 
> say improvement. I found .subs() amusing but I think we can upgrade that. 
> For reference when we have a equation eq=x**2+5 and then we use 
> eq.subs(x,1) it means x is replaced by 1(x-->1), that gives a simple answer 
> 6. That's totally fine but if I want to substitute a expression with 
> something, it won't work let's take the previous example, eq=x**2+5 and 
> then we use eq.subs(x+1,2) this gives old equation back, but it was 
> supposed to replace x+1 to 2 that means same as before (x-->1) and answer 
> supposed to be 6 as in real mathematics.
> [image: Screenshot 2024-03-29 141816.png]
>

-- 
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/8ab1f6bc-55c1-462a-837e-400341c8d0e7n%40googlegroups.com.

Reply via email to