逆矩阵误差

时间:2016-03-03 15:10:54

标签: julia

我想通过将一个向量与它的trasposed进行乘法来做矩阵或数的逆,但它给了我一个错误。

v=[1,2,3]           
inv(v'*v)

`inv` has no method matching inv(::Array{Int64,1})
while loading In[45], in expression starting on line 2

我想在最后获得一个数字或方阵。 我不想使用pinv函数,因为我需要做进一步的操作,我需要一个数字或方形矩阵。 如何解决这个问题?提前致谢

2 个答案:

答案 0 :(得分:4)

v是一个3元素的向量,v'*v是一个1元素的向量:

julia> v = [1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> v'*v
1-element Array{Int64,1}:
 14

您无法反转矢量。如果您想计算v与自身的标量点积,可以使用dot函数,然后使用inv将其反转:

julia> dot(v,v)
14

julia> inv(dot(v,v))
0.07142857142857142

答案 1 :(得分:0)

这是在问了问题很长时间之后才出现的,但也许对某人有用。详细说明:

  • [1, 2, 3]是向量或一维向量(类型为Array{Int64,1}Vector{Int64}
  • [1 2 3]是1x3矩阵(类型为Array{Int64,2}
  • [1 2 3]'(本质上)是3x1矩阵(类型Array{Int64,2})。这不是很正确,它确实是它的一个懒惰(未评估)版本,但它会按应有的方式运行

因此,您可以实现以下目标:

v = [1 2 3]
display(v' * v)
inv(v' * v)

这现在由于正确的原因而失败:-),即3x3矩阵不可逆。

顺便说一句,您可以将v类型和长度Vector{T}类型的向量n转换成{{1}类型的Array{T,2}类型的n×1数组}。