數值分析知識點總結

一、求解非線性方程

1、二分法

二分法又稱為折半法,是最簡單、最易於理解的一種迭代方法。它的基本思路就是根據函數值定位目標區間,然後縮小區間範圍,直到滿足精度要求或者次數達到了迭代次數上限。下面是二分法求解非線性方程的Python代碼示例:

def f(x):
    return x ** 2 - 2

def bisection(a, b, eps, N):
    i = 0
    while i < N:
        c = (a + b) / 2
        if abs(f(c)) < eps:
            return c
        if f(a) * f(c) < 0:
            b = c
        else:
            a = c
        i += 1
    return None

print(bisection(1, 2, 1e-6, 100))

2、牛頓法

牛頓法是求解非線性方程最常用的方法之一,優點是收斂速度快,但是它的缺點是需要計算函數的導數,在一些情況下可能比較麻煩。下面是牛頓法求解非線性方程的Python代碼示例:

def f(x):
    return x ** 2 - 2

def df(x):
    return 2 * x

def newton(a, eps, N):
    i = 0
    x = a
    while i < N:
        x = x - f(x) / df(x)
        if abs(f(x)) < eps:
            return x
        i += 1
    return None

print(newton(1.5, 1e-6, 100))

二、插值與擬合

1、拉格朗日插值

拉格朗日插值是一種常用的插值方法,它的基本思路是通過已知點的函數值來構造一個多項式函數,從而求解未知點的函數值。下面是使用拉格朗日插值求解函數在給定點的函數值的Python代碼示例:

import numpy as np

def lagrange(x, y, xx):
    n = len(x)
    yy = 0
    for i in range(n):
        l = 1
        for j in range(n):
            if i != j:
                l *= (xx - x[j]) / (x[i] - x[j])
        yy += l * y[i]
    return yy

x = np.array([0, 1, 2])
y = np.array([1, 2, 1])
print(lagrange(x, y, 0.5))

2、最小二乘擬合

最小二乘擬合是通過最小化誤差平方和來尋找最佳的擬合曲線,它可以用於線性擬合和非線性擬合。下面是使用最小二乘擬合方法對一組數據進行線性擬合的Python代碼示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1.2, 1.9, 3.2, 4.1])

A = np.vstack([x, np.ones(len(x))]).T
a, b = np.linalg.lstsq(A, y, rcond=None)[0]

plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, a * x + b, 'r', label='Fitted line')
plt.legend()
plt.show()

三、數值微分與數值積分

1、三點公式

三點公式是一種常用的數值微分方法,它的基本思路是利用已知點周圍的函數值,通過求導公式計算出目標點的導數值。下面是使用三點公式對給定函數在給定點計算導數值的Python代碼示例:

import numpy as np

def f(x):
    return np.exp(x)

def df(x, h):
    return (f(x+h)-f(x-h)) / (2*h)

print(df(0, 1e-6))

2、梯形法

梯形法是一種常用的數值積分方法,它的基本思路是將函數圖像下面的區域拆分成多個梯形形狀,然後通過計算每個梯形的面積來估計積分值。下面是使用梯形法計算給定函數在給定區間內的定積分值的Python代碼示例:

import numpy as np

def f(x):
    return np.exp(-x ** 2)

def trapezoidal(a, b, n):
    h = (b - a) / n
    x = np.linspace(a, b, n+1)
    y = f(x)
    I = h * (np.sum(y) - 0.5 * (y[0] + y[-1]))
    return I

print(trapezoidal(0, 1, 10000))

四、常微分方程數值解

1、龍格-庫塔法

龍格-庫塔法是一種常用的數值解常微分方程方法,它的基本思路是通過多次迭代,逐步逼近每一個離散時間點上的解。下面是使用龍格-庫塔法求解一階常微分方程的Python代碼示例:

import numpy as np

def f(t, y):
    return -y

def RK11(f, t0, y0, h, N):
    t = np.zeros(N+1)
    y = np.zeros(N+1)
    t[0], y[0] = t0, y0
    for i in range(N):
        k1 = f(t[i], y[i])
        k2 = f(t[i] + h, y[i] + h*k1)
        y[i+1] = y[i] + h * (k1 + k2) / 2
        t[i+1] = t0 + (i+1) * h
    return t, y

