Shrox
May 5, 2021, 3:39pm
#1
Hello everyone!

im really new to Julia and have some problems regarding my code.
Im trying to do a qr decomposition.

```
function qr_zerlegung(A)
m,n = size(A)
j=1
minNM=min(n-1, m);
Q=Matrix(I,m,n)
for j in 1:minNM
alpha=1^(sign(A[j,j]))*norm(A[j:n,j],2)
v=A[j:n,j]+alpha*Matrix(I,n+1-j,1)
H=Matrix(I,n,n)
H[j:n,j:n]=Matrix(I,n-j+1,n-j+1)-(2*(v*v')/norm(v,2)^2)
A=H*A
A[j+1:n,j]=0
Q=Q*H
end
R=A
return Q, R
end
```

I think that the line with

```
H[j:n,j:n]=Matrix(I,n-j+1,n-j+1)-(v*v')/norm(v,2)^2
```

produced the InexactError: Bool because of the assignment. Or i think it does
Does anyone know how to fix it?

Have a great day!

Shrox

You’re updating `H`

in place, but it has an element type of `Bool`

— so it can only store `Bool`

s:

```
julia> H=Matrix(I,3,3)
3×3 Matrix{Bool}:
1 0 0
0 1 0
0 0 1
julia> H[1, 1] = rand()
ERROR: InexactError: Bool(0.7071995471955543)
```

You probably want something like `H=Matrix{eltype(A)}(I,3,3)`

.

3 Likes

Shrox
May 5, 2021, 4:02pm
#3
hey!
thanks for the fast reply.

Oh ok. So H=Matrix{eltype(A)}(I,n,n) is producing a Int64

```
Matrix(I,n-j+1,n-j+1)-(2*(v*v')/norm(v,2)^2)
3×3 Array{Float64,2}:
0.57735 -0.57735 0.57735
-0.57735 0.211325 0.788675
0.57735 0.788675 0.211325
```

is producing a Float64. So in order to work i need H to be Float64 as well. Is that how it generally works?

I really appreciate the help!

edit:
with H=Matrix{eltype(A)}(I,n,n)
i get an InexactError: Int64

Im a bit lost with these datatypes

`H=Matrix{eltype(A)}(I,n,n)`

would make a matrix of `eltype(A)`

If you `eltype(A)`

is `Int64`

, it would have the similar inexact problem; i.e. making a matrix H of `Int64`

.
Meaning, if you make a matrix like this:

```
julia> A = [1 2;3 4]
2×2 Array{Int64,2}:
1 2
3 4
```

The element would be `Int64`

, therefore H would also be element of type `Int64`

```
julia> Matrix{eltype(A)}(I,n,n)
3×3 Array{Int64,2}:
1 0 0
0 1 0
0 0 1
```

1 Like