利用OpenCV求解多項式方程的根

2021-10-08 22:38:58 字數 1370 閱讀 6207

對於乙個多項式方程:a0+

a1x+

a2x2

+...

+anx

n=0a_0+a_1x+a_2x^2+...+a^nx^n=0

a0​+a1

​x+a

2​x2

+...

+anx

n=0而言,想要準確求得解析解是一件比較困難的事,特別是次數比較高的時候,一般我們可以利用數值方法求得數值解。

先說明一下多項式方程的根的特點,對於n次多項式方程,實數根的可能情況包括(此處只說明實數根):

1、有n個不同實根;

2、根的數量小於n,大於0,即有多個相同實根;

3、無實數根,即方程所表示的曲線與x軸無交點;

在opencv中提供了cv::sovlepoly函式可以用來求解多項式方程的數值解,非常方便。

官方文件中給出了定義:

輸入為係數矩陣,從0次到n次排布,

輸出為乙個列數為2的矩陣,每一行是乙個根,由實部和虛部組成,從這也能看出這個函式能夠求出方程所有的根,包括虛根。

返回值為誤差值。

直接上測試**:

#include

#include

#include

using std::cout;

using std::endl;

intmain()

; std::vector<

double

> coefs1 =

; std::vector<

double

> coefs2 =

; std::vector<

double

> coefs3 =

; std::vector<

double

> roots;

cv::mat rots;

auto ret = cv::

solvepoly

(coefs3, rots)

; cout<

type()

<<

" "<

cout<

cout<

return0;

}

注意區分使用不同的係數時求得的根的結果的不同。

【參考】

1、opencv:solvepoly多項式方程求解函式

多項式方程的輸出

一元nn次多項式可用如下的表示式表示 f x a nx n a x cdots a 1x a 0,a n ne 0f x an xn an 1 xn 1 a1 x a0 an 0 其中,a ix iai xi稱為ii次項,a iai 稱為ii次項的係數。給出乙個一元多項式各項的次數和係數,請按照如下...

Horner規則求解多項式的值

一.目的與背景知識 1 生成乙個多項式 2 根據horner規則求解多項式的值。偽 如下 y 0 for i n down to 0 y a i x y 上述偽 即描述了求解a 0 a 1 x 1 a n x n 二.實現 1 多項式展示與計算類 include namespace myalgori...

MATLAB多項式及多項式擬合

多項式均表示為陣列形式,陣列元素為多項式降冪係數 1.polyval函式 求多項式在某一點或某幾個點的值.p 1,1,1 x 2 x 1 x 1,0,1 y polyval p,x 另外求函式在某一點或某幾個點的值可以用函式feval.x 1,0,1 y feval x exp x x 注意用的乘法...