数值分析知识点总结

一、求解非线性方程

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/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

发表回复

登录后才能评论