三对角矩阵解算——TDMA解法(C++)
做三次样条曲线时,需要解三对角矩阵(Tridiagonal Matrices)。常用解法为Thomas Algorithm,又叫The tridiagonal matrix algorithm (TDMA)。它是一种基于高斯消元法的算法, 分为两个阶段:向前消元forward elimination和回代backward substitution。
理论学习:三对角矩阵(Tridiagonal Matrices)的求法:Thomas Algorithm(TDMA) - 马语者 - 博客园
一般公式:
使用C++使用TDMA算法解题:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;//构建三对角矩阵求解函数
//x[]未知数列向量; a[]三对角矩阵中下三角数组; b[]三对角矩阵对角数组;
//c[]三对角矩阵中上三角数组;N 矩阵维度; d[]是等号右侧结果矩阵
double *TDMA(double x[], double a[], double b[], double c[], double d[], int N){c[0]=c[0]/b[0];d[0]=d[0]/b[0];for(int i=1;i<N-1;i++)c[i]=c[i]/(b[i]-c[i-1]*a[i]);for(int i=1;i<N;i++)d[i]=(d[i]-d[i-1]*a[i])/(b[i]-c[i-1]*a[i]);x[N-1]=d[N-1];cout<<"x"<<N-1<<" "<<x[N-1]<<endl;for(int i=N-2; i>=0; i--){x[i]=d[i]-c[i]*x[i+1];cout<<"x"<<i<<" "<<x[i]<<endl;}return x;
}int main(){const int n=5;double b[n]={1,0,0,0,0};double D[n], u[n], v[n], x[n];fill(D,D+n,2);fill(u,u+n,-1);fill(v,v+n,-1);TDMA(x, u, D, v, b, n);
}
代码运行结果:
x4 0.166667
x3 0.333333
x2 0.5
x1 0.666667
x0 0.833333
三对角矩阵解算——TDMA解法(C++)相关推荐
- 空间谱专题13:联合解算DOA(ML/AP)
其中作者:桂. 时间:2017-10-16 07:51:40 链接:http://www.cnblogs.com/xingshansi/p/7675380.html 前言 主要记录二维测向中,分别利 ...
- 单目相机三维姿态解算
单目相机三维姿态解算 Abstract:This passage mainly describes how to solve pose(Yaw,Pitch,Roll)with signal camer ...
- MPU6050姿态解算1-DMP方式
MPU6050的姿态解算方法有多种,包括硬件方式的DMP解算,软件方式的欧拉角与旋转矩阵解算,软件方式的轴角法与四元数解算.本篇先介绍最易操作的DMP方式. MPU6050基本功能 3轴陀螺仪 陀螺仪 ...
- 三对角系统并行算法的研究概况
[摘 要]在科学和工程计算中,许多问题往往归结为三对角线性方程组的求解,其并行算法的研究具有重要意义.文章全面总结了当前求解三对角线性方程组的两类并行算法:直接解法和迭代解法,并介绍了其特点. [ ...
- hdu 4605 Magic Ball Game (在线主席树/离线树状数组)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4605 题意: 有一颗树,根节点为1,每一个节点要么有两个子节点,要么没有,每个节点都有一个权值wi .然后,有一个球,附带值x . 球 ...
- Git 远程分支的pull与push
远程分支信息查看 git branch -r #查看远程分支git branch -a #查看所有分支,本地和远程git remote show [remote-name] #查看远程仓库信息 其中g ...
- 三次样条插值三弯矩matlab_三次样条(cubic spline)插值
当已知某些点而不知道具体方程时候,最经常遇到的场景就是做实验,采集到数据的时候,我们通常有两种做法:拟合或者插值.拟合不要求方程通过所有的已知点,讲究神似,就是整体趋势一致.插值则是形似,每个已知点都 ...
- aitken插值方法的c++代码_无人驾驶路径规划技术-三次样条插值曲线及Python代码实现...
自动驾驶运动规划(Motion Planning)是无人驾驶汽车的核心模块之一,它的主要任务之一就是如何生成舒适的.碰撞避免的行驶路径和舒适的运动速度.生成行驶路径最经典方法之一就是是Sampling ...
- 字符串的全排列(字典序排列)
题目描述 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c 所能排列出来的所有字符串abc, acb, bac, bca, cab, cba. 题目分析 穷 ...
- [转]MegCup2015初赛题
原文链接 门票题:数独有多少种对解线上没有1的填法? 这道"门票题"虽说只是"热身",但还是有一定难度的.共有245名选手通过各种方法拿到了门票.下面,我们就为 ...
最新文章
- [Python学习] 专题五.列表基础知识 二维list排序、获取下标和处理txt文本实例
- [NOTE] sqli-labs Adv Injections
- 感谢球,感谢铁道部,感谢电信,我终于定到回武汉的票了
- 《信息安全系统设计基础》实验四 外设驱动程序设计
- python计算余弦距离_在Python中计算余弦距离的优化方法
- halcon create_ocr_class_svm 使用SVM分类器创建OCR分类器
- java.net.sockettimeoutexception read timed out
- java 递归调整为队列
- 算法导论2nd 10.1-7
- Linux 权限、磁盘操作命令-Linux基础环境命令学习笔记
- php7.3 mysql gd支持_配置PHP对gd库的支持
- If 的替代词汇:unless、in case..._60
- Glide加载相同地址图片,不缓存
- 一秒点击手机屏幕次数_抓住夏天的尾巴|与自动点击评论器邂逅一次
- 算法-罗马数字转成整数(leetcode13)
- 深度学习--概率图模型(一)
- 51单片机游戏(推箱子)
- Pacman基本使用
- Windows XP 启动过程jjhou
- 某代工大厂的勒索病毒处理案例
热门文章
- 如何使用FlashgameMaster修改游戏
- 屏蔽网站广告插件:广告终结者
- Java项目:图书馆借阅管理系统(java+Springboot+bootstrap+HTML+maven+Mysql)
- 什么是实时渲染,吃CPU还是显卡?
- 2022见证中国崛起从Python绘制中国地图开始:使用pyecharts最新版本绘制中国地图实例详解,个性化地图定制及常用参数解析
- actviti 工作流核心技术和实战-学习笔记(一)什么是工作流
- Xweibo插件版20110809重要补丁及下载
- Linux Block Driver - 1
- 飙泪怀旧:那些经典的老软件、老网站
- 信签纸有虚线怎么写_红底虚线信签纸模板