如何在Matlab中得到具有特定归一化条件的特征值和特征向量

时间:2016-09-21 00:14:28

标签: matlab eigenvalue eigenvector

当我想计算复数4 * 4矩阵M的特征值和特征向量时,我有一个问题。 我们来举个例子:

M =

[7.71 0.88 -0.47i 0.11i;

0.88 19.09 0.11i -0.02i;

-0.47i 0.11i -7.71 -0.88;

0.11i -0.02i -0.88 -3.44。]

类似于M*V=D*V,此处V = [a1, a2, i *b1, i *b2]D是特征值。 a1,a2,b1,b2是实数值,i是虚数索引。

如果我们直接从MATLAB使用命令eig(M),它将给出norm(V)=sqrt(a1^2+a2^2+b1^2+b2^2)=1

的特征值

但现在我需要条件a1^2+a2^2+(i *b1)^2+(i *b2)^2=1而不是norm(V)=1的特征值

如果有人提示,请发表评论。 非常感谢。

祝你好运, 麦克

1 个答案:

答案 0 :(得分:0)

对于解决方案的第一部分,需要符号工具箱。因为我没有手边的符号工具箱所以我提供了 Maxima 的解决方案:

你有4个复数形成一个特征向量说:

A: a1 + %i * a2;
B: b1 + %i * b2;
C: c1 + %i * c2;
D: d1 + %i * d2;

%i符号代表虚构单位。 向量的范数2是:

sqrt(cabs(A) ^ 2 + cabs(B) ^ 2 + cabs(C) ^ 2 + cabs(D) ^ 2).

这里cabs表示复杂的腹肌。 所以我们寻找一个数字v,这样如果我们将向量的元素除以它,结果向量就具有这个属性:

(cabs(A / v) ^ 2 + cabs(B / v) ^ 2 + (%i * cabs(C / v)) ^ 2 + (%i * cabs(D / v)) ^ 2) = 1;

我们可以求解v

的等式
A: a1 + %i * a2;
B: b1 + %i * b2;
C: c1 + %i * c2;
D: d1 + %i * d2;
eq: (cabs(A / v) ^ 2 + cabs(B / v) ^ 2 + (%i * cabs(C / v)) ^ 2 + (%i * cabs(D / v)) ^ 2) - 1;
solve(eq , v);

<强>结果

v = sqrt([a1 ^ 2 + a2 ^ 2 + b1 ^ 2 + b2 ^ 2 - c1 ^ 2 - c2 ^ 2 - d1 ^ 2 - d2 ^ 2 ] )
  =sqrt (cabs(A) ^ 2 + cabs(B) ^ 2 - cabs(C) ^ 2 - cabs(D) ^ 2)

规范化特征向量的Matlab代码:

M=[...

7.71 0.88 -0.47i 0.11i;

0.88 19.09 0.11i -0.02i;

-0.47i 0.11i -7.71 -0.88;

0.11i -0.02i -0.88 -3.44];

% with nobalance eigenvector do not necessarily normalized
[VEC, D] = eig(M, 'nobalance');
ABS2 = abs(VEC).^2;
ABS2(3:4,:) = -ABS2(3:4,:);
v = sqrt(sum(ABS2,1));
VEC = bsxfun(@rdivide,VEC, v)