qr_decomposition.java

来自「用QR分解来求矩阵的全部特征值 包括:QR分解」· Java 代码 · 共 57 行

JAVA
57
字号
import java.math.*;

public class QR_Decomposition {
	public static GetArray QR(double[][] a,double[][] q,int n ){
		int i,j,k;
		double[][] R=new double[5][5];
		double c,s,sq;
		double[] ai=new double[5];
		double[] aj=new double[5];
		double[] qi=new double[5];
		double[] qj=new double[5];
		Matrix_Transpose transpose=new Matrix_Transpose();
		GetArray getarray=new GetArray();
		
		for(j=0;j<n;j++)
			for(i=j+1;i<n;i++){
				sq=Math.sqrt(a[j][j]*a[j][j]+a[i][j]*a[i][j]);
				c=a[j][j]/sq;
				s=a[i][j]/sq;
				for(k=0;k<n;k++){
					aj[k]=c*a[j][k]+s*a[i][k];
					qj[k]=c*q[j][k]+s*q[i][k];
					ai[k]=-s*a[j][k]+c*a[i][k];
					qi[k]=-s*q[j][k]+c*q[i][k];          
				}
				for(k=0;k<n;k++){
					a[j][k]=aj[k];
					q[j][k]=qj[k];
					a[i][k]=ai[k];
					q[i][k]=qi[k];				
				}
			}
		R=a;	
		q=transpose.Tranpose(q, n);
		getarray.GetData(R, q);	
		return getarray;		
	}
	
/*	public static void main(String[] args){
		double[][] A={{1,3},{3,1}};
		double[][] Q={{1,0},{0,1}};
		double[][] R= new double[5][5];     
		int n=A.length;
		int i,j,k;
		
		GetArray getarray=QR(A,Q,n);   //QR Decomposition
		R=getarray.array1;
		Q=getarray.array2;
		
		for(i=0;i<n;i++){
			for(j=0;j<n;j++)
				System.out.print(R[i][j]+" ");
			System.out.println();
		}		
	}*/
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?