Java解線性方程組_第1頁
Java解線性方程組_第2頁
Java解線性方程組_第3頁
Java解線性方程組_第4頁
Java解線性方程組_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Java解線性方程組方法一:高斯消去法importjava.util.Scanner;publicclassGauss{ /** *@列主元高斯消去法 */ staticdoublea[][]; staticdoubleb[]; staticdoublex[]; staticintn; staticintn2;//記錄換行的次數(shù)publicstaticvoidElimination(){//消元 for(intk=1;k<=n-1;k++) { Wrap(k); for(inti=k+1;i<=n;i++) { doublel=a[i][k]/a[k][k]; a[i][k]=0.0; for(intj=k+1;j<=n;j++) a[i][j]=a[i][j]-l*a[k][j]; b[i]=b[i]-l*b[k]; } System.out.println("第"+k+"次消元后:"); PrintA(); } }publicstaticvoidBack()//回代{ x[n]=b[n]/a[n][n]; for(inti=n-1;i>=1;i--) x[i]=(b[i]-jisuan(i))/a[i][i];}publicstaticdoublejisuan(inti){ doublehe=0.0; for(intj=i+1;j<=n;j++) he=he+x[j]*a[i][j]; returnhe;}publicstaticvoidWrap(intk){//換行 doublemax=Math.abs(a[k][k]); intn1=k;//記住要交換的行 for(inti=k+1;i<=n;i++)//找到要交換的行 { if(Math.abs(a[i][k])>max){ n1=i; max=Math.abs(a[i][k]); } } if(n1!=k) { n2++; System.out.println("當(dāng)k="+k+"時,要交換的行是:"+k+"和"+n1); for(intj=k;j<=n;j++)//交換a的行 { doublex1; x1=a[k][j]; a[k][j]=a[n1][j]; a[n1][j]=x1; } doubleb1;//交換b的行 b1=b[k]; b[k]=b[n1]; b[n1]=b1; System.out.println("交換后:"); PrintA(); }}publicstaticvoidDeterminant(){//求行列式 doubleDM=1.0; for(inti=1;i<=n;i++) { doublea2=a[i][i]; DM=DM*a2; } doublen3=(double)n2; DM=DM*Math.pow(-1.0,n3); System.out.println("該方程組的系數(shù)行列式:detA="+DM);}publicstaticvoidPrintA(){//輸出增廣矩陣 System.out.println("增廣矩陣為:"); for(inti=1;i<=n;i++) { for(intj=1;j<=n;j++) System.out.print(a[i][j]+""); System.out.print(b[i]+""); System.out.print("\n"); }}publicstaticvoidPrint(){//輸出方程的根 System.out.println("方程組的根為:"); for(inti=1;i<=n;i++) System.out.println("x"+i+"="+x[i]);} publicstaticvoidmain(String[]args){ Scanneras=newScanner(System.in);System.out.println("輸入方程組的元數(shù):");n=as.nextInt();a=newdouble[n+1][n+1];b=newdouble[n+1];x=newdouble[n+1];System.out.println("輸入方程組的系數(shù)矩陣a:");for(inti=1;i<=n;i++) for(intj=1;j<=n;j++) a[i][j]=as.nextDouble();System.out.println("輸入方程組矩陣b:");for(inti=1;i<=n;i++) b[i]=as.nextDouble();Elimination();Back();Print();Determinant(); }}方法二:杜里特爾法求解線性方程組importjava.util.Scanner;publicclassDuri_Ritter{ /** *@杜里特爾法求解線性方程組 */ staticdoublea[][]; staticdoubleb[]; staticdoublex[]; staticintn; publicstaticvoidLU(){//將系數(shù)矩陣進行LU分解 for(intj=2;j<=n;j++) a[j][1]=a[j][1]/a[1][1]; for(intr=2;r<=n;r++) { for(inti=r;i<=n;i++) a[r][i]=a[r][i]-jisuan(r,i); for(inti=r+1;i<=n;i++) a[i][r]=(a[i][r]-jisuan1(r,i))/a[r][r]; } PrintA(); } publicstaticvoidJie_xy(){ x[1]=b[1]; for(inti=2;i<=n;i++) x[i]=b[i]-jisuan2(i); PrintX(0); x[n]=x[n]/a[n][n]; for(inti=n-1;i>=1;i--) x[i]=(x[i]-jisuan3(i))/a[i][i]; PrintX(1); } publicstaticvoidHL(){//計算系數(shù)矩陣A的行列式 doublecj=1.0; for(inti=1;i<=n;i++) cj=cj*a[i][i]; System.out.println("A的行列式:|A|="+cj); } publicstaticdoublejisuan(intr,inti){ doubleSum=0.0; for(intk=1;k<=r-1;k++) Sum=Sum+a[r][k]*a[k][i]; returnSum; } publicstaticdoublejisuan1(intr,inti){ doubleSum=0.0; for(intk=1;k<=r-1;k++) Sum=Sum+a[i][k]*a[k][r]; returnSum; } publicstaticdoublejisuan2(inti){ doubleSum=0.0; for(intk=1;k<=i-1;k++) Sum=Sum+a[i][k]*x[k]; returnSum; } publicstaticdoublejisuan3(inti){ doubleSum=0.0; for(intk=i+1;k<=n;k++) Sum=Sum+a[i][k]*x[k]; returnSum; } publicstaticvoidPrintA(){//輸出矩陣A System.out.println("分解后的矩陣A:"); for(inti=1;i<=n;i++) { for(intj=1;j<=n;j++) System.out.print(a[i][j]+""); System.out.print("\n"); } } publicstaticvoidPrintX(intx1){//輸出數(shù)組X if(x1==0)System.out.println("方程組Ly=b的解為:"); elseSystem.out.println("方程組Ux=y的解為:"); for(inti=1;i<=n;i++) { if(x1==0) System.out.print("y"+i+"="+x[i]+""); elseSystem.out.print("x"+i+"="+x[i]+""); } System.out.print("\n"); } publicstaticvoidmain(String[]args){ Scanneras=newScanner(System.in);System.out.println("輸入方程組的元數(shù):");n=as.nextInt();a=newdouble[n+1][n+1];b=newdouble[n+1];x=newdouble[n+1];System.out.println("輸入方程組的系數(shù)矩陣a:");for(inti=1;i<=n;i++) for(intj=1;j<=n;j++) a[i][j]=as.nextDouble();System.out.println("輸入方程組矩陣b:");for(inti=1;i<=n;i++) b[i]=as.nextDouble();LU();Jie_xy();HL(); }方法三:高斯-賽德爾迭代法求線性方程組packagecom.springworks.db4o.test;importjava.util.Scanner;publicclassGauss_Seidel{ /** *@高斯-賽德爾迭代法求線性方程組 */ staticdoublea[][]; staticdoubleb[]; staticdoublex[]; staticdoublex2[]; staticintn; staticdoublee; publicstaticvoidIT(){ intk=0; System.out.println("kx1x2x3"); System.out.print(k+""); for(inti=1;i<=n;i++) { System.out.print(x[i]+""); } System.out.println("\n"); do{ k++; for(inti=1;i<=n;i++) x2[i]=x[i];for(inti=1;i<=n;i++){ x[i]=f_x(i);}System.out.print(k+""); for(inti=1;i<=n;i++) { System.out.print(x[i]+""); } System.out.println("\n"); }while(jisuan()>=e); } publicstaticdoublejisuan(){ doublemax=0.0; for(inti=1;i<=n;i++) { doublex3=Math.abs(x[i]-x2[i]); if(x3>max)max=x3; } returnmax; } publicstaticdoublef_x(inti){//算迭代式的值 doublex1=0.0; for(intj=1;j<=n;j++) if(j!=i)x1=x1+a[i][j]*x[j]; doublex2=(b[i]-x1)/a[i][i]; returnx2; } publicstaticvoidPrint_Jie()//輸出方程組的解 { System.out.print("方程組的解為:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論