非線性方程求解的常用方法


公式法

對於一元二次方程的一般形式:\(ax^2 + bx + c = 0\)

可以使用韋達公式來求方程的兩個實數解\(x = \frac{-b+\sqrt{b^2-4ac}}{2a}\),兩根之和\(x_1 + x_2 = -\frac{b}{a}\) ,兩根之積\(x_1 * x_2 = \frac{c}{a}\),當Δ<0時,得到的是不相等的兩個虛數根,\(x = \frac{-b+i\sqrt{4ac-b^2}}{2a}\),一元三次方程有卡爾丹公式和盛金公式。

二分逼近法

對一元二次方程f(x)來說,給定區間[a, b],如果f(a)<0, f(b)>0,則可以按照下列方法進行逼近:

  1. 如果\(f(\frac{a+b}{2})= 0\),則\(\frac{a+b}{2}\)就是零點;
  2. 如果\(f(\frac{a+b}{2}) < 0\),則零點在區間\([\frac{a+b}{2}, b]\)上,令\(a = \frac{a+b}{2}\),繼續從第1步開始判斷;
  3. 如果\(f(\frac{a+b}{2}) > 0\),則零點在區間\([a, \frac{a+b}{2}]\)上,令\(b = \frac{a+b}{2}\),繼續從第1步開始判斷。

通常只要在精度允許的范圍內逼近零時就可以結束二分逼近的過程。二分法的局限在於不能計算復根和重根。

牛頓迭代法

牛頓迭代法的數學原理

牛頓迭代法

在x軸找一點\(x_0\),過點\(x_0\)垂直於x軸做垂線,交\(f(x)\)於點\(f(x_0)\),然后再過\(f(x_0)\)點做函數的切線,得到切線與x軸的交點記為\(x_{n+1}\),一直循環下去,最終會得到根的近似值:

\[x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} \]

此方法也可以用來根號的值,比如要求\(\sqrt c\)的值,可以構造一個函數\(f(x) = x^2 -c\),求這個函數的右根即是得到$\sqrt c $的值。利用公式,

\[設x_n = t,則 x_{n+1} = t - \frac{t^2 - c}{2t} = \frac{t+\frac{c}{t}}{2} \]

得到的\(x_{n+1 }\)設為新的t,帶入公式,一直等到誤差小於特定的值,再返回答案,得到的t就是開根的值。初始時可以令t=c,便於計算。這段函數的代碼如下:

public static double sqrt(double c) {
    if(c < 0)
    	return Double.NaN;
    double err = 1e-15;
    double t = c;
    while(Math.abs(t-c/t) > err*t)
    	t = (c/t+t) / 2.0;
    return t;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM