求解符号函数的零空间

问题描述 投票:0回答:1

我有符号函数(例如

x^2
x+1
等)并尝试找到等于零的线性组合。

我用

Symbolic.jl
写了一个 Julia 程序。在文档中,它说大多数 Julia 方法都使用表达式,但是,我的程序:

using Symbolics, LinearAlgebra
@variables n
p1 = :(n + 1)
p2 = :(n + 3)
p3 = :(n + 2)
A = [p1 p2 p3]
nullspace_A = nullspace(A)
println(nullspace_A)

抛出错误:

ERROR: LoadError: MethodError: no method matching one(::Type{Expr})

我猜

nullspace
中的
LinearAlgebra
不支持符号表达式。有方法吗?是否有更合适的模块或编程语言?效率是关键,真实示例将包含更复杂的函数,如阶乘/伽玛函数。

julia linear-algebra symbolic-math
1个回答
0
投票

我确实找到了一些解决问题的方法......

Python-同情

Python 具有

sympy
模块,允许求解多个变量的符号方程。我设法找到了
{(x - 1)!, x * (x - 2)!, (x - 2)!}
甚至
{gamma(x - 1), gamma(x - 2), x * gamma(x - 2)}
的零空间。代码很简单:

>>>from sympy import solve, factorial
>>>from sympy.abc import a, b, c, x
>>>eq = a * factorial(x - 1) + b * x * factorial(x - 2) + c * factorial(x - 2)
>>>print(solve(eq, a, b, c, set=True))
([a, b, c], {((-b*x + b - c)/x, b, c)})
>>>eq = -b * x + b - c - a * x
>>>print(solve(eq, a, b, c, set=True))
([a, b], {(-c, c)})

然而,一旦事情变得更加复杂,

sympy
就失败了。例如

{upper_gamma(x, -1), upper_gamma(x - 1, -1), x * upper_gamma(x - 1, -1), (-1) ^ x}

{(x - 1) * upper_gamma(x - 1, -1) + (-1) ^ (x - 1), upper_gamma(x - 1, -1), x * upper_gamma(x - 1, -1), (-1) ^ x}
甚至
{(x - 1) * y, z, y, x * y, -z}
(虽然,我没有 100% 排除用户错误)

数学

Mathematica 是 wolfram-alpha 使用的语言。它可能是最强大的 CAS 之一,但是它不是免费使用的


还有一些其他选项,比如

Matlab
。如果我发现更多,我会更新这个答案。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.