LUP分解的C++实现

简单粗暴上代码

在这里插入代码片#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;void Swap(double* a, double* b) {//交换函数 double temp = *a;*a = *b;*b = temp;
}
void Swap1(int* a, int* b) {//交换函数 int temp = *a;*a = *b;*b = temp;
}double Round(double dVal, short iPlaces) {//四舍五入保留小数位数 double dRetval;double dMod = 0.0000001;if (dVal < 0.0) dMod = -0.0000001;dRetval = dVal;dRetval += (5.0 / pow(10.0, iPlaces + 1.0));dRetval *= pow(10.0, iPlaces);dRetval = floor(dRetval + dMod);dRetval /= pow(10.0, iPlaces);return(dRetval);
}void Input(double** A,  int n) {int i, j;cout << "请输入A矩阵:" << endl;for (i = 1; i <= n; i++) {for (j = 1; j <= n; j++) {cin >> A[i][j];}}/*cout << "请输入b数组:" << endl;for (i = 1; i <= n; i++) {cin >> b[i];}*/
}void LUP_DECOMPOSITION(double** A, double** L, double** U, int* P, int n) {int i, j, k, k1;double temp, temp1;;for (i = 1; i <= n; i++) {P[i] = i;}for (k = 1; k <= n; k++) {int p = 0;for (i = k; i <= n; i++) {if (fabs(A[i][k]) > p) {p = fabs(A[i][k]);k1 = i;}}if (p == 0) {cout << "singular matrix" << endl;}else {Swap1(&P[k], &P[k1]);}for (i = 1; i <= n; i++) {Swap(&A[k][i], &A[k1][i]);}for (i = k + 1; i <= n; i++) {temp = A[i][k] / A[k][k];A[i][k] = Round(temp, 2);for (j = k + 1; j <= n; j++) {temp = A[i][k] * A[k][j];temp1 = Round(temp, 2);A[i][j] = A[i][j] - temp1;}}}for (i = 1; i <= n; i++) {for (j = 1; j <= n; j++) {if (i == j) {L[i][j] = 1;}else {if (i < j) {L[i][j] = 0;}else {L[i][j] = A[i][j];}}}}for (i = 1; i <= n; i++) {for (j = 1; j <= n; j++) {if (i <= j) {U[i][j] = A[i][j];}else {U[i][j] = 0;}}}for (i = 1; i <= n; i++) {P[i] -= 1;}}void Print(int* x, int n) {int i, j;for (i = 1; i <= n; i++) {cout << x[i] << "\t";}
}void PrintL(double** L, int n) {int i, j;for (i = 1; i <= n; i++) {for (j = 1; j <= n; j++) {cout << L[i][j] << "\t";}cout << endl;}
}int main() {int n;double* x = NULL;double* y = NULL;double** L = NULL;double** U = NULL;int* P = NULL;double** A = NULL;double* b = NULL;cin >> n;int i = 0;L = new double* [n + 1];for (i = 1; i <= n; i++) {L[i] = new double[n + 1];}U = new double* [n + 1];for (i = 1; i <= n; i++) {U[i] = new double[n + 1];}A = new double* [n + 1];for (i = 1; i <= n; i++) {A[i] = new double[n + 1];}P = new int[n ];x = new double[n + 1];y = new double[n + 1];b = new double[n + 1];Input(A,  n);LUP_DECOMPOSITION(A, L, U, P, n);//LUP_SOLVE(A, L, U, P, x, y, b, n);//Print(x, n);cout << "L:" << endl;PrintL(L, n);cout << "U:" << endl;PrintL(U, n);//PrintL(A, n);cout << "P:" << endl;Print(P, n);return 0;
}/*1 0 0 0 1 0 1 0
0 0 0 0 1 0 1 1
0 1 0 0 0 1 0 0
0 0 0 0 1 1 1 1
0 0 1 0 1 0 0 1
0 0 0 0 0 1 1 0
0 0 0 1 0 1 0 0
0 0 0 0 0 0 1 11 0 0 0 1 1 0 0
1 1 0 0 1 0 1 0
0 1 1 0 0 1 0 0
1 0 1 1 1 1 1 1
1 1 0 1 0 0 1 0
0 1 1 0 1 0 0 0
0 0 1 1 0 1 0 0
0 0 0 1 1 0 1 0
*/

如果对您有用请点赞哦,欢迎评论交流

