[英]Finding the roots of a polynomial defined as a function handle in matlab
我需要能夠找到幾個幾乎是特征函數的多項式的根,但不完全是(而不是特征值,它更像是特征塊矩陣)。 該函數被定義為函數句柄,因為我沒有方程中系數的解析表達式(我大概可以找到它們,但我模型中的代數已經很混亂了)。
方程是
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。
正如丹尼爾所說
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.