- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个像这个例子的矩阵(我的实际矩阵可以大得多)
A = [-1 -2 -0.5;
0 0.5 0;
0 0 -1];
只有两个线性无关的特征值(重复特征值 -1)。我想获得 generalized eigenvectors 的完整基础.我知道如何做到这一点的一种方法是使用 Matlab 的 jordan
符号数学工具箱中的函数,但我更喜欢为数字输入设计的东西(实际上,有两个输出,jordan
对大矩阵失败:“MuPAD 命令错误:相似矩阵太大。”) .我不需要 Jordan 规范形式,它在数字上下文中是出了名的不稳定,只需要一个广义特征向量矩阵。是否有一个函数或函数组合可以以数字稳定的方式自动执行此操作,或者必须使用 the generic manual method (这样的程序有多稳定)?
注意:“广义特征向量”是指可用于扩充所谓 defective matrix 的不完整基础的非零向量。 .我不是指与通过求解 generalized eigenvalue problem 获得的特征值相对应的特征向量使用 eig
或 qz
(尽管后一种用法很常见,但我认为最好避免使用)。除非有人能纠正我,否则我不相信这两者是一样的。
更新 1 – 五个月后:
参见 my answer here了解如何为大于 82×82 的矩阵(此问题中我的测试矩阵的限制)象征性地获得广义特征向量。
我仍然对数字方案感兴趣(或者如果这些方案都与计算 Jordan 形式相关,那么这些方案可能会如何不稳定)。我不想盲目地实现已标记为该问题重复的线性代数 101 方法,因为它不是数值算法,而是用于评估学生的纸笔方法(我想它可以实现然而象征性地)。如果有人能指出我该方案的实现或数值分析,我会对此感兴趣。
更新 2 – 2015 年 2 月:在 R2014b 中测试时,以上所有内容仍然正确。
最佳答案
正如我在评论中提到的,如果您的矩阵有缺陷,但您知道在给定容差的情况下您希望将哪些特征向量/特征值对视为相同,您可以按照下面的示例继续操作:
% example matrix A:
A = [1 0 0 0 0;
3 1 0 0 0;
6 3 2 0 0;
10 6 3 2 0;
15 10 6 3 2]
% Produce eigenvalues and eigenvectors (not generalized ones)
[vecs,vals] = eig(A)
这应该输出:
vecs =
0 0 0 0 0.0000
0 0 0 0.2236 -0.2236
0 0 0.0000 -0.6708 0.6708
0 0.0000 -0.0000 0.6708 -0.6708
1.0000 -1.0000 1.0000 -0.2236 0.2236
vals =
2 0 0 0 0
0 2 0 0 0
0 0 2 0 0
0 0 0 1 0
0 0 0 0 1
我们看到前三个特征向量与工作精度几乎相同,最后两个特征向量也是如此。在这里,您必须了解问题的结构并确定具有相同特征值的相同特征向量。这里,特征值完全相同,所以我们知道要考虑哪些特征值,我们将假设对应的向量 1-2-3 和向量 4-5 相同。 (在实践中,您可能会检查特征向量差异的范数并将其与您的容忍度进行比较)
现在我们继续计算广义特征向量,但这不适用于简单地用 matlab 的 \
求解,因为显然 (A - lambda*I)
不是满级。所以我们使用伪逆:
genvec21 = pinv(A - vals(1,1)*eye(size(A)))*vecs(:,1);
genvec22 = pinv(A - vals(1,1)*eye(size(A)))*genvec21;
genvec1 = pinv(A - vals(4,4)*eye(size(A)))*vecs(:,4);
应该给出:
genvec21 =
-0.0000
0.0000
-0.0000
0.3333
0
genvec22 =
0.0000
-0.0000
0.1111
-0.2222
0
genvec1 =
0.0745
-0.8832
1.5317
0.6298
-3.5889
哪些是我们的其他广义特征向量。如果我们现在检查这些以获得像这样的乔丹范式:
jordanJ = [vecs(:,1) genvec21 genvec22 vecs(:,4) genvec1];
jordanJ^-1*A*jordanJ
我们得到:
ans =
2.0000 1.0000 0.0000 -0.0000 -0.0000
0 2.0000 1.0000 -0.0000 -0.0000
0 0.0000 2.0000 0.0000 -0.0000
0 0.0000 0.0000 1.0000 1.0000
0 0.0000 0.0000 -0.0000 1.0000
这是我们的 Jordan 范式(有工作精度误差)。
关于matlab - 在 Matlab 中以数值方式查找广义特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601354/
这是我感兴趣的测试: http://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm 如何将这段代码改编成接受数值向量并返回指定要删除
我使用 TensorFlow 1.12 基于 Material 进行语义(图像)分割。使用多项式交叉熵损失函数,这会产生不错的结果,尤其是考虑到我使用的训练数据量稀疏,mIoU 为 0.44: 然而,
AFAIK,在 Hindley-Milner 类型系统中使用的统一可以通过在构造函数位置允许类型变量并在这种情况下放宽 arity 约束来推广以统一更高级的类型: f a ~ T a1 b1 f ~
在阅读 article 时在 Javascript 中实现通用 curry 时,我偶然发现了这段代码。 function curry(fn) { return (...xs) => { i
我想使用 C++14 中引入的广义 lambda 捕获(有关解释,请参阅 Move capture in lambda)。但是,我的代码的其余部分是 C++11 友好的。我想按照以下方式做一些事情 #
我正在尝试实现 this paper 中介绍的广义 Hough 变换在 MATLAB 中。我也试过使用 this document理解算法。我一直在研究如何计算梯度角以找到要在 R 表中使用的 Φ。
假设我们有这样一段代码: std::vector> tasks; 然后我们添加这样的任务: tasks.push_back([]() { // ... } 这行得通。但现在我们要添加该任务:
问题:为什么会打印出以下内容: ChildB___Parent of ChildB ChildB___Parent of ChildB 而不是我认为它应该打印出来的: ChildA___Parent
W3C 推荐 RDF 1.1 概念和抽象语法 defines多么广义 RDF 三元组 是(即,一个非标准三元组,其中每个主语/谓语/宾语都可以是 IRI/bnode/文字)。 关于它的可能用途,它给出
我是一名优秀的程序员,十分优秀!