亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? +

?? 用冪法與反冪法求矩陣的最大最小特征值
??
字號:
//編程語言:JAVA
/**
 * @(#)work.java
 *
 * work application《數值分析》計算實習題目第一題(運用冪法與反冪法)
 *
 * @author 503所  馬靈霞
 * @version 1.00 2008/11/11
 */
import java.text.*;
import java.math.*;
import java.util.*;

public class work {
	
    public static void main(String[] args) {
    	DecimalFormat myformat = new DecimalFormat();
    	myformat.applyPattern("0.000000000000E0000");
    	/*
    	 *聲明全局變量matrixA的維數dimensionA,
    	 *A的(譜范數)條件數condA,行列式detA,最大特征值eigenvalueMax,最小特征值eigenvalueMin
    	 *模為最小的特征值absoluteEigenvalueMin,最大absoluteEigenvalueMax
    	 *第二問benchmark[]=eigenvalueMin+k(eigenvalueMax-eigenvalueMin)/40,
    	 *與benchmark[]最接近的特征值序列adjacenceBenchmark[]
    	 *diagonalA[]存儲matrixA的對角線元素,constantB與constantC為matrixA的兩個元素,compressA[][]為matrixA的壓縮矩陣
    	 **/
    	int dimensionA=501;
    	double condA=0,detA=0,eigenvalueMax=0,eigenvalueMin=0,absoluteEigenvalueMin=0,absoluteEigenvalueMax=0;
    	int dimensionBenchmark=40;
    	double benchmark[]=new double[dimensionBenchmark];
    	double adjacenceBenchmark[]=new double[dimensionBenchmark];		
    	double diagonalA[]=new double[dimensionA];
		double constantB=0.16;
		double constantC=-0.064;
  	  	for(int i=0;i<=500;i++){
			diagonalA[i]=(1.64-0.024*(i+1))*Math.sin(0.2*(i+1))-0.64*Math.exp(0.1/(i+1));
		}//A的對角線元素的值
		double compressA[][]=new double[5][dimensionA];
		compressA[0][0]=0;
		compressA[0][1]=0;
		for(int i=2;i<=dimensionA-1;i++){
			compressA[0][i]=constantC;
		}
		compressA[1][0]=0;
		for(int i=1;i<=dimensionA-1;i++){
			compressA[1][i]=constantB;
		}
		for(int i=0;i<=dimensionA-1;i++){
			compressA[2][i]=diagonalA[i];
		}
		for(int i=0;i<=dimensionA-2;i++){
			compressA[3][i]=constantB;
		}
		compressA[3][dimensionA-1]=0;
		for(int i=0;i<=dimensionA-3;i++){
			compressA[4][i]=constantC;
		}
    		compressA[4][dimensionA-2]=0;
   		compressA[4][dimensionA-1]=0;//將A壓縮存儲到compressA中
   		
		//對compressA進行LU分解,求A的行列式
		for(int k=0;k<=dimensionA-1;k++){
			for(int j=k;j<=Math.min(k+2,dimensionA-1);j++){
				double sum1=0;
				for(int t=Math.max(Math.max(0,k-2),j-2);t<=k-1;t++){
					sum1=sum1+compressA[k-t+2][t]*compressA[t-j+2][j];
				}
				compressA[k-j+2][j]=compressA[k-j+2][j]-sum1;
			}
			for(int i=k+1;i<=Math.min(k+2,dimensionA-1);i++){
				if(k>=dimensionA-1) break;
				else{
					double sum2=0;
					for(int t=Math.max(Math.max(0,i-2),k-2);t<=k-1;t++){
						sum2=sum2+compressA[i-t+2][t]*compressA[t-k+2][k];
					}
					compressA[i-k+2][k]=(compressA[i-k+2][k]-sum2)/compressA[2][k];
				}
			}
		}// LU分解結束
		detA=1;
		for(int i=0;i<=dimensionA-1;i++){
			detA=detA*compressA[2][i];
		}//矩陣A的行列式求出
		
		/*用冪法求矩陣matrixA的最大特征值eigenvalueMax與最小特征值eigenvalueMin
		 *聲明初始向量vectorU并賦初始值,
		 *局部變量absoluteU來存向量vectorU的模
		 *局部變量identityU來存vectorU單位化之后的向量
		 *former,current迭代產生的前后兩個值,用來判斷何時退出迭代
		 *局部變量e來存精度水平
		 *應還原compressA
		 **/
		compressA[0][0]=0;
		compressA[0][1]=0;
		for(int i=2;i<=dimensionA-1;i++){
			compressA[0][i]=constantC;
		}
		compressA[1][0]=0;
		for(int i=1;i<=dimensionA-1;i++){
			compressA[1][i]=constantB;
		}
		for(int i=0;i<=dimensionA-1;i++){
			compressA[2][i]=diagonalA[i];
		}
		for(int i=0;i<=dimensionA-2;i++){
			compressA[3][i]=constantB;
		}
		compressA[3][dimensionA-1]=0;
		for(int i=0;i<=dimensionA-3;i++){
			compressA[4][i]=constantC;
		}
    	compressA[4][dimensionA-2]=0;
   		compressA[4][dimensionA-1]=0;//compress還原結束
   		
		double vectorU[]=new double[dimensionA];
		for(int i=0;i<=dimensionA-1;i++){
			vectorU[i]=1;
		}//聲明初始向量vectorU
		double e=0.000000000001;// 精度水平e
		double former=0,current=0,eigenvalue1=0,eigenvalue2=0;
		//冪法迭代開始
		do{
			double absoluteU=0;
			double identityU[]=new double[dimensionA];
			double sum3=0;
			for(int i=0;i<=dimensionA-1;i++){
				sum3=sum3+vectorU[i]*vectorU[i];
			}
			absoluteU=Math.sqrt(sum3);
			for(int i=0;i<=dimensionA-1;i++){
				identityU[i]=vectorU[i]/absoluteU;
			}
			vectorU[0]=0;
			for(int i=4;i>=2;i--){
				vectorU[0]=vectorU[0]+compressA[i][0]*identityU[i-2];
			}
			vectorU[1]=0;
			for(int i=4;i>=1;i--){
				vectorU[1]=vectorU[1]+compressA[i][1]*identityU[i-1];
			}
			for(int k=2;k<=dimensionA-3;k++){
				double sum4=0;
				for(int i=4;i>=0;i--){
					sum4=sum4+compressA[i][k]*identityU[i+k-2];
				}
				vectorU[k]=sum4;
			}
			vectorU[dimensionA-2]=0;
			for(int i=3;i>=0;i--){
				vectorU[dimensionA-2]=vectorU[dimensionA-2]+compressA[i][dimensionA-2]*identityU[i+dimensionA-4];
			}
			vectorU[dimensionA-1]=0;
			for(int i=2;i>=0;i--){
				vectorU[dimensionA-1]=vectorU[dimensionA-1]+compressA[i][dimensionA-1]*identityU[i+dimensionA-3];
			}
			double sum5=0;
			for(int i=0;i<=dimensionA-1;i++){
				sum5=sum5+identityU[i]*vectorU[i];
			}
			
			former=current;
			current=sum5;
			eigenvalue1=sum5;
			absoluteEigenvalueMax=Math.abs(eigenvalue1);
		}while((Math.abs(current-former)/Math.abs(current))>=e);//迭代結束
		
		for(int i=0;i<=dimensionA-1;i++){
			compressA[2][i]=compressA[2][i]-eigenvalue1;
		}//得出平移A后的壓縮矩陣
		for(int i=0;i<=dimensionA-1;i++){
			vectorU[i]=1;
		}
		former=current=0;
		//對平移后的A迭代開始
		do{
			double absoluteU=0;
			double identityU[]=new double[dimensionA];
			double sum3=0;
			for(int i=0;i<=dimensionA-1;i++){
				sum3=sum3+vectorU[i]*vectorU[i];
			}
			absoluteU=Math.sqrt(sum3);
			for(int i=0;i<=dimensionA-1;i++){
				identityU[i]=vectorU[i]/absoluteU;
			}
			vectorU[0]=0;
			for(int i=4;i>=2;i--){
				vectorU[0]=vectorU[0]+compressA[i][0]*identityU[i-2];
			}
			vectorU[1]=0;
			for(int i=4;i>=1;i--){
				vectorU[1]=vectorU[1]+compressA[i][1]*identityU[i-1];
			}
			for(int k=2;k<=dimensionA-3;k++){
				double sum4=0;
				for(int i=4;i>=0;i--){
					sum4=sum4+compressA[i][k]*identityU[i+k-2];
				}
				vectorU[k]=sum4;
			}
			vectorU[dimensionA-2]=0;
			for(int i=3;i>=0;i--){
				vectorU[dimensionA-2]=vectorU[dimensionA-2]+compressA[i][dimensionA-2]*identityU[i+dimensionA-4];
			}
			vectorU[dimensionA-1]=0;
			for(int i=2;i>=0;i--){
				vectorU[dimensionA-1]=vectorU[dimensionA-1]+compressA[i][dimensionA-1]*identityU[i+dimensionA-3];
			}
			double sum5=0;
			for(int i=0;i<=dimensionA-1;i++){
				sum5=sum5+identityU[i]*vectorU[i];
			}
			
			former=current;
			current=sum5;
			eigenvalue2=sum5;
			
		}while((Math.abs(current-former)/Math.abs(current))>=e);//迭代結束		
		
		if(Math.signum(eigenvalue1)==1){
			eigenvalueMax=eigenvalue1;
			eigenvalueMin=eigenvalue1+eigenvalue2;
		}
		else{
			eigenvalueMin=eigenvalue1;
			eigenvalueMax=eigenvalue1+eigenvalue2;
		}//判斷正負,得出最大/最小特征值
		System.out.println("矩陣A的最大特征值為:"+myformat.format(eigenvalueMax));	
		System.out.println("矩陣A的最小特征值為:"+myformat.format(eigenvalueMin));
		
		
		/*還原compressA,然后用反冪法求matrixA的特征值的最小模absoluteEigenvalueMin,以及第二問的與benchmark接近的特征值adjacenceBenchmark.
		 *其中absoluteEigenvalueMin,即為benchmark=0時的adjacenceBenchmark的絕對值
		 *聲明變量mid1[]存儲方程的中間解,processEigenvalue[]來存儲compressA-benchmark的模最小的特征值的值*/
		double processEigenvalue[]=new double[40]; 
		processEigenvalue[0]=0;
		compressA[0][0]=0;
		compressA[0][1]=0;
		for(int i=2;i<=dimensionA-1;i++){
			compressA[0][i]=constantC;
		}
		compressA[1][0]=0;
		for(int i=1;i<=dimensionA-1;i++){
			compressA[1][i]=constantB;
		}
		for(int i=0;i<=dimensionA-1;i++){
			compressA[2][i]=diagonalA[i];
		}
		for(int i=0;i<=dimensionA-2;i++){
			compressA[3][i]=constantB;
		}
		compressA[3][dimensionA-1]=0;
		for(int i=0;i<=dimensionA-3;i++){
			compressA[4][i]=constantC;
		}
    		compressA[4][dimensionA-2]=0;
   		compressA[4][dimensionA-1]=0;//compressA還原結束	
   		
   		benchmark[0]=0;
   		for(int i=1;i<=39;i++){
   			benchmark[i]=eigenvalueMin+i*(eigenvalueMax-eigenvalueMin)/40;
   		}//為benchmark賦值
   		
   		//40次平移求特征值開始循環	 
   		for(int k=0;k<=39;k++){
   			for(int i=0;i<=dimensionA-1;i++){
   				compressA[2][i]=compressA[2][i]-benchmark[k];
   			}//得出平移A后的壓縮矩陣
   			
   			//對compressA進行LU分解
			for(int n=0;n<=dimensionA-1;n++){
				for(int j=n;j<=Math.min(n+2,dimensionA-1);j++){
					double sum1=0;
					for(int t=Math.max(Math.max(0,n-2),j-2);t<=n-1;t++){
						sum1=sum1+compressA[n-t+2][t]*compressA[t-j+2][j];
					}
					compressA[n-j+2][j]=compressA[n-j+2][j]-sum1;
				}
				for(int i=n+1;i<=Math.min(n+2,dimensionA-1);i++){
					if(n>=dimensionA-1) break;
					else{
						double sum2=0;
						for(int t=Math.max(Math.max(0,i-2),n-2);t<=n-1;t++){
							sum2=sum2+compressA[i-t+2][t]*compressA[t-n+2][n];
						}
						compressA[i-n+2][n]=(compressA[i-n+2][n]-sum2)/compressA[2][n];
					}
				}
			}//LU分解結束
			for(int i=0;i<=dimensionA-1;i++){
				vectorU[i]=1;
			}//初始向量賦值
			former=current=0;
			//反冪法求平移后矩陣模最小的特征值開始迭代
			do{
				double absoluteU=0;
				double identityU[]=new double[dimensionA];
				double sum6=0;
				for(int i=0;i<=dimensionA-1;i++){
					sum6=sum6+vectorU[i]*vectorU[i];	
				}
				absoluteU=Math.sqrt(sum6);
				for(int i=0;i<=dimensionA-1;i++){
					identityU[i]=vectorU[i]/absoluteU;
				}
				//求下一次迭代需要的vectorU

				double mid1[]=new double[dimensionA];
				mid1[0]=identityU[0];
				mid1[1]=identityU[1]-compressA[3][0]*mid1[0];
				for(int i=2;i<=dimensionA-1;i++){
					mid1[i]=identityU[i]-compressA[4][i-2]*mid1[i-2]-compressA[3][i-1]*mid1[i-1];
				}
				vectorU[dimensionA-1]=mid1[dimensionA-1]/compressA[2][dimensionA-1];
				vectorU[dimensionA-2]=mid1[dimensionA-2]-compressA[1][dimensionA-1]*vectorU[dimensionA-1];
				for(int i=dimensionA-3;i>=0;i--){
					vectorU[i]=(mid1[i]-compressA[1][i+1]*vectorU[i+1]-compressA[0][i+2]*vectorU[i+2])/compressA[2][i];
				}//vectorU求出
				double sum7=0;
				for(int i=0;i<=dimensionA-1;i++){
					sum7=sum7+identityU[i]*vectorU[i];
				}
				former=current;
				current=1/sum7;

			}while((Math.abs(current-former)/Math.abs(current))>=e);//迭代結束
			processEigenvalue[k]=current;
			adjacenceBenchmark[k]=processEigenvalue[k]+benchmark[k];
			if(k!=0){
			System.out.println("矩陣A與第"+k+"個數"+myformat.format(benchmark[k])+"最接近的特征值為:"+myformat.format(adjacenceBenchmark[k]));
			}
			
			//還原compressA
			compressA[0][0]=0;
			compressA[0][1]=0;
			for(int i=2;i<=dimensionA-1;i++){
				compressA[0][i]=constantC;
			}
			compressA[1][0]=0;
			for(int i=1;i<=dimensionA-1;i++){
				compressA[1][i]=constantB;
			}
			for(int i=0;i<=dimensionA-1;i++){
				compressA[2][i]=diagonalA[i];
			}
			for(int i=0;i<=dimensionA-2;i++){
				compressA[3][i]=constantB;
			}
			compressA[3][dimensionA-1]=0;
			for(int i=0;i<=dimensionA-3;i++){
				compressA[4][i]=constantC;
			}
    			compressA[4][dimensionA-2]=0;
   			compressA[4][dimensionA-1]=0;//compress還原結束	

   		}//40個特征值求出
   		absoluteEigenvalueMin=adjacenceBenchmark[0];
   		condA=Math.abs(absoluteEigenvalueMax/absoluteEigenvalueMin);
   		System.out.println("矩陣A的特征值的模的最小值為:"+myformat.format(absoluteEigenvalueMin));
   		System.out.println("矩陣A的(譜范數)條件數為:"+myformat.format(condA));
   		System.out.println("矩陣的行列式為:"+myformat.format(detA));
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男人的天堂亚洲一区| 国产一区二区三区综合| 一本到不卡免费一区二区| 91精品午夜视频| 中文字幕一区二区三区不卡在线| 日韩avvvv在线播放| 成人av在线一区二区三区| 欧美电影免费提供在线观看| 亚洲免费av网站| 国产成人aaa| 欧美r级电影在线观看| 亚洲国产精品久久久男人的天堂 | 亚洲综合一区二区| 国产麻豆成人传媒免费观看| 91精品国产综合久久久久久 | 亚洲成人免费看| 91美女精品福利| 国产欧美1区2区3区| 韩国v欧美v亚洲v日本v| 91精品黄色片免费大全| 午夜成人在线视频| 欧美午夜精品电影| 亚洲综合在线免费观看| 91免费看片在线观看| 中文字幕一区二区三| 岛国av在线一区| 亚洲国产经典视频| 成人精品gif动图一区| 国产欧美一区二区精品性色 | 久久新电视剧免费观看| 麻豆精品视频在线观看视频| 欧美一级黄色录像| 久久国产欧美日韩精品| 欧美电影免费观看高清完整版| 麻豆久久久久久| 欧美精品一区二区久久婷婷| 激情综合色综合久久| 26uuu久久天堂性欧美| 韩国精品在线观看| 国产日本欧洲亚洲| 91在线免费播放| 亚洲乱码国产乱码精品精的特点 | 久久99精品国产.久久久久 | 欧美日韩亚洲综合一区| 天天射综合影视| 日韩免费一区二区| 国产91丝袜在线播放| 中文字幕一区二区三区不卡在线| 色哟哟在线观看一区二区三区| 亚洲综合另类小说| 日韩一级免费一区| 丰满放荡岳乱妇91ww| 亚洲精选免费视频| 欧美一级日韩不卡播放免费| 国产在线精品一区二区夜色| 国产精品久久久久精k8| 欧美色男人天堂| 国产在线视频一区二区| 中文字幕一区二区5566日韩| 欧美精品一卡二卡| 国产剧情在线观看一区二区| 亚洲天堂福利av| 91精品中文字幕一区二区三区| 国产又黄又大久久| 亚洲激情在线激情| 精品国产免费视频| 色婷婷综合久久久| 激情久久久久久久久久久久久久久久| 国产精品免费网站在线观看| 欧美极品美女视频| 欧美日韩一级二级三级| 国产成人精品亚洲午夜麻豆| 亚洲国产人成综合网站| 国产日韩欧美精品一区| 欧美优质美女网站| 国产ts人妖一区二区| 亚洲国产wwwccc36天堂| 久久精品视频一区二区三区| 欧美日韩和欧美的一区二区| 夫妻av一区二区| 免费观看一级特黄欧美大片| 亚洲乱码国产乱码精品精可以看| 欧美精品一区二区三区一线天视频| 91理论电影在线观看| 国产精品一区免费在线观看| 亚洲成人激情社区| 1024成人网| 久久久99精品久久| 日韩小视频在线观看专区| 在线视频综合导航| 粉嫩嫩av羞羞动漫久久久 | 亚洲精品成人a在线观看| 精品福利在线导航| 91精品在线一区二区| 欧洲精品一区二区三区在线观看| 丁香婷婷深情五月亚洲| 精油按摩中文字幕久久| 午夜精品一区二区三区三上悠亚 | 风间由美一区二区av101| 久久丁香综合五月国产三级网站| 亚洲高清在线视频| 一区二区三区久久| 亚洲私人黄色宅男| 中文字幕在线不卡视频| 中文字幕国产精品一区二区| 久久久噜噜噜久久人人看| 欧美一级黄色录像| 欧美一区二区在线免费播放| 欧美日韩精品福利| 欧美日韩在线一区二区| 欧美日韩一区成人| 欧美日韩三级一区| 欧美日高清视频| 欧美色图免费看| 91精品黄色片免费大全| 日韩一区二区三区在线观看| 日韩亚洲欧美一区二区三区| 日韩欧美亚洲国产另类| 欧美mv和日韩mv的网站| 久久亚洲精品国产精品紫薇| 久久精品无码一区二区三区| 国产喷白浆一区二区三区| 国产精品福利电影一区二区三区四区| 中文字幕免费一区| 成人免费在线播放视频| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品视频观看| 午夜欧美一区二区三区在线播放| 天堂va蜜桃一区二区三区漫画版| 日本欧美在线观看| 国产精品一级在线| 色综合激情五月| 这里只有精品99re| 精品久久久久久久久久久久久久久久久| 精品国产乱码久久久久久老虎| 精品国产伦一区二区三区观看方式 | 亚洲第一成人在线| 丝袜亚洲另类欧美综合| 久久99精品一区二区三区三区| 国产一区二区网址| 色综合天天综合在线视频| 欧美剧在线免费观看网站| 日韩一区二区三区免费看 | 7878成人国产在线观看| 日韩精品一区二区三区蜜臀| 国产精品素人视频| 五月婷婷激情综合| 国产成人精品亚洲777人妖 | 日韩一区二区三区在线观看| 中文字幕不卡一区| 午夜精品国产更新| 丁香网亚洲国际| 欧美日韩另类一区| 国产亚洲精品久| 亚洲不卡在线观看| 成人精品鲁一区一区二区| 欧美裸体bbwbbwbbw| 中文字幕第一区二区| 五月激情综合婷婷| 成人午夜免费电影| 日韩欧美国产wwwww| 国产精品成人一区二区三区夜夜夜| 午夜精品久久久久久久99樱桃| 成人综合在线视频| 日韩欧美资源站| 一区二区日韩av| 国产精品一二三四| 91精品国产91综合久久蜜臀| 日韩伦理免费电影| 国产精品一区二区不卡| 日韩午夜精品视频| 一个色综合av| 成人福利视频网站| 久久综合九色综合97婷婷| 亚洲va欧美va人人爽午夜| 99久久精品国产观看| 久久精品欧美日韩| 久久91精品国产91久久小草| 欧美日韩三级一区二区| 亚洲精品国产一区二区精华液| 懂色av一区二区三区免费看| 日韩精品资源二区在线| 亚洲高清不卡在线观看| 色欧美乱欧美15图片| 最新不卡av在线| 成人黄页毛片网站| 国产欧美日韩三级| 国产在线精品不卡| 久久综合色8888| 蜜桃免费网站一区二区三区| 欧美精品第1页| 亚洲图片自拍偷拍| 欧美午夜影院一区| 一区二区成人在线| 欧美在线观看视频在线| 亚洲免费三区一区二区| 91麻豆swag| 亚洲第一会所有码转帖| 欧美日韩国产一区二区三区地区| 亚洲成人免费观看|