С помощью символики Джулии могу ли я решить для переменной в уравнении?

#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)) .