Skip to content

Commit 2bc3c54

Browse files
Merge pull request #1367 from n0rbed/quick_fix
Support symbolic_solve([equations])
2 parents 95e0190 + 58ff391 commit 2bc3c54

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/solver/main.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,16 @@ function symbolic_solve(expr, x::T; dropmultiplicity = true, warns = true) where
218218
end
219219

220220
function symbolic_solve(expr; x...)
221+
if expr isa Vector
222+
expr = convert(Vector{Any}, expr)
223+
for i in eachindex(expr)
224+
expr[i] = expr[i] isa Equation ? expr[i].lhs - expr[i].rhs : expr[i]
225+
end
226+
else
227+
expr = expr isa Equation ? expr.lhs - expr.rhs : expr
228+
end
229+
230+
221231
r = filter_poly.(expr)
222232
subs, filtered = r isa Tuple ? r : (map(t -> t[1], r), map(t -> t[2], r))
223233

test/solver.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,18 +225,26 @@ end
225225
@test check_equal(r_novar, arr_known_roots)
226226

227227
eqs = [x-y-z, x+y-z^2, x^2 + y^2 - 1]
228+
eqs_in_equation_form = [x-y ~ z, x+y-z^2 ~ 0, x^2 + y^2 ~ 1]
228229
arr_calcd_roots = sort_arr(symbolic_solve(eqs, [x,y,z]), [x,y,z])
230+
r_novar = sort_arr(symbolic_solve(eqs_in_equation_form), [x,y,z])
231+
r_eq = sort_arr(symbolic_solve(eqs_in_equation_form, [x,y,z]), [x,y,z])
229232
arr_known_roots = sort_arr([Dict(x => 0, y=>1, z=>-1), Dict(x=>1, y=>0, z=>1),
230233
Dict(x=>(1/2)*(-2-sqrt(2)*im), y=>(1/2)*(-2+sqrt(2)*im), z=>-sqrt(2)*im),
231234
Dict(x=>(1/2)*(-2+sqrt(2)*im), y=>(1/2)*(-2-sqrt(2)*im), z=>sqrt(2)*im)], [x,y,z])
232235
@test check_approx(arr_calcd_roots, arr_known_roots)
236+
@test check_approx(r_novar, arr_known_roots)
237+
@test check_approx(r_eq, arr_known_roots)
233238

234239
eqs = [x^2, y, z]
240+
eqs_in_equation_form = [x^2 ~ 0, y ~ 0, z ~ 0]
235241
arr_calcd_roots = sort_arr(symbolic_solve(eqs, [x,y,z], dropmultiplicity=false), [x,y,z])
236242
r_novar = sort_arr(symbolic_solve(eqs, dropmultiplicity=false), [x,y,z])
243+
r_eq_novar = sort_arr(symbolic_solve(eqs_in_equation_form, dropmultiplicity=false), [x,y,z])
237244
arr_known_roots = sort_arr([Dict(x=>0, y=>0, z=>0), Dict(x=>0, y=>0, z=>0)], [x,y,z])
238245
@test check_equal(arr_calcd_roots, arr_known_roots)
239246
@test check_equal(r_novar, arr_known_roots)
247+
@test check_equal(r_eq_novar, arr_known_roots)
240248

241249
eqs = [y^2 - 1, x]
242250
arr_calcd_roots = sort_arr(symbolic_solve(eqs, [x,y]), [x,y])

0 commit comments

Comments
 (0)