t, y = RK11(f, 0, 1, 0.1, 10)
print(y)

2、歐拉法

歐拉法是一種簡單的數值解常微分方程方法,它的基本思路是通過泰勒級數展開對微分方程進行逼近,從而求解未來的函數值。下面是使用歐拉法求解一階常微分方程的Python代碼示例:

import numpy as np

def f(t, y):
    return -y

def euler(f, t0, y0, h, N):
    t = np.zeros(N+1)
    y = np.zeros(N+1)
    t[0], y[0] = t0, y0
    for i in range(N):
        y[i+1] = y[i] + h * f(t[i], y[i])
        t[i+1] = t0 + (i+1) * h
    return t, y

t, y = euler(f, 0, 1, 0.1, 10)
print(y)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286895.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 03:49
下一篇 2024-12-23 13:06

相關推薦

  • diff函數是否能夠實現數值求導?

    答案是可以的。下面將從數學原理、實現過程和可行性三個方面對此進行詳細闡述。 一、數學原理 求導的定義是函數在某一點的變化率,也即在該點處的斜率。而數值求導便是使用有限差分近似求解該…

    編程 2025-04-28
  • Navicat導出欄位識別為文本而不是數值

    解決方法:使用特定的代碼將導出的欄位識別為文本,而不是數值,下面將從多個方面進行詳細闡述。 一、ASCII碼轉換 在導出的文件中,將數值欄位使用ASCII碼轉換,即可讓這些欄位被識…

    編程 2025-04-28
  • 數值轉字元串函數用法介紹

    本文將詳細介紹數值轉字元串函數,為了讓讀者更好的理解,我們將從以下幾個方面進行探討: 一、函數概述 數值轉字元串是一種將數字類型的數據轉化為字元串類型的操作,也是編程過程中常用的一…

    編程 2025-04-27
  • Python數值數據類型包括

    Python是當今世界上最受歡迎的編程語言之一。它是一種高級動態解釋型語言,包含許多內置的數據結構和函數。Python支持多種數據類型,包括數值數據類型,這些數據類型對於科學計算和…

    編程 2025-04-27
  • Python定義數值

    Python是一種高級語言,它是一種自由、開源、跨平台的解釋型語言。Python中定義數值是很常見的操作,下面將從多個方面對Python定義數值進行詳細的闡述。 一、數值類型 在P…

    編程 2025-04-27
  • 軟體設計師知識點詳解

    一、面向對象設計 面向對象編程(OOP)是一種編程思想,也是現今被廣泛應用的一種編程範式。它包括類、對象、封裝、繼承、多態等概念。 封裝是OOP的一個核心概念,它在軟體開發中起到了…

    編程 2025-04-24
  • Java基礎知識點筆記

    一、數據類型 Java中的數據類型可以分為:整型、浮點型、字元型和布爾型。其中,整型包括byte、short、int和long,分別表示不同範圍的整數,如byte表示-128到12…

    編程 2025-04-22
  • C++知識點總結

    一、基本語法 C++語言是一門基於C語言的編程語言,因此C++的基本語法與C語言相似,主要包括以下幾個方面: 1. 數據類型 C++的數據類型可以分為基本數據類型和衍生數據類型兩種…

    編程 2025-04-02
  • Python稀疏矩陣coo_matrix詳解,優化大規模數值計算

    一、什麼是稀疏矩陣? 矩陣是數學中的一個重要概念,它是由若干個數排成的矩形陣列,稱為矩陣元素。而稀疏矩陣則是指其中大部分元素都為零的矩陣。在實際計算中,大多數矩陣的元素都是零,稀疏…

    編程 2025-04-02
  • 如何精確將double數值取到小數點後兩位?

    一、使用DecimalFormat類實現精確的數值取捨 Java中提供了DecimalFormat類來格式化double數值,從而實現對數值的精確取捨。DecimalFormat默…

    編程 2025-02-05

發表回復

登錄後才能評論