Julia符号计算中的常数表示的平方根

6

我正在寻找一种表示符号表达式的方式,例如 sqrt(3)*x,以避免提前计算 sqrt(3)

示例代码:

using Symbolics
@variables x
y = sqrt(3)*x

展示y,我们可以看到sqrt(3)已经变成了一个浮点数。

是否有一种机制可以使sqrt保持符号形式?


你是在说 (1/3)x 还是 (1//3)x?因为 (1//3)x 的效果是正常的... - Picaud Vincent
3个回答

4
有没有机制可以保持平方根处于符号形式?
julia> using Symbolics
julia> @variables x
(x,)
julia> y = Symbolics.Term(sqrt,[3])*x

x*sqrt(3)

谢谢你的好回答。我一直在寻找Symbolics的详细文档,但只找到了一些基础内容。你能提供一个指针吗? - Tarik

2

我无法复现:

julia> using Symbolics

julia> @variables x
(x,)

julia> y = 1//3*x
(1//3)*x

julia> y
(1//3)*x

我的配置:

[0c5d862f] Symbolics v0.1.21

并且

julia> versioninfo()

Julia Version 1.6.0
Commit f9720dc2eb (2021-03-24 12:55 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-9850H CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, skylake)

1
抱歉,我记得问题了。是sqrt(3)。不过还是谢谢你的跟进。我已经更新了我的问题。 - Tarik

1
有趣的是,y = 1//3 * x 是有效的,但是根据原始问题,y = sqrt(3) * x 不是有效的。因此,用户Nasser的答案真的很有帮助,谢谢。

思考一下,当使用整数或浮点数调用sqrt函数时,多重分派将调用sqrt(::Int64)或sqrt(::Float64)。然而,当在Int64和Symbolics Num之间使用//运算符时,多重分派将选择具有签名operator //(Int64, Symbolics.Num)的相应函数。 - Tarik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接