#julia #symbolic-math
Вопрос:
Я хотел бы решить для a
в y = √((a^2 b^2))
Что я пытался:
julia> using Symbolics
julia> @variables a b
(a, b)
julia> y = √((a^2 b^2))
sqrt(a^2 b^2)
julia> eq = y = √((a^2 b^2))
sqrt(a^2 b^2)
julia> eq
sqrt(a^2 b^2)
А потом, чтобы решить, я попытался:
julia> Symbolics.solve_for(eq,[a])
julia> Symbolics.solve_for(eq,a)
julia> Symbolics.solve_for(y,[a])
julia> Symbolics.solve_for(y,a)
что все привело к ошибке:
ERROR: type Num has no field rhs
Ответ №1:
В вашем коде есть две проблемы. Первый заключается в том, что уравнение должно состоять из двух частей: правой части (т. е. rhs
) и левой части (т. Е. lhs
). Ваше сообщение об ошибке четко указывает на проблему: sqrt(a^2 b^2)
является Num
типом, так a
как и b
являются переменными Num
, так как они (предположительно) будут оцениваться в числах. В Symbolics.jl способ объявления уравнения заключается в использовании ~
. Таким образом, правильный способ выразить ваше уравнение таков
@variables a b y
eq = y ~ √((a^2 b^2))
Однако, к сожалению, Symbolics.jl не может решить эту проблему для вас сейчас, так solve_for
как может решать только систему линейных уравнений, как сказано в документе
В настоящее время работает только в том случае, если все уравнения линейны. проверьте, является ли expr линейным с переменными.
Так что это приведет AssertionError: islinear(ex, vars)
к ошибке. Однако вы можете попробовать эту функцию, используя какое-нибудь простое уравнение, например a b
.
julia> eq = y ~ a b
y ~ a b
Symbolics.solve_for([eq],[a])
1-element Vector{Num}:
y - b
кстати:
Вы можете отключить проверку линейности с check=false
помощью параметра, но почти гарантировано, что Symbolics.jl даст вам неправильный результат. Например, Symbolics.jl говорит, что результатом уравнения y ~ √((a^2 b^2))
является a y*sqrt(a^2 b^2)*(a^-1) - ((a^-1)*(sqrt(a^2 b^2)^2))
.