使用 Julia Symbolics,我可以求解方程中的变量吗?
With Julia Symbolics, can I solve for a variable in an equation?
我想在 y = √((a^2 + b^2))
中解决 a
我尝试了什么:
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
您的代码中有两个问题。第一个是方程应该有两部分,右边(即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
只能解决线性方程组,正如文档所述
Currently only works if all equations are linear. check if the expr is linear w.r.t vars.
所以它会抛出 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))
.
我想在 y = √((a^2 + b^2))
a
我尝试了什么:
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
您的代码中有两个问题。第一个是方程应该有两部分,右边(即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
只能解决线性方程组,正如文档所述
Currently only works if all equations are linear. check if the expr is linear w.r.t vars.
所以它会抛出 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))
.