Matrix Julia矩阵向量除算子的定义 我偶然发现了一些我认为很奇怪的东西。 以代码为例 A = reshape(1:6, 3,2) A/[1 1]

Matrix Julia矩阵向量除算子的定义 我偶然发现了一些我认为很奇怪的东西。 以代码为例 A = reshape(1:6, 3,2) A/[1 1],matrix,julia,Matrix,Julia,给 3×1 Array{Float64,2}: 2.5 3.5 4.5 据我所知,通常这种划分给出了列的加权平均值,其中每个权重与向量的相应元素成反比 所以我的问题是,为什么它是这样定义的 这个定义的数学依据是什么?它是|A-v*[1]的最小误差解|₂–过度约束,通常没有精确解(即值v,因此范数精确为零)。/和\的行为严重超载,通过各种技术和启发式方法解决了欠约束和过约束系统。这种重载是否是一个好主意是有争议的,但这是人们在Matlab和Octave中对这些操作的期望,在一个操作符中提供

3×1 Array{Float64,2}:
 2.5
 3.5
 4.5
据我所知,通常这种划分给出了列的加权平均值,其中每个权重与向量的相应元素成反比

所以我的问题是,为什么它是这样定义的


这个定义的数学依据是什么?

它是
|A-v*[1]的最小误差解|₂
–过度约束,通常没有精确解(即值
v
,因此范数精确为零)。
/
\
的行为严重超载,通过各种技术和启发式方法解决了欠约束和过约束系统。这种重载是否是一个好主意是有争议的,但这是人们在Matlab和Octave中对这些操作的期望,在一个操作符中提供这么多功能通常非常方便。

a
成为
NxN
矩阵,
b
成为
Nx1
列向量。然后
\
解算
Ax=b
/
解算
xA=b

正如Stefan提到的,这被扩展到欠定情况,作为最小二乘解。这是通过QR或SVD分解完成的。请参阅这些算法的详细信息,了解为什么会出现这种情况。提示:OLS估计量的线性形式实际上可以写成矩阵分解的解,所以这是一样的

现在你可能会问,它实际上是如何解决的?这是一个复杂的问题。本质上,它使用矩阵分解。但使用哪种矩阵分解取决于矩阵类型。这是因为高斯消去是O(n^3),所以一般来说处理这个问题是不好的。但只要你能专攻,你就能得到提速。因此本质上是
\
(和
/
,它转置和调用
\
)检查一组特殊类型,并根据矩阵类型选择一个因子分解或其他算法(LU、QR、SVD、Cholesky等)。很好地解释了这一点。这里有很多细节,当矩阵稀疏时,它会得到更多细节。还应该提到,因为这是另一组用于求解
Ax=b
的算法


大多数应用数学问题归结为线性代数,解决
Ax=b
是最重要和最困难的问题之一,这就是为什么对这一主题有大量研究的原因。事实上,你可能会说,数值线性代数领域的绝大多数都致力于寻找快速方法来求解特定矩阵类型的Ax=b
\
本质上是将所有直接(非迭代)方法放在一个方便的运算符中。

看到
pinv([1])≈ [5、.5]
A*pinv([1])≈ [2.5、3.5、4.5]
。这不是说本质上是一样的吗?虽然是的,但用不同的方式解释它肯定是有帮助的。是的,从表面上看,这是一个循环论证。不过,它可能对某些人有用,因为它有效地将``运算符的黑匣子推上了一个层次,而不是将整个过程深入到线性代数中。TL;DR:你想乘以逆矩阵,但非平方矩阵是(一个令人惊讶的可读性数学维基部分!)。我尝试将该副本添加到答案中,但无法找到一种方法来添加它,而不会使答案更加混乱
pinv
似乎是一种计算答案的方法,而不是一种定义计算内容的好方法。
x=[2.5 3.5 4.5]
假设用
b=[1,1]
解决
x*a=[23.0,54.5]
。我做错了什么?哦,这两者都转换了吗?是
xA'=b
?不知道,与
A'
尺寸不匹配。我想我懒得读RTFM关于
/
::好吧,我懒得读Matlab链接。产生混淆的原因是
A/b
解算
x*b=A
(而
A\b
解算
A*x=b
)。事实上,
[2.5,3.5,4.5]*[11]
给出了
a
的最小二乘近似值。谢谢