Spaces:
Running
Running
Update solver.py
Browse files
solver.py
CHANGED
@@ -139,16 +139,18 @@ def process_expression(expr_str):
|
|
139 |
except Exception as e:
|
140 |
raise Exception(f"Error processing expression: {str(e)}")
|
141 |
|
|
|
|
|
|
|
|
|
142 |
def solve_equation(equation_str):
|
143 |
-
"""Solves an equation and returns a detailed step-by-step solution."""
|
144 |
try:
|
145 |
if '=' not in equation_str:
|
146 |
return process_expression(equation_str)
|
147 |
|
148 |
-
# Split into left and right-hand sides
|
149 |
left_side, right_side = [side.strip() for side in equation_str.split('=')]
|
150 |
|
151 |
-
# Parse expressions
|
152 |
transformations = standard_transformations + (implicit_multiplication_application,)
|
153 |
left_expr = sp.parse_expr(left_side, transformations=transformations)
|
154 |
right_expr = sp.parse_expr(right_side, transformations=transformations)
|
@@ -158,24 +160,21 @@ def solve_equation(equation_str):
|
|
158 |
solutions = solve(equation, x)
|
159 |
|
160 |
steps = []
|
161 |
-
steps.append(f"**Step 1:** Original equation: \n{
|
162 |
-
steps.append(f"**Step 2:** Move all terms to one side: \n{
|
163 |
|
164 |
-
# Factoring if possible
|
165 |
factored = sp.factor(equation)
|
166 |
if factored != equation:
|
167 |
-
steps.append(f"**Step 3:** Factorizing the equation: \n{
|
168 |
|
169 |
-
# Solve for x
|
170 |
steps.append(f"**Step 4:** Solving for x:")
|
171 |
for sol in solutions:
|
172 |
-
steps.append(f" x = {
|
173 |
|
174 |
-
# Verification
|
175 |
steps.append("**Step 5:** Verification:")
|
176 |
for sol in solutions:
|
177 |
verification = equation.subs(x, sol)
|
178 |
-
steps.append(f" When x = {
|
179 |
|
180 |
return "\n".join(steps)
|
181 |
|
@@ -183,24 +182,21 @@ def solve_equation(equation_str):
|
|
183 |
return f"Error: {str(e)}"
|
184 |
|
185 |
def integrate_expression(expression_str):
|
186 |
-
"""Computes the integral of a given expression and provides detailed steps."""
|
187 |
try:
|
188 |
x = Symbol('x')
|
189 |
expr = sp.parse_expr(expression_str, transformations=standard_transformations + (implicit_multiplication_application,))
|
190 |
|
191 |
steps = []
|
192 |
-
steps.append(f"**Step 1:** Original integral: \n
|
193 |
|
194 |
-
# Check if substitution can simplify
|
195 |
if '^' in expression_str:
|
196 |
-
steps.append("**Step 2:**
|
197 |
-
# Example: If we have x^n, we might use substitution
|
198 |
-
# More cases can be handled as needed
|
199 |
|
200 |
result = integrate(expr, x)
|
201 |
steps.append(f"**Step 3:** Applying integration formula(s):")
|
202 |
-
steps.append(f"
|
203 |
-
steps.append(f"**Step 4:** Solution: \n{
|
204 |
|
205 |
return "\n".join(steps)
|
206 |
|
@@ -208,22 +204,36 @@ def integrate_expression(expression_str):
|
|
208 |
return f"Error: {str(e)}"
|
209 |
|
210 |
def laplace_transform_expression(expression_str):
|
211 |
-
"""Computes the Laplace transform of a given expression with
|
212 |
try:
|
213 |
t, s = sp.symbols('t s')
|
214 |
expr = sp.parse_expr(expression_str, transformations=standard_transformations + (implicit_multiplication_application,))
|
215 |
|
216 |
steps = []
|
217 |
-
steps.append(f"**Step 1:** Original function: \
|
218 |
|
219 |
-
# Compute Laplace transform
|
220 |
L_transform = laplace_transform(expr, t, s, noconds=True)
|
221 |
|
222 |
steps.append(f"**Step 2:** Applying Laplace Transform:")
|
223 |
-
steps.append("
|
224 |
-
steps.append(f"**Step 3:** Solution: \n{
|
225 |
|
226 |
return "\n".join(steps)
|
227 |
|
228 |
except Exception as e:
|
229 |
return f"Error: {str(e)}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
except Exception as e:
|
140 |
raise Exception(f"Error processing expression: {str(e)}")
|
141 |
|
142 |
+
def to_latex(expr):
|
143 |
+
"""Converts a SymPy expression into LaTeX format."""
|
144 |
+
return f"$$ {sp.latex(expr)} $$"
|
145 |
+
|
146 |
def solve_equation(equation_str):
|
147 |
+
"""Solves an equation and returns a detailed LaTeX-formatted step-by-step solution."""
|
148 |
try:
|
149 |
if '=' not in equation_str:
|
150 |
return process_expression(equation_str)
|
151 |
|
|
|
152 |
left_side, right_side = [side.strip() for side in equation_str.split('=')]
|
153 |
|
|
|
154 |
transformations = standard_transformations + (implicit_multiplication_application,)
|
155 |
left_expr = sp.parse_expr(left_side, transformations=transformations)
|
156 |
right_expr = sp.parse_expr(right_side, transformations=transformations)
|
|
|
160 |
solutions = solve(equation, x)
|
161 |
|
162 |
steps = []
|
163 |
+
steps.append(f"**Step 1:** Original equation: \n{to_latex(left_expr)} = {to_latex(right_expr)}")
|
164 |
+
steps.append(f"**Step 2:** Move all terms to one side: \n{to_latex(equation)} = 0")
|
165 |
|
|
|
166 |
factored = sp.factor(equation)
|
167 |
if factored != equation:
|
168 |
+
steps.append(f"**Step 3:** Factorizing the equation: \n{to_latex(factored)} = 0")
|
169 |
|
|
|
170 |
steps.append(f"**Step 4:** Solving for x:")
|
171 |
for sol in solutions:
|
172 |
+
steps.append(f" x = {to_latex(sol)}")
|
173 |
|
|
|
174 |
steps.append("**Step 5:** Verification:")
|
175 |
for sol in solutions:
|
176 |
verification = equation.subs(x, sol)
|
177 |
+
steps.append(f" When x = {to_latex(sol)}, the equation evaluates to {to_latex(verification)}")
|
178 |
|
179 |
return "\n".join(steps)
|
180 |
|
|
|
182 |
return f"Error: {str(e)}"
|
183 |
|
184 |
def integrate_expression(expression_str):
|
185 |
+
"""Computes the integral of a given expression and provides detailed LaTeX-formatted steps."""
|
186 |
try:
|
187 |
x = Symbol('x')
|
188 |
expr = sp.parse_expr(expression_str, transformations=standard_transformations + (implicit_multiplication_application,))
|
189 |
|
190 |
steps = []
|
191 |
+
steps.append(f"**Step 1:** Original integral: \n$$ \\int {sp.latex(expr)} \\,dx $$")
|
192 |
|
|
|
193 |
if '^' in expression_str:
|
194 |
+
steps.append("**Step 2:** Checking if substitution is needed.")
|
|
|
|
|
195 |
|
196 |
result = integrate(expr, x)
|
197 |
steps.append(f"**Step 3:** Applying integration formula(s):")
|
198 |
+
steps.append(f"$$ \\int f(x) \\,dx = F(x) + C $$")
|
199 |
+
steps.append(f"**Step 4:** Solution: \n$$ {sp.latex(result)} + C $$")
|
200 |
|
201 |
return "\n".join(steps)
|
202 |
|
|
|
204 |
return f"Error: {str(e)}"
|
205 |
|
206 |
def laplace_transform_expression(expression_str):
|
207 |
+
"""Computes the Laplace transform of a given expression with LaTeX-formatted steps."""
|
208 |
try:
|
209 |
t, s = sp.symbols('t s')
|
210 |
expr = sp.parse_expr(expression_str, transformations=standard_transformations + (implicit_multiplication_application,))
|
211 |
|
212 |
steps = []
|
213 |
+
steps.append(f"**Step 1:** Original function: \n$$ \\mathcal{L}\\{{ {sp.latex(expr)} \\}}(t) $$")
|
214 |
|
|
|
215 |
L_transform = laplace_transform(expr, t, s, noconds=True)
|
216 |
|
217 |
steps.append(f"**Step 2:** Applying Laplace Transform:")
|
218 |
+
steps.append("$$ \\mathcal{L}\\{ f(t) \\} = \\int_{0}^{\\infty} e^{-st} f(t) \\,dt $$")
|
219 |
+
steps.append(f"**Step 3:** Solution: \n$$ {sp.latex(L_transform)} $$")
|
220 |
|
221 |
return "\n".join(steps)
|
222 |
|
223 |
except Exception as e:
|
224 |
return f"Error: {str(e)}"
|
225 |
+
|
226 |
+
def process_input(equation):
|
227 |
+
"""Determine whether the input is an equation, an integral, or a Laplace transform."""
|
228 |
+
try:
|
229 |
+
if "laplace" in equation.lower():
|
230 |
+
solution = laplace_transform_expression(equation)
|
231 |
+
elif "integrate" in equation.lower():
|
232 |
+
solution = integrate_expression(equation)
|
233 |
+
else:
|
234 |
+
solution = solve_equation(equation)
|
235 |
+
|
236 |
+
return solution
|
237 |
+
|
238 |
+
except Exception as e:
|
239 |
+
return f"Error processing input: {str(e)}"
|