【无标题】

解三对角线性方程组的追赶法


追赶法在解三对角矩阵时非常实用,效率极高,特别对在隐式求解双曲型或者抛物型偏微分方程的时候。算法具体讲解如图所示
在这里插入图片描述
在这里插入图片描述

import matplotlib
import math
matplotlib.use('TkAgg')
import numpy as np  
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

def catchup(n, a, b, c, f):             #输入三个对角线上的值a,b,c,f是等号右边的向量
    m = np.zeros(f.size, dtype=float)#中间变量
    x = np.zeros(f.size, dtype=float)
    for i in range(1, n): #正序,追
        m[i] = a[i]/b[i-1]
        b[i] = np.copy(b[i]) -m[i]*c[i-1]
        f[i] = np.copy(f[i]) -m[i]*f[i-1]
        print(i, m[i], f[i-1], f[i])
    x[-1] = f[-1]/b[-1]
    for j in range (n-2, -1, -1):#倒序,赶
        x[j] = (f[j]-c[j]*x[j+1])/b[j]
    return x

def get_tridiagonal(A, F):# 获取三对角矩阵的对角线,其中主对角线是b,左对角线是a,右对角线是c
    n=F.size
    b = np.zeros(n,dtype=float)
    a=np.zeros(n,dtype=float)
    c=np.zeros(n,dtype=float)

    for i in range(0,n):
        b[i] = A[i,i]#     主对角线
        if i >0:            
            a[i] = A[i,i-1]
        if i<(n-1):
            c[i] = A[i,i+1]
    return n,a, b,c
#下面是例子,方程为Ax = F

A = np.array([[2.,-1.,0.,0.,0.],[-1.,2.,-1.,0.,0.],[0.,-1.,2.,-1.,0.],[0.,0.,-1.,2.,-1.],[0.,0.,0.,-1.,2.]] )
F=np.array([1.,0.,0.,0.,0.])
n,a,b,c = get_tridiagonal(A,F)

print(b)
print(a)
print(c)

result = catchup(n,a,b,c,F)
print(result)

相关推荐

  1. 标题

    2024-04-27 08:16:02       72 阅读
  2. 标题

    2024-04-27 08:16:02       69 阅读
  3. 标题

    2024-04-27 08:16:02       67 阅读
  4. 标题

    2024-04-27 08:16:02       77 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 08:16:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 08:16:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 08:16:02       87 阅读
  4. Python语言-面向对象

    2024-04-27 08:16:02       96 阅读

热门阅读

  1. 焊接机器人-常见焊接工艺参数

    2024-04-27 08:16:02       29 阅读
  2. TiDB系列之:TiCDC使用Changefeed完成数据同步任务

    2024-04-27 08:16:02       31 阅读
  3. spring boot中一般如何使用线程池

    2024-04-27 08:16:02       33 阅读
  4. http协商缓存和强缓存

    2024-04-27 08:16:02       32 阅读
  5. 【Go】匿名函数与闭包

    2024-04-27 08:16:02       36 阅读
  6. 每天学习一个Linux命令之sort

    2024-04-27 08:16:02       31 阅读
  7. linux安装PyCharm

    2024-04-27 08:16:02       32 阅读
  8. SQL 之 小技巧总结

    2024-04-27 08:16:02       29 阅读
  9. 机器学习中的K-均值聚类算法及其优缺点

    2024-04-27 08:16:02       36 阅读
  10. 前端面试题合集

    2024-04-27 08:16:02       27 阅读
  11. map与forEach的区别

    2024-04-27 08:16:02       34 阅读