如何在MATLAB中求解行列式?

3
作为一个简单的例子,假设你有以下矩阵:
M = [omega 1;
     2     omega];

您需要解决满足条件det M = 0omega值。在MATLAB中如何做到这一点?

这肯定是一件简单的事情,但我还没有找到相应的函数。

3个回答

13

对于矩阵可能是任意值的一般情况,您需要创建矩阵的符号表示,计算行列式,并解决感兴趣的变量。您可以使用来自符号数学工具箱的函数SYMDETSOLVE进行此操作:

>> A = sym('[w 1; 2 w]');  % Create symbolic matrix
>> solve(det(A),'w')       % Solve the equation 'det(A) = 0' for 'w'

ans =

  2^(1/2)
 -2^(1/2)

>> double(ans)             % Convert the symbolic expression to a double

ans =

    1.4142
   -1.4142

创建初始矩阵A的方法也有不同。上面,我用一个字符串表达式来创建它。然而,我也可以使用SYMSw定义为符号变量,然后像在MATLAB中一样构造矩阵:

syms w
A = [w 1; 2 w];

现在 A 是一个符号矩阵,就像第一个例子中一样。


我不知道符号矩阵...这很酷。你有我的支持。 - monksy
史蒂文 <-- 他说的话。而且正是我希望得到的东西...胜利! - Rook
呃,又是Matlab的问题...我对此并不完全满意。我不喜欢sym接收字符串而不是矩阵。这可能会在以后引起一些挫败感。 - monksy
@steven:我最近编辑了我的回答,已经在一定程度上解决了你的问题。此外,如果你要将一个数字矩阵传递给SYM函数,就不需要将其作为字符串传递。例如:A = sym([1 1; 2 2]) - gnovice

2
如果您没有符号工具箱,那么可以使用在文件交换中找到的sympoly工具箱。
sympoly omega
roots(det([omega 1;2 omega]))
ans =
      -1.4142
       1.4142

0

好,确定因子是: om * om - 1*2 = 0

所以你可以得到:om*om = 2

正式的定义为:[a b ; c d] = ad - bc

我建议你简化确定因子,并找到一个求解器来解决未知数。


3
当然。但上面提供的只是一个例子,我的问题并不会这么简单。 - Rook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接