解线性方程组的直接方法——高斯消去和LU消去法
来源:互联网 发布:linux glibc 安装 编辑:程序博客网 时间:2024/04/28 21:06
高斯消去法:
/** * * 高斯消元算法 * @author luzi * */public class guess {double[] x2 = {0,0,0,0,0,0,0,0};//列主元高斯消去法public void guess1(double[][] A,double[] b,int n,int target){//选主元,消元double max = Double.MIN_VALUE;for(int k = 0; k < n - 1; k++){int t = k;int p = k;//选主元for(; t < n;t++){if(A[t][k] > max){max = A[t][k];p = t;}}//主元交换if(p != k){double temp = 0;for(int i = 0;i < n;i++){temp = A[p][i];A[p][i] = A[k][i];A[k][i] = temp;}temp = b[p];b[p] = b[k];b[k] = temp;}for(int i = k + 1; i < n; i++){double tp = A[i][k]/A[k][k]; b[i] = b[i] - tp*b[k]; //A[i][k] = 0; for(int j = k + 1;j < n;j++){ A[i][j] = A[i][j] - tp*A[k][j]; }}}//回代x2[n - 1] = b[n - 1]/A[n - 1][n - 1];for(int i = n-2;i >= 0;i--){double sum = 0;for(int j = i + 1; j < n;j++){sum += A[i][j]*x2[j];}x2[i] = (b[i] - sum)/A[i][i];}for(int i = 0; i < n; i++)System.out.println(x2[i]);}//顺序高斯消去法public double[] guess2(double[][] A,double[] b,int n,int target){double[] x = new double[n];for(int k = 0; k < n - 1; k++){for(int i = k + 1; k < n; k++){double tp = A[i][k]/A[k][k];b[i] = b[i] - tp*b[k];for(int j = k ; j < n; j++){A[i][j] = A[i][j] - tp*A[k][j];}}}x[n - 1] = b[n - 1]/A[n - 1][n - 1];for(int i = n - 2; i >= 0; i--){double sum = 0;for(int j = i + 1; j < n; j++){sum += A[i][j]*x[j];}x[i] = (b[i] - sum)/A[i][i];}return x;}}
直接LU消去法:
package jisuanfangfashiyan;/** * * @author luzi * */public class LU {//直接lU分解消去法public double[] getLU(double[][] A,double[] x,double[] b,int n){double[][] u = new double[n][n];double[][] l = new double[n][n];double[] y = new double[n];double sum = 0;double temp = 0;for(int k = 0; k < n; k++){//先求 u 的第 k 行的值for( int j = k; j < n; j++){for(int m = 0; m < k; m++){sum += (l[k][m] * u[m][j]);}u[k][j] = A[k][j] - sum;sum = 0;}//求 l 的第 k 的值for(int i = k + 1; i < n; i++){for(int m = 0; m < k; m++){sum += (l[i][m] * u[m][k]);}l[i][k] = ( A[i][k] - sum ) /u[k][k];sum = 0;}}y[0] = b[0];for(int i = 1; i < n; i++){for(int j = 0; j < i; j++){sum += (l[i][j] * y[j]);}y[i] = b[i] - sum;sum = 0;}x[n - 1] = y[n - 1]/u[n - 1][n - 1];for(int i = n - 2; i >= 0; i--){for(int j = i + 1; j < n; j++){sum += (u[i][j] * x[j]);}x[i] = (y[i] - sum)/u[i][i];sum = 0; }return x;}public static void main(String args[]){double[][] A = {{2,-3,2},{-4,2,-6},{2,2,4}};double[] x = new double[3];double[] b = {5,14,8};LU lu = new LU();x = lu.getLU(A, x, b, 3);for(double ele : x)System.out.println(ele);}}LU消去法例子运行结果:
阅读全文
0 0
- 解线性方程组的直接方法——高斯消去和LU消去法
- 高斯消去法_解线性方程组的直接解法
- Java实现的LU分解,高斯消去法求线性方程组的解
- 数值分析之直接法解线性方程组:高斯消去法、高斯乔丹消去法
- 高斯消去法解线性方程组
- 高斯列主元消去法_解线性方程组的直接解法
- 求解线性方程组--高斯消去法
- 顺序高斯消去法求线性方程组
- Gauss消去,LU分解法,追赶法解线性方程组
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 计算方法:高斯-若当主元消去法解线性方程组
- 计算方法Gauss-Jordan消去法求线性方程组的解
- iwpriv 配置 WiFi 的参数含义解说
- liunx 下tomcat启动缓慢的解决方案
- Linux常用命令
- 游戏运行过程中动态改变分辨率和全屏
- ansible自己练习,有点乱
- 解线性方程组的直接方法——高斯消去和LU消去法
- selenium(二)--键盘事件
- c++11之using
- android需要知道的面试题
- Java中内存中的Heap(堆)、Stack(栈)与程序运行的关系
- 不要用自己的懒惰说java有多难
- 【网易2017实习生编程题】赶去公司 调整队形 消除重复元素
- Android Network --判断网络状态(网络的连接,改变,和判断2G/3G/4G)
- 深度学习工程师就业基本要求