У вас есть следующие проблемы с кодом.Сначала A
- это Matrix{Int64}
, и оно должно быть Matrix{Float64}
.Вы можете исправить это, написав:
A = Float64[1 1 1 1 1 0 0;
1 2 0 3 0 1 0;
2 1 2 0 0 0 -1;
2 3 1 1 0 0 0]
Второе - вы, вероятно, хотите, чтобы индекс i
варьировался от 1
до length(c)
, поэтому вы должны записать свой цикл как:
for i in 1:length(c)
Наконец - ваш код не будет работать под Julia 1.0 не только потому, что eye
не определен, но и потому, что вы обновляете переменную j
внутри цикла.Я бы порекомендовал вам обернуть весь код в функцию или написать global j += 1
, чтобы он работал под Julia 1.0.
РЕДАКТИРОВАТЬ:
Проблема - в двух словах заключается в следующем:
julia> A = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> A[1] = 0.5
ERROR: InexactError: Int64(Int64, 0.5)
Массив A
может содержать только целые числа, поэтому вы не можете присвоить ему число с плавающей точкой.Написав Float64
перед литералом массива, вы заставляете его иметь другой тип элемента, так что это работает:
julia> A = Float64[1,2,3]
3-element Array{Float64,1}:
1.0
2.0
3.0
julia> A[1] = 0.5
0.5
julia> A
3-element Array{Float64,1}:
0.5
2.0
3.0
Короче говоря, Джулия знает, содержит ли ваш массив целые числа или числа с плавающей запятой, и проверяет его.Иногда допускается продвижение типов (например, вы можете присвоить целое число массиву с плавающей точкой, поскольку это обычно не приводит к потере точности), как описано здесь https://docs.julialang.org/en/latest/manual/conversion-and-promotion/#Conversion-1.