日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.3求根之牛顿迭代法

發布時間:2023/11/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.3求根之牛顿迭代法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 目錄
  • 前言
  • (一)牛頓迭代法的分析
    • 1.定義
    • 2.條件
    • 3.思想
    • 4.誤差
  • (二)代碼實現
    • 1.算法流程圖
    • 2.源代碼
  • (三)案例演示
    • 1.求解:\(f(x)=x^3-x-1=0\)
    • 2.求解:\(f(x)=x^2-115=0\)
    • 3.求解:\(f(x)=x^3-x^2-x+1\)
    • 4.求解:\(f(x)=x^4-4x^2+4=0\)

目錄

前言

今天我們講的是具有收斂速度快,能求重根的解方程之法,牛頓迭代法。

(一)牛頓迭代法的分析

1.定義

迭代公式如下:
\[ x_{k+1} = x_k-\frac{f(x_k)}{f\prime(x_k)} (k=0,1,2...) \]
迭代函數是:
\[ \varphi(x) = x_k-\frac{f(x_k)}{f\prime(x_k)} \]
由于$ \varphi(x)= x_k-\frac{f(x_k)}{f\prime(x_k)}$ 與原方程\(f(x)=0\) 等價。

\(k\rightarrow \infty\) 時,\(x_k\)就是\(f(x)=0\)的近似解。

該方法稱為牛頓迭代方法。

2.條件

  • f(x)函數是連續可導函數。

  • f(x)在局部收斂,當\(f(x) \times f\prime\prime(x)>0\)時,局部收斂。

    注意:牛頓迭代法的局部收斂性,很依賴于初始值的取法。

    也就是說,初始值的選取,決定該區域的收斂性。

  • 3.思想

    其總思想還是迭代的方法,只是其迭代公式是由泰勒展開得來的,其利用的是:用切線方程與x軸的交點來近似f(x)與x軸的交點。

    4.誤差

    任然用的是迭代法的誤差,前后兩次x的差的絕對值與我們給的精度比較。

    (二)代碼實現

    1.算法流程圖

    2.源代碼

    feval()函數

    def feval(string, a):"""根據值來計算數學表達式。:param string: 含有x未知數的數學表達式:param a: 自變量x的具體數值:return: 數學表達式的計算結果"""count = string.count("x")string = string.replace('x', '%f')t = (a, ) * countresult = eval(string % t)return result

    float_num()函數

    def flaot_num(x, r):"""處理保留幾位小數點的函數,四舍五入法:param x: 原始數據:param r: 誤差:return: 處理后的數據"""# 處理小數點的位數r = str(r)if "." in r:dian = r.index(".")size = len(r[dian + 1:])result = round(x, size)return resultelif "e" in r:dian = r.index("e")size = int(r[dian+2:])result = round(x, size)return resultelse:result = round(x, 0)return result

    牛頓迭代法

    """牛頓迭代法,迭代的思想,不斷逼近。 """ # 求導數需要的庫 import sympy as sp from my_math.func_math import feval, flaot_numdef new_fun(expr, x0, r):"""牛頓迭代法求解方程的根:param expr: 代函數表達式:param x0: 初始值:param r: 誤差:return: 計算的結果值"""x = sp.Symbol('x')k = 0# 一階導與二階導fx_1 = str(sp.diff(expr))fx_2 = str(sp.diff(fx_1))# 迭代公式y = "x-" + "("+expr + ")/(" + fx_1 + ")"# 判斷收斂性if feval(expr, x0)*feval(fx_2, x0) <= 0:print("函數處于該點區域不收斂")result = Noneelse:x1 = feval(y, x0)x2 = feval(y, x1)while abs(x2-x1) > r:x1 = feval(y, x2)x2 = feval(y, x1)k += 1print("次數:", k)print("x1:", x1)print("x2:", x2)result = flaot_num(x2, r)print("=" * 30)print("原始的數據是", x2)print("最后的結果是:", result)return resultif __name__ == '__main__':new_fun("x**4-4*x**2+4", 2, 10**-5)

    (三)案例演示

    1.求解:\(f(x)=x^3-x-1=0\)

    誤差:10^-5

    圖像分析(來確定初值)

    取在1.5為初始值

    運行結果:

    2.求解:\(f(x)=x^2-115=0\)

    誤差:10^-5

    圖像分析(來確定初值)

    取11為初始值。

    運行結果:

    3.求解:\(f(x)=x^3-x^2-x+1\)

    誤差:10^-5

    圖像分析(來確定初值)

    取初始值為:1.6

    運行結果:

    4.求解:\(f(x)=x^4-4x^2+4=0\)

    圖像分析(來確定初值)

    取初值是:0

    運行結果:

    我們換另一個點試試,取初始值為2

    運行結果:

    作者:Mark

    日期:2019/02/19 周二

    轉載于:https://www.cnblogs.com/zyg123/p/10400543.html

    總結

    以上是生活随笔為你收集整理的1.3求根之牛顿迭代法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。