4

我创建了一个矩阵 A,它是 300x4 数组。在目标中,我应该最小化 A*x,其中 x 是一个 1x4 向量。我的代码如下:

k = 3
m = length(u) 
n = k + 1
A = zeros(m,k+1)
for i = 1:m
    for j = 1:k+1
        A[i,j] = u[i]^(k+1-j)
    end
end
display(A)
using JuMP,Gurobi
m = Model(Gurobi.Optimizer)
@variable(m, x[1:k+1])
@objective(m, Min, sum((y - (A*x).^2) ))
optimize!(m)
uopt = value.(x)
println(x)

输出:

DimensionMismatch("dimensions must match")
Stacktrace:
 [1] promote_shape at .\indices.jl:154 [inlined]
 [2] promote_shape at .\indices.jl:145 [inlined]
 [3] -(::Array{Int64,1}, ::Array{GenericQuadExpr{Float64,VariableRef},1}) at .\arraymath.jl:38
\]
4

1 回答 1

5

如果 dim(A) = 300x4 和 dim(x) = 1x4 (取自您的问题的尺寸),则 A*x (如“矩阵乘法的乘积”)未定义为尺寸不匹配。请注意,如果您将 x 更改为 4x1 的尺寸,它会起作用,结果将具有 300x1 的尺寸。

如果这不能解决您的问题,请在您的代码中找到第 154 行(也可能是第 145 行),因为这些行中发生尺寸不匹配,并检查您在该行中的代码是否合理。

我实际上并没有验证您的代码(而且它似乎也不是完整的代码?),而且我知道有更多有能力的人可以帮助您。无论如何,我希望这会有所帮助。

快乐编码。

于 2020-07-17T01:16:08.633 回答