【问题标题】:Why am I getting no method matching Complex(::Sym)?为什么我没有得到与 Complex(::Sym) 匹配的方法?
【发布时间】:2019-10-26 14:01:34
【问题描述】:

我有一个要执行的函数,它已经编译,但是执行时它显示了一个 MethodError,这里是函数

对于这个函数,我使用的是 SymPy

function op_mat(op)
           op = op.as_poly(domain="C")
           op_a = op.x.gens
           nab = op.length()
           op_ab = ones(SymPy.Sym, nab)
           coef = zeros(Complex, nab)
           mat = zeros(Int64, length(op_a), nab)
           for (i, (ps, c)) in enumerate(op.as_dict())
               for (j, p) in enumerate(ps)
                   mat[j, i] = p
                   op_ab[i] = op_a[j]^p * op_ab[i]
               end
               coef[i] = c
           end

           return op_a, op_ab, mat, coef
       end

我收到的错误消息是这样的:

  Complex(::T<:Number) where T<:Number at boot.jl:718
  Complex(::Real) at complex.jl:16
  Complex(::T<:Real, ::T<:Real) where T<:Real at complex.jl:12
  ...
Stacktrace:
 [1] convert(::Type{Complex}, ::Sym) at ./number.jl:7
 [2] setindex!(::Array{Complex,1}, ::Sym, ::Int64) at ./array.jl:766
 [3] op_mat(::Sym) at ./REPL[3]:13
 [4] top-level scope at REPL[7]:1

【问题讨论】:

  • coef[i] = c 中的c 是什么类型?在该行之前添加@show typeof(c)
  • 你能添加调用函数的示例多项式吗?
  • 尝试用 N(c) 赋值?
  • 对于多项式,您可以尝试一个简单的多项式,例如op=x+y 其中x=symbols("x")y=symbols("y")
  • c的类型是Sym@giordano

标签: julia sympy pycall


【解决方案1】:

由于 c 的类型是 Sym 我应该只将类型更改为复杂的 coef[i]=complex(c)coef[i]=N(c)

【讨论】:

  • 您也可以更明确地指定coef,如coef = zeros(Complex{Float64}, nab),这样就可以进行转换。
猜你喜欢
  • 2020-11-27
  • 2015-11-21
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2019-06-28
  • 2020-11-19
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多