LUP分解的C++实现相关推荐

  1. 矩阵分解及其Eigen实现

    主要是用来记录自己的学习过程,内容也主要来自于网上的各种资料,然后自己总结而来,参考的资料都以注明,感谢这些作者的分享.如果内容有误,请大家指点. LU分解1 理论 定义        将矩阵等价为两 ...

  2. matlab lud矩阵分解,MIT线性代数总结笔记——LU分解

    MIT线性代数总结笔记--LU分解 矩阵分解 矩阵分解(Matrix Factorizations)就是将一个矩阵用两个以上的矩阵相乘的等式来表达.而矩阵乘法涉及到数据的合成(即将两个或多个线性变换的 ...

  3. LU分解完成利用节点电压法的简易电路求解程序(二)

    上一篇博客中我们回顾了LU分解,分析了一个简单的电路并观察到 电导矩阵中的对角线项为节点相连的电导之和,非对角线项等于两个节点之间电导的相反数 与 电流项为独立电流源流入节点与流出节点电流代数和,其中 ...

  4. ACM 全部算法总结

    ACM 所有算法 附带我学过的算法的博客链接 数据结构 栈 队列 链表 哈希表 哈希数组 堆 优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平 ...

  5. ACM基础知识及算法

    ACM 算法   难度 数据结构 栈 栈     1 单调栈       队列 一般队列     1 优先队列/单调队列     1 循环队列     2 双端队列     2 链表 一般链表     ...

  6. 你是如何坚持读完《算法导论》这本书的?(帖子收集)

    你是如何坚持读完<算法导论>这本书的? <算法导论>不够猛,答者顺便补充 "你是如何坚持读完<计算机编程的艺术>这本书的?" 罗必成: CLRS ...

  7. ACM所有算法大全(持续更新)

    转载自: http://blog.sina.com.cn/s/blog_adb6743801019h29.html ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 ...

  8. 【心随意动】20-SIST研一秋季上学期课程总结【补】

    呀,自从来到了SIST,每天每夜都要么在写作业,要么就是在去写作业的路上,每天都是它们的deadline呐!好不容易有了一个早上可以睡觉养精神,我也是用来刷手机或发会儿呆.以至于上学期期间完全没有时间 ...

  9. 基于C++的简易RLC电路仿真器与滤波器仿真测试

    电路建模分析与仿真算法 对于任意一个电路系统,我们基本上都能使用RLC和受控源进行等效,因此RLC系统的求解是任意一个系统求解的核心. 我们熟知,对于任意一个复杂的电路系统,基尔霍夫定律(Kirchh ...

  10. MATLAB处理矩阵的一些命令

    矩阵的表示 A=[10 8 6 4 1;2 5 8 9 4;6 0 9 9 8] 矩阵中的元素用空格隔开,或用逗号隔开.不同行用分号隔开或用回车键换行. 2.命令 det(A) %计算行列式A的值 [ ...

最新文章

  1. 同时起两个mysql 起不了_到底是谁!让你在冬天的早晨起不了床?
  2. 《象与骑象人》总结一
  3. 在.NET Core中用最原生的方式读取Nacos的配置
  4. vs 2008 Ide 设置
  5. CSS height高度 和 width宽度
  6. Cesium:点击实体后在实体上方添加div,并随地球转动不断更新位置
  7. LS-DYNA材料模型
  8. 个人发卡网站源码运营版 内置4套模板
  9. 大数据挖掘型标签RFM/RFE/PSM
  10. qq空间的相册名称java_空间相册名称大全
  11. matlab 离散点求导_如何用matlab求离散型数值的导数
  12. Navicat工具中数据库导入导出
  13. location.href和open的几种用法和区别
  14. 视频摘要和视频浓缩的区别
  15. php 公众号 欢迎,关注公众号的欢迎语怎么设置?公众号欢迎语怎么加链接?
  16. 【彩艳】ArcGIS影像裁剪说明
  17. 电脑控制手机 教你实现多个手机同时打开关闭软件
  18. 传遍朋友圈的Workflow,到底是什么鬼
  19. UE4 FlipFlop的使用
  20. 题目1440:Goldbach's Conjecture(哥达巴赫猜想)

热门文章

  1. 收藏|史上最全的30个生物实验技术及原理
  2. 【递推】种萝卜 C++题解
  3. 网易云 linux 网络,网易云音乐正式登陆Linux平台
  4. 设计模式java装饰模式范例_Java设计模式中外观模式和装饰器模式的介绍(代码示例)...
  5. matlab中功率因数模块,最经典的功率因数控制器设计方案
  6. 设计模式之里氏宗青出于蓝而胜于蓝
  7. 河海大学计算机信息学院2013年考研录取名单,河海大学地学院2013年考研录取名单...
  8. 个人博客被恶意刷关键词的两次经历
  9. 前缀学习第二课(下)
  10. Effective HPA:预测未来的弹性伸缩产品