求线性方程组的解

网友投稿 616 2022-10-26

求线性方程组的解

求线性方程组的解

package com.data.struct;public class LinearEquotion { private double[][]A=new double[][]{ {1,2,0}, {3,4,4}, {5,6,3} }; private double[]B=new double[]{ 3,7,8 }; private double[][]L=new double[3][3]; private double[][]U=new double[3][3]; private int[]p=new int[3]; private double[]X=new double[3]; public void solve()throws Exception{ lupDecomposition(); double[]Y=new double[3]; for(int i=0;i<3;i++){ Y[i]=B[p[i]]; double sub=0; for(int j=0;j<=i-1;j++){ sub+=L[i][j]*Y[j]; } Y[i]=Y[i]-sub; } for(int i=2;i>=0;i--){ double sub=0; for(int j=i+1;j<3;j++){ sub+=U[i][j]*X[j]; } X[i]=(Y[i]-sub)/U[i][i]; } } private void lupDecomposition()throws Exception{ for(int i=0;i<3;i++){ p[i]=i; } for(int k=0;k<3;k++){ double s=0; int k2=k; for(int i=k;i<3;i++){ if(Math.abs(A[i][k])>s){ s=Math.abs(A[i][k]); k2=i; } } if(s==0){ throw new Exception("error"); } int tmp=p[k]; p[k]=p[k2]; p[k2]=tmp; for(int i=0;i<3;i++){ double tmp2=A[k][i]; A[k][i]=A[k2][i]; A[k2][i]=tmp2; } for(int i=k+1;i<3;i++){ A[i][k]=A[i][k]/A[k][k]; for(int j=k+1;j<3;j++){ A[i][j]=A[i][j]-A[i][k]*A[k][j]; } } } for(int i=0;i<3;i++){ for(int j=0;j<=i;j++){ if(i==j){ L[i][j]=1; }else{ L[i][j]=A[i][j]; } } for(int j=i;j<3;j++) { U[i][j]=A[i][j]; } } } public void printL(){ for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print(L[i][j]+" "); } System.out.println(); } } public void printU(){ for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print(U[i][j]+" "); } System.out.println(); } } public void print(){ for(int i=0;i

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:for那种方式效率最高
下一篇:Mutagen是一个跨平台,连续,双向文件同步实用程序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~