查找在MATLAB中定义为函数句柄的多项式的根

时间:2019-12-20 20:13:16

标签: matlab polynomials equation-solving

我需要能够找到几个几乎是特征函数但并非完全是特征函数的多项式的根(不是特征值,它更像一个特征块矩阵)。该函数被定义为函数句柄,因为我没有方程上系数的解析表达式(我可以找到它们,但是我模型中的代数已经很杂乱了。)

等式是

charA = @(k1,k2) det([k1*eye(N),zeros(N);zeros(N),k2*eye(N)]*Amatrix - eye(2*N));
charB = @(k1,k2) det([k1*eye(N),zeros(N);zeros(N),k2*eye(N)]*Bmatrix - eye(2*N));

并且我需要找到每个根的所有根,因为系统的解是满足charA(k1,k2)= 0和charB(k1,k2)= 0(目前,我只是相信这些矩阵的推导使得存在这样的解决方案,但是出于这个问题的目的-查找以这种方式定义的多项式的所有根-这并不重要。

有什么办法可以使用该函数句柄并将其转换为系数矩阵,还是在Matlab中定义为函数句柄的多项式的求解器?如果它有任何变化,矩阵不是很大,但是它们是84x84,即N = 42。

1 个答案:

答案 0 :(得分:2)

Daniel

  • 使用符号数学工具箱构建多项式
  • 然后使用solve()查找根源

示例代码如下,N = 2

rng(0)
%Unknowns
syms k1 k2
N = 2;
Amatrix = rand(2*N);
Bmatrix = rand(2*N);

charA = det([k1*eye(N),zeros(N);zeros(N),k2*eye(N)]*Amatrix - eye(2*N));
charB = det([k1*eye(N),zeros(N);zeros(N),k2*eye(N)]*Bmatrix - eye(2*N));

% solver 
solution = solve(charA == 0, charB == 0);

% Convert syms to numeric, specifying precision as 3 
k1_solution = vpa(solution.k1, 3)
k2_solution = vpa(solution.k2, 3)

% Only real solution
k1_solution_real = vpa(k1_solution(k1_solution == real(k1_solution)), 3)
k2_solution_real = vpa(k2_solution(k2_solution == real(k2_solution)), 3)

解决方案

  • 全部
k1_solution =

          0.475
          -2.52
         0.0161
 - 1.58 + 1.79i
 - 1.6 - 1.79i
 - 2.0 - 0.863i
 - 2.0 + 0.865i
           11.2


k2_solution =

            0.345
           -0.869
            0.946
 - 1.37 + 0.0219i
 - 1.37 - 0.0219i
     1.69 + 3.24i
     1.69 - 3.24i
            -5.65
  • 仅限真实
k1_solution_real =

  0.475
  -2.52
 0.0161
   11.2


k2_solution_real =

  0.345
 -0.869
  0.946
  -5.65
  • 第一个根解决方案
k1 = 0.475 and k2 = 0.345