我度过了愉快的时光学习朱莉娅。

问题描述 投票:0回答:1
朱莉娅(Julia)中的同一示例返回以下内容:

enter image description here

有一种方法可以使朱莉娅的输出变得更简单/更精确/更像是Mathematica的?

谢谢你!

在这种情况下,Mathematica倾向于在这种情况下使用精确的符号算法,即使它们不概括或扩展到更大的输入。朱莉娅(Julia)在大和小输入上都使用相同的算法,这些算法往往是数值的,对于整数输入而言并不精确。由enter image description hereeigvecs产生的特征向量始终将其标准化,因此它们具有单位标准:

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 eigenvector
1个回答
5
投票
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将特征向量作为行返回而不是列,但这似乎是它在做的事情。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.