有一种方法可以使朱莉娅的输出变得更简单/更精确/更像是Mathematica的?
谢谢你!
在这种情况下,Mathematica倾向于在这种情况下使用精确的符号算法,即使它们不概括或扩展到更大的输入。朱莉娅(Julia)在大和小输入上都使用相同的算法,这些算法往往是数值的,对于整数输入而言并不精确。由eigvecs
产生的特征向量始终将其标准化,因此它们具有单位标准:
julia> A = [1 1 1; 0 2 2; 0 0 3];
julia> B = eigvecs(A)
3×3 Matrix{Float64}:
1.0 0.707107 0.557086
0.0 0.707107 0.742781
0.0 0.0 0.371391
julia> mapslices(norm, B, dims=1)
1×3 Matrix{Float64}:
1.0 1.0 1.0
MATHEMATICA显然没有这样做,这使其可以为特征向量提供具有不可或缺的条目。通常,整体特征向量不存在,这引发了一个问题:Mathematica如何决定在此处使用确切的算法?谁知道。它使用什么算法?另外,谁知道。 Mathematica是一个了不起的软件,但它是封闭的来源,因此它是一个黑匣子。他们可能会记录下来,如果他们愿意,有人可以查看文档,并向此问题发布另一个答案,但是与开源软件不同,没有办法实际查看它在做什么。
如果您怀疑一个矩阵具有具有积分条目的特征向量,则可以使用以下黑客试图恢复它们:对于每列,将零附加到列,然后在填充列中的任何两个条目之间找到最小的正差;然后将原始列除以该差异。这是一些为您的示例实现的代码:julia> B ./ mapslices(v -> minimum(filter(>(0), [v;0] .- [v;0]')), B, dims=1)
3×3 Matrix{Float64}:
1.0 1.0 3.0
0.0 1.0 4.0
0.0 0.0 2.0
您可以看到,它恢复了Mathematica报告的整数值的特征向量。我有点惊讶Mathematica将特征向量作为行返回而不是列,但这似乎是它在做的事情。