✅作者簡介:熱愛科研的算法開發者,Python、Matlab項目可交流、溝通、學習。
🍎個人首頁:算法工程師的學習日志
分享一下通過多種不同的方法計算多項式的根。
- 數值根
- 使用代換法求根
- 特定區間内的根
- 符号根
數值根
roots
函數用于計算系數向量表示的單變量多項式的根。
例如,建立一個向量以表示多項式 x2−x−6,然後計算多項式的根。
p = [1 -1 -6];
r = roots(p)
r =
3
-2
按照慣例,MATLAB以列向量形式傳回這些根。
poly
函數将這些根重新轉換為多項式系數。對向量執行運算時,
poly
和
roots
為反函數,是以
poly(roots(p))
傳回
p
(取決于舍入誤差、排序和縮放)。
p2 = poly(r)
p2 =
1 -1 -6
對矩陣執行運算時,poly 函數會計算矩陣的特征多項式。特征多項式的根是矩陣的特征值。是以,roots(poly(A)) 和 eig(A) 傳回相同的答案(取決于舍入誤差、排序和縮放)。
使用代換法求根
通過使用代換法簡化方程來對涉及三角函數的多項式方程求解。一個變量的生成多項式不再包含任何三角函數。
例如,計算θ用于對該方程進行求解的值
3cos2(θ)−sin(θ)+3=0.
利用 cos2(θ)=1−sin2(θ),完全以正弦函數的方式表示該方程:
−3sin2(θ)−sin(θ)+6=0.
利用代換法 x=sin(θ),将該方程表示為簡單的多項式方程:
−3x2−x+6=0.
建立一個向量以表示多項式。
p = [-3 -1 6];
求多項式的根。
r = roots(p)
r = 2×1
-1.5907
1.2573
要撤消代換法,請使用 θ=sin−1(x)。
asin
函數計算反正弦。
theta = asin(r)
theta = 2×1 complex
-1.5708 + 1.0395i
1.5708 - 0.7028i
驗證
theta
中的元素是否為θ中用來對原始方程求解的值(在舍入誤差内)。
f = @(Z) 3*cos(Z).^2 - sin(Z) + 3;
f(theta)
ans = 2×1 complex
1.0e-14 *
-0.0888 + 0.0647i
0.2665 + 0.0399i
特定區間内的根
使用
fzero
函數求多項式在特定區間内的根。在其他使用情況下,如果要繪制多項式并想要知道特定根的值,則這種方法很适用。
例如,建立一個函數句柄以表示多項式 3x7+4x6+2x5+4x4+x3+5x2。
p = @(x) 3*x.^7 + 4*x.^6 + 2*x.^5 + 4*x.^4 + x.^3 + 5*x.^2;
在區間 [−2,1]
x = -2:0.1:1;
plot(x,p(x))
ylim([-100 50])
grid on
hold on
從繪圖中,多項式在
0
和另一個接近
-1.5
的位置各有一個簡單的根。使用
fzero
計算并繪制接近
-1.5
的根。
Z = fzero(p, -1.5)
Z = -1.6056
plot(Z,p(Z),'r*')
符号根
syms x
s = solve(x^2-x-6)
s =
-2
3
F = factor(x^2-x-6)
F =
[ x + 2, x - 3]