Question bank — SymPy — symbolic algebra, calculus, ODE solving
5.4.20 · D5· Coding › Scientific Computing (Python) › SymPy — symbolic algebra, calculus, ODE solving
Shuru karne se pehle, ek word jo hum har jagah use karte hain: ek symbol ek named mathematical unknown hota hai (jaise ), aur SymPy ka ek expression aisi symbols ka ek tree hai jo operations (, , powers) se juda hota hai. Us tree mein koi bhi numeric value nahi hoti jab tak tum maango nahi. Ye picture dhyan mein rakho — ek tree jo chupchap khada hai, koi number nahi — har sawaal ke liye.
True ya false — justify karo
True ya false: Python mein x = 5 likhne se tumhe ek symbolic unknown milta hai jise tum differentiate kar sako.
x = 5 se integer 5 store hota hai, to x**2 bas 25 hai aur algebra khatam. ko ek unknown tree ke roop mein rakhne ke liye x = symbols('x') chahiye.True ya false: simplify(e) hamesha e ka ek canonical simplest form return karta hai.
simplify ek heuristic hai jo alag-alag dikhne wale results de sakta hai aur kabhi kabhi worse form bhi. Guaranteed target ke liye factor, expand, ya trigsimp use karo.True ya false: solve(x**2 - 4, x) input ko equation x**2 - 4 = 0 ki tarah treat karta hai.
solve ek bare expression ko "ise zero ke barabar karo" ki tarah padhta hai, kyunki koi bhi equation , ban jaati hai — ye universal root form hai.True ya false: (x+1)**2 == x**2 + 2*x + 1 True return karta hai.
== do trees ki structural identity check karta hai, aur ek unexpanded square ek alag tree hai expanded polynomial se. Math equality ke liye simplify(a-b)==0 ya a.equals(b) use karo.True ya false: integrate(x**2, (x, 0, 1)) 0.3333... return karta hai.
1/3 return karta hai; SymPy symbolic rehta hai aur float tabhi deta hai jab tum .evalf() ya N(...) call karo.True ya false: diff power rule ko prove karta hai power rule assume karke.
limit(((x+h)**2-x**2)/h, h, 0) → 2*x se recover kar sakte ho.True ya false: dsolve(Eq(y(x).diff(x,2)+y(x),0), y(x)) ek single specific function return karta hai.
Eq(y(x), C1*sin(x)+C2*cos(x)) return karta hai arbitrary constants ke saath; inhe tum ics= se initial conditions deke pin karte ho.True ya false: .subs(x, sqrt(2)) expression ko turant decimal mein badal deta hai.
sqrt(2) exact rehta hai; tum kuch aisa dekhoge (sqrt(2)+1)**2, na ki 5.828.True ya false: solve hamesha plain numbers return karta hai jo seedha numpy mein daal sako.
sqrt, I, ya symbols ho sakte hain; sirf tabhi sol[0].evalf() se convert karo jab tumhe sach mein float chahiye ho.True ya false: integrate(f, x) integration ka + C constant include karta hai.
+C chhod deta hai; ye tumhe ek antiderivative deta hai. Constant sirf dsolve outputs mein (as C1) wapas aata hai, jahan ye genuinely matter karta hai.Error dhundho
Koi x = 5 likhta hai phir factor(x**2 - 5*x + 6) karta hai aur confuse ho jaata hai ki ye 6 return karta hai. Kya galat hua?
x number 5 se bound tha, isliye expression factor ke kuch dekhne se pehle hi evaluate ho gaya. Pehle x = symbols('x') declare karo.Koi do expressions if a == b: se check karta hai aur unka correct simplification kabhi trigger nahi hota. Fix karo.
== tree structure compare karta hai, mathematical value nahi; equal-but-differently-written trees False dete hain. simplify(a-b)==0 ya a.equals(b) use karo.Koi dsolve(Eq(y.diff(x,2)+y,0), y) call karta hai y = symbols('y') ke saath aur error aata hai. Kyun?
y = Function('y'), y(x) ke roop mein use ki gayi — ek plain symbol y ka mein koi derivative nahi hota solve karne ke liye.Koi likhta hai solve(x**2 - 5*x + 6 = 0, x). Kya galati hai?
= 0 ek Python assignment hai, equation nahi, aur ek call ke andar syntax error hai. Bare expression pass karo solve(x**2-5*x+6, x) ya solve(Eq(x**2-5*x+6, 0), x) mein wrap karo.Koi karta hai sol = solve(x**2-2, x) phir sqrt_val = sol + 1 expecting ek number. Ye kyun fail hoga?
sol roots ki list hai, isliye sol + 1 ek int ko list mein add karne ki koshish karta hai. Pehle index karo: sol[0] + 1, aur agar float chahiye to .evalf().Koi expect karta hai ki simplify(sin(x)**2 + cos(x)**2) fail karega kyunki SymPy "sirf algebra karta hai." Us expectation mein kya galat hai?
1 mein simplify kar deta hai. Symbolic manipulation mein algebra, trig, calculus sab cover hota hai — sirf polynomials nahi.Koi expr.subs(x, 5) likhta hai lekin expr use karta rehta hai yeh sochte hue ki ab usme 5 stored hai. Kya misunderstanding hai?
.subs ek naya object return karta hai aur expr ko waise hi chhod deta hai. Capture karo: expr2 = expr.subs(x, 5).Why sawaal
SymPy expressions ko turant evaluate karne ki jagah trees ke roop mein kyun store karta hai?
25 ne wo structure throw away kar di hai aur wo ab nahi ban sakta.solve har equation ko expression = 0 form mein kyun reduce karta hai?
ke general solution mein do constants kyun hain lekin mein sirf ek?
Characteristic equation ke complex roots , aur kyun produce karte hain?
Taylor series bas "repeated differentiation" chhupe roop mein kyun hai?
SymPy ke liye 1/3 de sakta hai jabki NumPy 0.3333... deta hai — kyun?
Math equality test karne ke liye a==b ki jagah simplify(a-b)==0 kyun prefer karein?
== sirf poochta hai "kya ye same tree hain?"; subtract karke simplify karna asli sawaal poochhhta hai "kya difference mathematically zero hai?", jo alag-alag likhe gaye equal values ko bhi pakad leta hai.Edge cases
solve(x**2 + 1, x) kya return karta hai, aur kya ye ek bug hai?
[-I, I] return karta hai — do imaginary roots. Bug nahi: SymPy by default complex numbers pe kaam karta hai, kyunki ka koi real solution nahi hai.limit(1/x, x, 0) unspecified side se kya hota hai?
oo (infinity) return karta hai; left side ke liye dir='-' pass karo, jo -oo deta hai. Two-sided limit exist nahi karta.integrate(1/x, x) kya deta hai, negative ke liye bhi?
log(x) return karta hai; poori real antiderivative hai, isliye negative inputs ke liye tumhe wo absolute value yaad rakhni padegi jo SymPy ke bare form mein missing hai.Agar tum dsolve ko second-order ODE pe call karo lekin sirf ek initial condition do, to constants ka kya hota hai?
C2 jaisa ek symbol ban ke rehta hai, kyunki ek second-order equation ko fully determine hone ke liye do conditions chahiye.series(f, x, 0, n) aakhir mein kya chhod jaata hai, aur ye kyun matter karta hai?
O(x**n) jo truncation mark karta hai — us order aur usse upar ki sab cheez drop ho jaati hai, isliye series ke paas ek local approximation hai, exact equality nahi.symbols('x', positive=True) versus plain symbols('x') mein sqrt(x**2) simplify karte waqt kya fark hota hai?
positive=True ke saath ye x mein simplify hota hai; plain x (jo negative ya complex ho sakta hai) sqrt(x**2) rehta hai ya Abs(x) ban jaata hai, kyunki assumptions change kar dete hain ki kya provably true hai.Active Recall
Recall "Kya ye expressions mathematically equal hain?" ke liye
== galat tool kyun hai?
== tree structure compare karta hai, isliye alag-alag likhe gaye equal values False return karte hain; simplify(a-b)==0 ya a.equals(b) use karo.
Recall Second-order ODE ko do initial conditions kyun chahiye?
Arbitrary constants ki sankhya ODE ki order ke barabar hoti hai, aur har condition ek constant hata deti hai — do constants, do conditions.
Recall
solve x**2 + 1 ke liye kya return karta hai, aur ye empty kyun nahi hai?
[-I, I] — SymPy complex numbers pe solve karta hai, isliye imaginary roots valid solutions maane jaate hain.
Connections
- NumPy — numerical arrays (float world jiske against ye traps hain)
- Limits and the definition of the derivative
- Taylor and Maclaurin Series
- Ordinary Differential Equations — characteristic equation method
- Lambdify — bridging SymPy to NumPy for plotting