数值计算练习 LU分解(杜里特尔和克洛特分解)
Code:(C++实现)
杜里特尔分解:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#define y1 AC
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define E 1e-12
typedef long long ll;
const double pi = acos(-1);
const int MAX_N = 1005;
using namespace std;
double L[MAX_N][MAX_N];
double U[MAX_N][MAX_N];
double x[MAX_N], y[MAX_N];
double a[MAX_N][MAX_N], b[MAX_N];
int n, m;
int main(){//int n, m;printf("-----杜里特尔分解-----\n");printf("请输入矩阵大小:");while(scanf("%d", &n) != EOF){printf("请输入系数矩阵:\n");for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){scanf("%lf", &a[i][j]);}}printf("请输入行列式:\n");for(int i = 1; i <= n; i++){scanf("%lf", &b[i]);}for(int i = 1; i <= n; i++){L[i][i] = 1;U[1][i] = a[1][i];}for(int i = 1; i <= n - 1; i++){for(int j = i + 1; j <= n; j++){double sum = 0;for(int k = 1; k <= n; k++){if(k != i) sum += L[j][k] * U[k][i];}L[j][i] = (a[j][i] - sum) / U[i][i];}for(int j = i + 1; j <= n; j++){double sum = 0;for(int k = 1; k <= n; k++){if(k != i + 1) sum += L[i + 1][k] * U[k][j];}U[i + 1][j] = a[i + 1][j] - sum;}}printf("L矩阵:\n");for(int i = 1; i <= n; i++){for(int j = 1; j <= i; j++){printf("%.3f ", L[i][j]);}printf("\n");}printf("\nU矩阵:\n");for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){if(j < i) printf(" ");else printf("%.3f ", U[i][j]);}printf("\n");}for(int i = 1; i <= n; i++){if(i == 1) y[i] = b[i];else {double sum = 0;for(int j = 1; j <= i - 1; j++){sum += L[i][j] * y[j];}y[i] = (b[i] - sum) / L[i][i];}}for(int i = n; i >= 1; i--){if(i == n) x[i] = y[i] / U[i][i];else{double sum = 0;for(int j = i + 1; j <= n; j++){sum += x[j] * U[i][j];}x[i]= (y[i] - sum) / U[i][i];}}printf("\n方程组的解:\n");for(int i = 1; i <= n; i++){printf("y(%d) = %.3f\n", i, y[i]);}printf("\n");for(int i = 1; i <= n; i++){printf("x(%d) = %.3f\n", i, x[i]);}}return 0;
}
结果展示:
克洛特分解:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#define y1 AC
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define E 1e-12
typedef long long ll;
const double pi = acos(-1);
const int MAX_N = 1005;
using namespace std;
double L[MAX_N][MAX_N];
double U[MAX_N][MAX_N];
double x[MAX_N], y[MAX_N];
double a[MAX_N][MAX_N], b[MAX_N];
int n, m;
int main(){//int n, m;printf("-----克洛特分解-----\n");printf("请输入矩阵大小:");while(scanf("%d", &n) != EOF){printf("请输入系数矩阵:\n");for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){scanf("%lf", &a[i][j]);}}printf("请输入行列式:\n");for(int i = 1; i <= n; i++){scanf("%lf", &b[i]);}for(int i = 1; i <= n; i++){L[i][1] = a[i][1];U[i][i] = 1;}for(int k = 1; k <= n; k++){for(int i = k; i <= n; i++){double sum = 0;for(int j = 1; j < k; j++){sum += L[i][j] * U[j][k];}L[i][k] = a[i][k] - sum;}for(int j = k + 1; j <= n; j++){double sum = 0;for(int i = 1; i < k; i++){sum += L[k][i] * U[i][j];}U[k][j] = (a[k][j] - sum) / L[k][k];}}printf("L矩阵:\n");for(int i = 1; i <= n; i++){for(int j = 1; j <= i; j++){printf("%.3f ", L[i][j]);}printf("\n");}printf("\nU矩阵:\n");for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){if(j < i) printf(" ");else printf("%.3f ", U[i][j]);}printf("\n");}for(int i = 1; i <= n; i++){if(i == 1) y[i] = b[i] / L[i][i];else {double sum = 0;for(int j = 1; j < i; j++){sum += L[i][j] * y[j];}y[i] = (b[i] - sum) / L[i][i];}}for(int i = n; i >= 1; i--){if(i == n) x[i] = y[i] / U[i][i];else{double sum = 0;for(int j = i + 1; j <= n; j++){sum += x[j] * U[i][j];}x[i]= (y[i] - sum) / U[i][i];}}printf("\n方程组的解:\n");for(int i = 1; i <= n; i++){printf("y(%d) = %.3f\n", i, y[i]);}printf("\n");for(int i = 1; i <= n; i++){printf("x(%d) = %.3f\n", i, x[i]);}}return 0;
}
结果展示:
数值计算练习 LU分解(杜里特尔和克洛特分解)相关推荐
- 数值计算(一)之解线性方程组(高斯消去法,列选主元消去法,全选主元消去法,杜立特尔分解,克洛特分解,乔里斯基分解)
解线性方程组即解一个多元一次方程组,例如 目录 消去法 分解法 消去法 原理 没有学过高级的解法也没关系,凭借我们初高中的知识足以解决这个问题 这是一个多元一次方程组,拥有n个未知量,也有n方程 我们 ...
- java诺基亚nba,HMD 签约NBA 新秀劳里·马尔卡宁 为诺基亚手机品牌大使
2017-12-22/09:27 芬兰篮球运动员.NBA新秀劳里·马尔卡宁与HMD 签订长期合作协议,成诺基亚手机品牌大使他的信念与HMD价值观不谋而合:坚韧.共赢,彰显芬兰人胆识 "劳里· ...
- 【有限马尔科夫链状态分解+Kosaraju 算法】基于Kosaraju 算法和可达矩阵的有限马尔科夫链状态分解
有限马尔科夫链状态分解+Kosaraju 算法 1 实验内容 2 理论基础 3 题目分析 4 按常返性和互通性对状态空间进行分解算法流程 4.1 强连通性和强连通分量 4.2 基于有向图 Kosara ...
- 人工智能里的数学修炼 | 矩阵的花样分解:特征值分解(EVD)、相似对角化、QR分解、Schur分解、奇异值分解(SVD)的概念纠缠与详解
前言 在高等代数里,矩阵分解是一个十分基础与重要的内容,任何一个学校对于理工科的研究生教育都会开设相应的课程,如:矩阵分析.矩阵论.线性系统等.看了不少社区的问答.笔记和博客,在它们的基础上加入一些自 ...
- gstat | 空间插值(三)——克里金插值之泛克里金和简单克里金
本篇接着上篇继续介绍克里金插值.首先加载相关工具包和上篇使用的示例数据: library(gstat) library(sf) library(tidyverse) library(readxl) l ...
- PowerSyncKM 包尔星克 对拷线无法自动链接windows和统信系统
因工作需要自购了一台计算机,安装了统信系统 uos,当时候原来使用的,PowerSyncKM 包尔星克 对拷线无法自动链接了.只能通过alt+s进行切换键盘鼠标使用,无法进行复制和粘贴使用了.请问 ...
- 柯尔莫可洛夫-斯米洛夫检验(Kolmogorov–Smirnov test,K-S test)
柯尔莫哥洛夫-斯米尔诺夫检验(Колмогоров-Смирнов检验)基于累计分布函数,用以检验两个经验分布是否不同或一个经验分布与另一个理想分布是否不同. 在进行cumulative probab ...
- 分解质因数c语言设计思路,深入分析C语言分解质因数的实现方法
首先来看一个最简单的C语言实现质因数分解的列子: #include void main( ) { int data, i = 2; scanf("%d", &data); ...
- c语言分解质因数的设计思路,C语言开发中分解质因数的操作实例
C语言的开发在日常开发中被广泛使用,而我们都知道C语言是简单的编译方法,爱站技术频道小编今天就为大家带来了C语言开发中分解质因数的操作实例,一起去进入下文看看吧! 首先来看一个最简单的C语言实现质因数 ...
最新文章
- 微服务负载均衡实现高可用_使用负载平衡实现大容量可用性
- WP8开发札记(一)WP8应用生命周期管理
- 怎样更改SQL Server 2008的身份验证方式
- 假如Python有C/C++ 的性能,会不会称霸IT界?
- 【AMAD】schema -- 使用pythonic的方式进行schema验证
- Kubernetes部署项目报错ImagePullBackOff日志提示rpc error: code..http: server gave HTTP response to HTTPS client
- 【习题基础知识】输入与输出、简单循环(好多图贴上去好累...要看图的话我把word文档发给你)...
- 信源编码程序设计实验C语言实现,霍夫曼信源编码实验报告
- ip 查找计算机,win10系统通过ip地址查找计算机名的详细技巧
- python语音合成并播放_用Python写一个语音播放软件
- thinkadmin 配置 iis 宝塔、护卫神、phpstudy伪静态设置
- 第三讲使用VPB切割和加载
- 【网络时间同步】基于马尔科夫随机场最大后验估计和Gardner环的无线传感器网络时间同步算法matlab仿真
- uniapp 真机调试 click点击事件无效
- 智慧社区APP开发解决方案
- 利用1394线实现双机互连
- 【Redis】五种数据类型及其使用场景
- python教程(面向初学者)【1】
- 【225期】为什么数据库连接池不采用 IO 多路复用?
- After Titans