首页 > 解决方案 > 使用 Julia Symbolics,我可以求解方程中的变量吗?

问题描述

我想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

标签: juliasymbolic-math

解决方案


您的代码中有两个问题。第一个是方程应该有两部分,右手边(ie rhs)和左手边(ie lhs)。您的错误消息清楚地指出了问题:sqrt(a^2 + b^2)is a Numtype sincea并且bare variables ofNum因为它们将(应该)评估为数字。在 Symbolics.jl 中,声明方程的方法是使用~. 所以表达方程的正确方法是

@variables a b y
eq = y ~ √((a^2 + b^2))

然而不幸的是,Symbolics.jl 现在不能为你解决它,因为solve_for它只能解决线性方程组,就像文件说的那样

目前仅在所有方程都是线性的情况下才有效。检查 expr 是否是线性 wrt 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))


推荐阅读