微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Julia Symbolics,我可以求解方程中的变量吗?

如何解决使用 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

解决方法

您的代码中有两个问题。第一个是方程应该有两部分,右侧(即 rhs)和左侧(即 lhs)。您的错误消息清楚地指出了问题:sqrt(a^2 + b^2)Num 类型,因为 abNum 的变量,因为它们将(应该)评估到数字。在 Symbolics.jl 中,声明方程的方法是使用 ~。所以表达方程的正确方法是

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

但是很遗憾 Symbolics.jl 现在无法为您解决它,因为 solve_for 只能解决线性方程组,正如文档所说

目前仅适用于所有方程都是线性的。检查 expr 是否为线性 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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。