julia - 使用 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
解决方案
您的代码中有两个问题。第一个是方程应该有两部分,右手边(ie rhs
)和左手边(ie lhs
)。您的错误消息清楚地指出了问题:sqrt(a^2 + b^2)
is a Num
type sincea
并且b
are 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))
。
推荐阅读
- java - 如何在过滤器中从数据库中获取用户并在 jwt 响应中添加 ID?
- python - python中的有序排列
- python - 运行此程序时,我不断收到此错误。我已经尝试了我能想到的一切,但仍然无法正常工作
- django - Django ORM在没有模型形式的情况下保存上传的文件
- postgresql - 在 PostgreSQL 列中存储特殊(拼音字母)字符
- asp.net-core-3.1 - 如何从 .net core 3.1 api 响应中删除“服务器”标头?
- verilog - 数组声明区别verilog
- ios - 将DAO层(领域或核心数据)作为多线程应用程序的单例是否可以?
- laravel - 使用 ShouldQueue 通知电子邮件序列化错误与缺少请求对象错误
- oauth-2.0 - Ejabberd 18.12.1 - X-OAUTH2 因令牌无效而失败 - 如何设置?