I am getting a Method error, specifically a type conversion error, specifically Array{Float64,2} to type Int64.
I don’t understand types very well yet, and definitely don’t understand why push!() would be trying to convert to an integer. Here’s my code, “principal_minor.jl” is working well in the REPL.
using Symbolics
using Latexify
using SymPy
using LinearAlgebra
include("principal_minor.jl")
function characteristic_polynomial(A)
z = size(A)
n = z[1]
p = [1]
for i = 1:n
p_0 = (-1)^i*sum(principal_minor(A,i))
#print(typeof(p_0))
push!(p, p_0)
end
return p
end
I’ve tried casting a few of the arguments but didn’t work. Any feedback is appreciated, especially quick tips about dealing with these type errors as they have been the roadblock I come across the most.
p is of type Vector{Int} and you try to push! something like a Array{Float64,2} (p_0) into this array.
julia> p = [1]
1-element Vector{Int64}:
1
Your code is not a MWE (minimal working example) so it’s not clear what p_0 is.
What is the output of print(typeof(p_0))?
For now a naiv solution can be not to initialize p as you do it, but e.g.:
function characteristic_polynomial(A)
z = size(A)
n = z[1]
for i = 1:n
p_0 = (-1)^i*sum(principal_minor(A,i))
if ! @isdefined p
p=Array{typeof(p_0)}(undef,0)
end
push!(p, p_0)
end
return p
end
This assumes that the type of p_0 is always the same.
exactly as you said. I fixed it by changing sum(A) to sum(sum(principal_subminor(A,i))).
while this works for arrays with entries that are matrices, I know it won’t work for tensors of higher dimension, though I feel like I could write a function to do so. regardless, not relevant in this characteristic polynomial computation at the moment.