C++实现线性方程组运算函数 LDL法
void LDL(int n, double* a, double* b, double* x)//LDL法,参数依次:阶数 系数矩阵a 常数矩阵b
{double* U = new double[n * n];double* y = new double[n];double* z = new double[n];double* L = new double[n * n];double* D = new double[n];for (int i = 0; i < n; i++)//用LU先算出L U{for (int j = 0; j < n; j++){*(U + i * n + j) = 0;//暂时全部赋值为0if (i == j){*(L + i * n + j) = 1;//对角线赋值为1}else{*(L + i * n + j) = 0;//其他暂时赋值为0}}}for (int k = 0; k < n; k++)//计算u和l矩阵的值{for (int j = k; j < n; j++){*(U + k * n + j) = *(a + k * n + j);//第一行for (int r = 0; r < k; r++)//接下来由L的前一列算u的下一行{*(U + k * n + j) = *(U + k * n + j) - (*(L + k * n + r) * (*(U + r * n + j)));}}for (int i = k + 1; i < n; i++)//计算L的列{*(L + i * n + k) = *(a + i * n + k);for (int r = 0; r < k; r++){*(L + i * n + k) = *(L + i * n + k) - (*(L + i * n + r) * (*(U + r * n + k)));}*(L + i * n + k) = *(L + i * n + k) / (*(U + k * n + k));}}for (int i = 0; i < n; i++)//把D赋值{*(D + i) = *(U + i * n + i);}for (int i = 0; i < n; i++)//由Lz=b算z{*(z + i) = *(b + i);for (int j = 0; j < i; j++){*(z + i) = *(z + i) - *(L + i * n + j) * (*(z + j));}}for (int i = 0; i < n; i++)//算y{*(y + i) = *(z + i) / (*(D + i));}double* temp = new double[n * n];for (int i = 0; i < n; i++)//这里实现对L的转置{for (int j = 0; j < n; j++){*(temp + i * n + j) = *(L + j * n + i);}}for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){*(L + i * n + j) = *(temp + i * n + j);}}delete[]temp;//释放for (int i = n - 1; i >= 0; i--)//最后算x{*(x + i) = *(y + i);for (int j = i + 1; j < n; j++){*(x + i) = *(x + i) - *(L + i * n + j) * (*(x + j));}}for (int i = 0; i < n; i++){cout << "解为:\n";cout << *(x + i) << endl;}delete[]U;delete[]y;delete[]z;delete[]L;delete[]D;
}
线性方程组的运算方法和种类很多,其中徐士良教授的《c语言常用算法集》中收集了较多种类的c语言解线性方程组的函数,但是由于版本过老,导致许多函数不能在现在的编译器中直接调用,因此,作者重新写了LDL法解线性方程组的C++程序
C++实现线性方程组运算函数 LDL法相关推荐
- Python数字类型:数值运算操作符、数值运算函数、类型判断函数、类型转换函数
一.数字类型 (一)整数类型int(integer) int与数学中的整数概念一致 特点:可正可负,没有取值范围 整数有四种表示形式: 十进制,没有引导符号:10, 88,-485 二进制,以0(零) ...
- python 中m op n运算_Python数字类型、数值运算操作符、数值运算函数
一.数字类型 (一)整数类型int(integer) int与数学中的整数概念一致 特点:可正可负,没有取值范围 整数有四种表示形式: 十进制,没有引导符号:10, 88,-485 二进制,以0(零) ...
- python天天向上的力量b_Python“天天向上的力量”——基本数据类型以及数值运算函数...
整数类型:与数学中整数的概念一致 -可正可负,没有取值范围限制 -pow(x,y)函数:计算xy,想算多大算多大 -十进制:1010,99,-217 -二进制:以0b或0B开头:0b010,-0B10 ...
- php函数运算,PHP数学运算函数的功能及实例分析
这篇文章主要介绍了PHP数学运算函数,汇总分析了常见的PHP数学运算函数的功能,使用方法与注意事项,需要的朋友可以参考下 一.常用函数说明: Abs: 取得绝对值. Acos: 取得反余弦值. Asi ...
- php次方函数_PHP数学运算函数大汇总(经典值得收藏)_PHP
本文汇总分析了PHP数学运算函数.分享给大家供大家参考,具体如下: 一.常用函数说明: Abs: 取得绝对值. Acos: 取得反余弦值. Asin: 取得反正弦值. Atan: 取得反正切值. At ...
- Openssl 之大数运算函数 BN
Openssl 之大数运算函数 BN 主要介绍Openssl中的有关大数运算函数,这个对于RSA研究和实现比较有价值 1.初始化函数 BIGNUM *BN_new(void); 新生成一个B ...
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
类的拷贝构造函数与赋值运算不同,拷贝构造函数是对这个类进行初始化的过程,而赋值是删除原有的东西,赋予它新的东西. 但是二者在实现上是互通的. template<class T> graph ...
- Pandas知识点-统计运算函数
Pandas知识点-统计运算函数 统计运算非常常用.本文介绍Pandas中的统计运算函数,这些统计运算函数基本都可以见名知义,使用起来非常简单. 本文使用的数据来源于网易财经,具体下载方法可以参考:h ...
- php 超大整数计算,PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨...
[分享]PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨 分享一个溢出整数加减的运算函数,刚刚写的,对于溢出的整数可以用这个来进行加减运算. 遗憾的几点是: 一代码太多: 二只有 ...
最新文章
- CentOS 7源码安装httpd服务
- Flink JAR包上传和运行逻辑
- v8学习笔记(四) 对象机制
- 7_CentOS下安装和卸载AdobeReader
- mysql5.6.28安装_mysql5.6.28源码安装
- rust建的怎么拆除_罗志祥私建泳池已拆除,后续还将接受物业的监督与教育
- [BZOJ] 3301: [USACO2011 Feb] Cow Line
- L1-031 到底是不是太胖了 (10 分)
- 实战HTML:模拟简书首页静态实现
- 编程中常见的安全算法
- 小米路由3刷华硕潘多拉固件教程及软件相关
- 「 LaTex 」写论文,natbib宏的参考文献引用格式详解
- “限时秒杀”活动分析报告
- ad模数转换采集电压程序c语言,单片机怎么通过AD转换得到电压值
- 中国哲学书电子化计划
- 早上空腹喝酸奶好吗?
- vertica基本常用sql
- 如何把word转成pdf格式以及如何从指定页开始设置页码技巧
- APP(IOS)蒲公英上传成功但下载页报错
- Intel NUC8i5BEH安装Windows10+Hackintosh双系统