数值分析课题二 矩阵求逆
2015-06-05 22:54
501 查看
模拟求逆过程写就可以了
e是单位矩阵,只通过行变换,把原矩阵变成单位矩阵。
消元的时候不能选主元。
e是单位矩阵,只通过行变换,把原矩阵变成单位矩阵。
消元的时候不能选主元。
#include <iostream> #include <cstdio> #include <math.h> using namespace std; const int MAXN = 1000; int n; double a[MAXN][MAXN]; double e[MAXN][MAXN]; void init() { for(int i = 0;i<n;i++){ for(int j = 0;j<n;j++){ e[i][j] = i == j?1:0; } } } void low_mat() { for(int k = 0;k<n;k++){///往下扫 for(int i = k+1;i<n;i++){ double l = -a[i][k]/a[k][k]; for(int j = k;j<n;j++){ a[i][j] += l*a[k][j]; e[i][j] += l*e[k][j]; } } } } void up_mat() { for(int k = n-1;k>=0;k--){///再往上扫 for(int i = k-1;i>=0;i--){///千万别选主元,会跪 double l = -a[i][k]/a[k][k]; for(int j = k;j>=0;j--){ a[i][j] += l*a[k][j]; e[i][j] += l*e[k][j]; } } } } void I() { for(int i =0;i<n;i++){ for(int j =0;j<n;j++){ e[i][j] /= a[i][i]; } } } int main() { freopen("in.txt","r",stdin); while(cin >> n){ init(); for(int i =0;i<n;i++){ for(int j = 0;j<n;j++){ scanf("%lf",&a[i][j]); } } low_mat(); up_mat(); I(); for(int i =0;i<n;i++){ for(int j =0;j<n;j++){ printf("%10.5lf",e[i][j]); } cout <<endl; } } return 0; }
相关文章推荐
- 图片转换为文本样式
- android中的2种fragment部署方法
- iOS中 学会如何对sqlite3 进行封装 (纯手工)
- 微商才是世界上最花心的“男人”
- poj 2559 Largest Rectangle in a Histogram 栈
- windows内核情景分析之进入与退出系统空间过程
- 2015,我依然幸福生活在北师大的2015
- Contains Duplicate II
- 冒泡排序
- 2013能量篇终止,2014精致篇起航
- windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数
- MVC模型
- 写一些,给2013
- Jquery核心函数
- windows内核情景分析之——APC的执行
- Android下网络请求的两个封装类
- 严重: StandardServer.await: create[8005]:
- LeetCode——Median of Two Sorted Arrays
- 说说健身这件小事儿
- 我在寻求工作治理的方法(转)