julia - Julia 中的不精确错误——矩阵计算
问题描述
错误发生在 else 条件之后。我想用新的一列替换 A 的列。以下是变量的数据类型。似乎是数据类型问题。
A = [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]
b = [20 24 16 20]'
c = [-1 -2 -3 -4 0 0 0]'
C = [1 5 6 4]'
## convert the datatype of original data
C = vec(C)
# initial basis matrix
B = A[:, C]
# initial basic solution
x = inv(B)*b
c_B = c[C]
# initial reduced costs
c_r = (c' - c_B'*inv(B)*A)'
# if basic matrix is not identity (e.g., take other variables other than slack
# variables as starting point), convert B=I and N=inv(B)
ind = eye(length(C))
j = 1
if B != ind
for i in length(c)
if i in C
A[:,i] = ind[:,j]
j += 1
else
A[:,i] = inv(B)*A[:,i]
end
end
end
解决方案
您的代码有以下问题。首先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
简而言之,Julia 知道您的数组是否包含整数或浮点数并检查它。有时允许类型提升(例如,您可以将整数分配给浮点数组,因为这通常不会导致精度损失),如此处所述https://docs.julialang.org/en/latest/manual/conversion -and-promotion/#Conversion-1。
推荐阅读
- angular - 如何对 Firebase 角度列表进行联接查询?
- python - 缺少 1 个必需的位置参数 add_widget
- android - 在 Flutter 中删除 android 的音频文件
- javascript - what is causing borders to appear in my modal?
- node.js - “文档”类型上不存在属性“某物”
'猫鼬打字稿 - java - 特殊类型的未定义方法的问题
- jquery - Insert value to table at a specific index using jquery
- javascript - 未使用值创建和插入元素
- python - python文件输出错误
- java - 我想在运行时更改元素的包含文本 - By.xpath("//a[contains(text(),'ProductName')]");