I’m trying to create a struct
with an inner constructor to check some dimensions… Basic structure (let’s call it TEST
) works:
using Polynomials
#
struct TEST{T}
N::Matrix{Poly{T}}
D::Matrix{Poly{T}}
end
This works (although I could introduce a show
method):
julia> num = Poly.(fill([1,1],2,3));
julia> den = Poly.fill([1,1],2,2));
julia> TEST(num,den)
TEST{Int64}(Poly{Int64}[Poly(1 + x) Poly(1 + x) Poly(1 + x); Poly(1 + x) Poly(1 + x) Poly(1 + x)], Poly{Int64}[Poly(1 + 2*x + x^2) Poly(1 + 2*x + x^2); Poly(1 + 2*x + x^2) Poly(1 + 2*x + x^2)])
Next, I’d like to insert a test of dimensions of N
and D
to make sure that the description is correct/that N
and D
are compatible. I’m trying with the following:
struct TEST1{T}
N::Matrix{Poly{T}}
D::Matrix{Poly{T}}
#
function TEST1{T}(N::Matrix{Poly{T}},D::Matrix{Poly{T}}) where T <: Number
n1,n2 = size(N)
d1,d2 = size(D)
if d1 != d2
error("D matrix must be square")
end
if (n2 != d1) && (d2 != n1)
error("N,D dimensions are incompatible")
end
new{T}(N,D)
end
#
end
and then get an error message during construction:
julia> TEST1(num,den)
MethodError: no method matching TEST1(::Array{Poly{Int64},2}, ::Array{Poly{Int64},2})
Stacktrace:
[1] top-level scope at In[49]:1
This is my first attempt of a struct
, so I assume the solution is trivial, but…
Questions
- What do I do wrong?
- What is the simplest inner constructor to achieve what I want?