矩阵的LU分解———学习笔记 ,转载自chinaunix
2015-10-06 15:19
232 查看
/** * @(#)LUanalyzeTest.java * * * @author 坚持到底 * @version 1.00 */ public class LUanalyzeTest { /** * LU分解 * @param L_matrix L矩阵(单位下三角阵) * @param U_matrix U矩阵(上三角阵) * @param matrix LU分解之前的系数矩阵 * @param num 系数矩阵的阶数 */ public void LUanalyze(double[][] L_matrix, double[][] U_matrix, double[][] matrix, int num) { int i, j, k, r; double sum; //初始化L矩阵(L为单位下三角阵) for (i = 0; i < num; i++) for (j = 0; j < num; j++) { if (i == j) L_matrix[j][i] = 1; //对角线元素置1 else { L_matrix[j][i] = 0; } } //初始化U矩阵(所有元素置0) for (i = 0; i < num; i++) for (j = 0; j < num; j++) U_matrix[j][i] = 0; //求U矩阵的第一行 for (i = 0; i < num; i++) U_matrix[0][i] = matrix[0][i]; //求L矩阵的第一列 for (i = 0; i < num; i++) L_matrix[i][0] = matrix[i][0] / U_matrix[0][0]; for (r = 1; r < num; r++) { //求U的第r行的元素 for (i = r; i < num; i++) { sum = 0.0; for (k = 0; k < r; k++) { sum += L_matrix[r][k] * U_matrix[k][i]; } U_matrix[r][i] = matrix[r][i] - sum; } //求L的第r列的元素 for (i = r; i < num; i++) { sum = 0.0; for (k = 0; k < r; k++) { sum += L_matrix[i][k] * U_matrix[k][r]; } L_matrix[i][r] = (matrix[i][r] - sum) / U_matrix[r][r]; } } } //打印行列式 public void printMatrix(double[][] matrixTest, int row, int column) { for (int i = 0; i <= row - 1; i++) { System.out.println('\n'); for (int j = 0; j <= column - 1; j++) System.out.print(matrixTest[i][j] + " "); } } public static void main(String[] args) { int num = 4; //矩阵的阶数 //double[][] matrix={{1,2,6},{2,5,15},{6,15,46}}; //double[][] matrix={{1,2,3},{2,5,2},{3,1,5}}; double[][] matrix = {{2, 4, 2, 6}, {4, 9, 6, 15}, {2, 6, 9, 18}, {6, 15, 18, 40}}; double[][] L_matrix = new double[num][num]; double[][] U_matrix = new double[num][num]; LUanalyzeTest lu = new LUanalyzeTest(); System.out.println("\n原矩阵:"); lu.printMatrix(matrix, num, num); lu.LUanalyze(L_matrix, U_matrix, matrix, num); System.out.println("\nL矩阵:"); lu.printMatrix(L_matrix, num, num); System.out.println("\nU矩阵:"); lu.printMatrix(U_matrix, num, num); } }
相关文章推荐
- 【微信公众平台开发】借用微信内置图片浏览功能
- hibernate修改数据库已有的对象【简化操作】
- 给textView自适应高度
- iOS数据的持久化(沙盒)
- C++有子对象的派生类的构造函数
- UVA 11291 Smeech
- eclipse如何查看安卓源码
- C语言学生管理系统项目
- 大三了
- C++第二课 数据类型和常变量
- Linux 如何用vim命令把编辑文件的几行内容拷贝到一个新文件
- 获取某个字段值getField 和 设置某个字段值setField
- 15.1.再谈工科研究生如何做研究 (第一部分)
- PropertyUtils.describe(this);
- 详解C++代码反汇编后的堆栈寄存器EBP和ESP
- 用非递归方法实现 求解字符串组合的问题 JAVA代码
- Visual Stuido 在文件中查找不显示结果
- oracle中的一些简单查询
- 做的不是很好
- 软考数据库宏观