求方程的 似解

2022-09-08 17:51:11 字數 1280 閱讀 1796

問題描述:求乙個方程的*似解,例如不用程式語言的庫函式求乙個數的方根。

分析:這是我曾經的乙個企業面試題目,對於這種題目,大家可能會感到非常奇怪,因為程式語言本身都提供了庫函式或者介面,直接呼叫就可以求方根。然而考官卻不讓用庫函式和介面,那就意味著我們只能用其他方法了,考官其實想考察的是你的數學基礎了,考察你會不會靈活應用所學的數學知識。對於這個問題,有很多解法,比如採用二分法等,但是採用二分法可能只能對*方根有效,對於立方根可能就沒有辦法了,甚至更高。而且採用這種方法的比較次數過多,時間複雜度會更高,相比較窮舉肯定會好很多。這裡我提供一種方法可以利用較少的次數,找到解,我的這種方法,需要大家學過高等數學,才會看懂。這個方法的名字叫做「牛頓迭代法」,聽到牛頓,大家肯定會想到微積分吧!下面,下面正式開始介紹:

牛頓迭代法是牛頓在17世紀提出的一種在實數域和複數域上*似求解方程的方法,就是使用迭代的方法來求解函式方程的根。簡單地說,牛頓法就是不斷求取切線的過程。

多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的*似根就顯得特別重要。方法使用函式f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) = 0的單根附*具有*方收斂,而且該法還可以用來求方程的重根、復根,此時線性收斂,但是可通過一些方法變成超線性收斂。該方法被廣泛用於計算機程式設計中。

看到這裡應該明白了吧。

我舉乙個具體的例子,並且程式設計實現:

題目:編寫程式求乙個整數的*方根,精確到小數點後三位。

j**a**如下,**寫法比較通用,讀者可以很容易的轉換為其他語言實現。

1

import

j**a.lang.math;

2import

j**a.util.scanner;

3import j**a.text.*;

4public

class

sqr

12return

x2;13}14

public

static

void

main(string args)

2324 }

輸出結果為:

33的算術*方根是:1.732

通過這個面試題目,引出了牛頓迭代法,因此一定要掌握牛頓迭代法,不僅可以解決方根問題,還可以求解*似方程問題,以及其他問題,該方法被廣泛用於計算機程式設計中。

求方程的解

題目描述 求ax2 bx c 0方程的實根。a,b,c由鍵盤輸入.解方程要考慮係數a等於零的情況,且解x1 x2必須是float型。a等於零有兩種情況 b 0,b 0 a不等於零有三種情況 delta 0 0 0 先計算得到x1 x2,再printf輸出 輸入輸入三個數a,b,c 輸出輸出方程的實根...

求方程的解

求ax2 bx c 0方程的實根。a,b,c由鍵盤輸入.解方程要考慮係數a等於零的情況。a等於零有兩種情況 b 0,b 0 a不等於零有三種情況 delta 0 0 0 先計算得到根x1 x2,再輸出 輸入格式 輸入三個數a,b,c。輸出格式 輸出方程的實根 保留兩位小數 如果方程有1個實根,則輸出...

求特殊方程的正整數解

本題要求對任意給定的正整數 n,求方程x 2 y 2 n的全部正整數解。輸入在一行中給出正整數 n 10000 輸出方程x 2 y 2 n的全部正整數解,其中x y。每組解佔1行,兩數字間以1空格分隔,按 x的遞增順序輸出。如果沒有解,則輸出no solution。88410 28 20 2211n...