太原理工計(jì)算機(jī)數(shù)值方法實(shí)驗(yàn)報(bào)告_第1頁(yè)
太原理工計(jì)算機(jī)數(shù)值方法實(shí)驗(yàn)報(bào)告_第2頁(yè)
太原理工計(jì)算機(jī)數(shù)值方法實(shí)驗(yàn)報(bào)告_第3頁(yè)
太原理工計(jì)算機(jī)數(shù)值方法實(shí)驗(yàn)報(bào)告_第4頁(yè)
太原理工計(jì)算機(jī)數(shù)值方法實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、本科實(shí)驗(yàn)報(bào)告課程名稱: 計(jì)算機(jī)數(shù)值方法 實(shí)驗(yàn)項(xiàng)目:1方程求根 2線性方程組的直接解法 3線性方程組的迭代解法 4代數(shù)插值和最小二乘擬合多項(xiàng)式實(shí)驗(yàn)地點(diǎn): 專業(yè)班級(jí): 學(xué)號(hào): 學(xué)生姓名: 指導(dǎo)教師: 2015年 6 月 3 日學(xué)生姓名實(shí)驗(yàn)成績(jī)實(shí)驗(yàn)名稱 實(shí)驗(yàn)一 方程求根實(shí)驗(yàn)內(nèi)容和要求熟悉使用二分法、迭代法、牛頓法、割線法等方法對(duì)給定的方程進(jìn)行根的求解。選擇上述方法中的兩種方法求方程:f(x)=x3+4x2-10=0在1,2內(nèi)的一個(gè)實(shí)根,且要求滿足精度|x*-xn10-5實(shí)驗(yàn)原理使用二分法,首先判斷是否滿足精度,然后找到區(qū)間中點(diǎn),將其值代入方程與左右端點(diǎn)值相乘判斷正負(fù),根據(jù)情況替換掉左端點(diǎn)或右端點(diǎn),直

2、到滿足要求。使用牛頓法,根據(jù)書上公式進(jìn)行循環(huán)迭代,誤差為迭代前后值得差,最終給出結(jié)果。主要儀器設(shè)備筆記本計(jì)算機(jī)實(shí)驗(yàn)記錄實(shí)驗(yàn)數(shù)據(jù)記錄和處理;package 實(shí)驗(yàn)1;public class Twoswift static double f(double x)return x*x*x+4*x*x-10;public static void main(String args)double a=1,b=2,c=1.5;for(;)if(b-a)/2=0.000005)if(f(a)*f(c)=0)break;else if(f(a)*f(c)0) /替換左端點(diǎn)a=c;c=(a+b)/2;else br

3、eak;System.out.println(a=+a+b=+b+二分結(jié)果為+c+誤差=+(b-a)/2);開始a=0,b=1,c=1for?f(a)*f(c)=0?f(a)*f(c)0?breakc=(a+b)/2結(jié)束package 實(shí)驗(yàn)2方法2;public class Niunun public static void main(String args)double a=0,b=1.5,c = 1;while00005)a=b-(b*b*b+4*b*b-10)/(3*b*b+8*b);c=Math.abs(a-b); /誤差記錄點(diǎn)b=a;System.out.println(二分結(jié)果為+

4、a+誤差=+c);開始a=0,b=1.5 c=100005a=b-(b*b*b+4*b*b-10)/(3*b*b+8*b)c=Math.abs(a-b)b=a結(jié)束實(shí)驗(yàn)結(jié)果和分析方法1:方法2: 根據(jù)誤差大小來看,方法二的誤差更小,但是方法二要求利用公式,方法一則直接可以對(duì)數(shù)字進(jìn)行操作,更加簡(jiǎn)潔易懂。心得體會(huì) 在二分法中,只需要搞清楚和判斷的條件,就能輕松寫出程序,在牛頓法中,我則先手算出函數(shù)的一階導(dǎo)數(shù),然后利用公式進(jìn)行計(jì)算,實(shí)驗(yàn)較為簡(jiǎn)單易懂,但是要注意誤差的判定,即循環(huán)跳出的條件。實(shí)驗(yàn)名稱 實(shí)驗(yàn)二 線性方程組的直接求解實(shí)驗(yàn)內(nèi)容和要求利用Gauss消元法求解下列方程組:實(shí)驗(yàn)原理根據(jù)書上的高斯消元

5、法的公司把方程按行按列處理,將方程組依次消元,得出上三角矩陣,隨后經(jīng)過回代,則可以得出答案。主要儀器設(shè)備臺(tái)式或筆記本計(jì)算機(jī)實(shí)驗(yàn)記錄(寫出實(shí)驗(yàn)內(nèi)容中的程序代碼和運(yùn)行結(jié)果)(可分欄或加頁(yè))package 實(shí)驗(yàn)2高斯消元法;import ;import ; import java.util.Scanner;public class Gauss public static void Gauss1(double a)double b=new double3;double s;int i,j,k;for(k=0;k3;k+) /i代表行for(i=k;i=0;j-)ai+1j=ai+1j-akj*ai+1

6、k/akk; /將矩陣化簡(jiǎn)為三角矩陣System.out.println(上三角矩陣為:);for(i=0;i3;i+)for(j=0;j=0;i-) s=0; for(j=2;ji;j-) s=aij*bj+s; /把計(jì)算出來的值累加 bi=(ai3-s)/aii; for(i=0;i3;i+) System.out.println(x(+(i+1)+)=+bi); public static void main(String args)Scanner sc=new Scanner(System.in); double a=new double34;int i,j;System.out.pr

7、intln(輸入系數(shù)及常數(shù)項(xiàng)矩陣:);for(i=0;i3;i+)for(j=0;j=3;j+)aij=sc.nextInt();Gauss1(a);實(shí)驗(yàn)結(jié)果和分析 此方程組適合用高斯消元法進(jìn)行求解,要根據(jù)不同的方程組選用不同的方式才能使計(jì)算簡(jiǎn)化。心得體會(huì)(遇到的問題和解決方法) 編寫過程中難點(diǎn)主要在于求上三角矩陣和回代求解,尤其是對(duì)循環(huán)語(yǔ)句出口條件的建立,多一個(gè)或少一個(gè)都有可能造成錯(cuò)誤,同時(shí)要利用好公式進(jìn)行計(jì)算,記錄回代過程中的x值。實(shí)驗(yàn)名稱 實(shí)驗(yàn)三 線性方程組的迭代求解實(shí)驗(yàn)內(nèi)容和要求使用雅可比迭代法或高斯-賽德爾迭代法對(duì)下列方程組進(jìn)行求解。實(shí)驗(yàn)原理高斯-賽德爾迭代法,利用給定的初值通過多次

8、迭代代入來逼近真實(shí)值主要儀器設(shè)備臺(tái)式或筆記本計(jì)算機(jī)實(shí)驗(yàn)記錄(寫出實(shí)驗(yàn)內(nèi)容中的程序代碼和運(yùn)行結(jié)果)(可分欄或加頁(yè))package 實(shí)驗(yàn)3高斯賽德爾迭代法;import java.util.Scanner;public class GussSder public static void main(String args)Scanner sc=new Scanner(System.in); double a=new double34;/方程組 double b=new double3; /近似解 double c=new double3; /c為記錄前一次的結(jié)果 double s; int i,j;

9、 System.out.println(輸入系數(shù)及常熟項(xiàng)矩陣:); for(i=0;i3;i+)for(j=0;j=3;j+)aij=sc.nextDouble(); System.out.println(輸入解的初值:); for(i=0;i3;i+) bi=sc.nextInt(); System.out.println(迭代過程如下:); do for(i=0;i3;i+) ci=bi; /記錄前一次結(jié)果 for(i=0;i3;i+) s=0; for(j=0;j3;j+) if(i!=j) s=s+aij*bj; /計(jì)算除了當(dāng)前x值以外的值 bi=(ai3-s)/aii; /替代原有x

10、值 for(j=0;j0.00005&Math.abs(c1-b1)0.00005&Math.abs(c2-b2)0.00005);實(shí)驗(yàn)結(jié)果和分析 雅克比迭代法計(jì)算完成一組才會(huì)改變x的值,然后代入計(jì)算下一組,隨后得出結(jié)論,而高斯賽德爾迭代法則完成一次計(jì)算就改變x的值,速度更快,但是有時(shí)候會(huì)造成函數(shù)的發(fā)散。心得體會(huì) 用高斯賽德爾迭代法相較于雅克比迭代法在編程上可省略一些步驟,比如計(jì)算一次以后的值直接更新,而不用記錄一組數(shù)字以后再更新使用,編寫起來容易。同時(shí)程序中利用dowhile循環(huán)首先將數(shù)組b里的值填滿,省的賦予初值。實(shí)驗(yàn)名稱 實(shí)驗(yàn)四 代數(shù)插值和最小二乘法擬合實(shí)驗(yàn)內(nèi)容和要求給定數(shù)據(jù)點(diǎn)(xi ,

11、yi)如下:xi0yi1(1) 使用拉格朗日插值法或牛頓插值法, 求f(0.856)的近似值.(2) 用最小二乘法擬合數(shù)據(jù)的(n次)多項(xiàng)式,求f(0.856)的近似值.(3) 對(duì)比、分析上兩結(jié)果。實(shí)驗(yàn)原理拉格朗日插值法:根據(jù)輸入的點(diǎn)確定多個(gè)基函數(shù),再利用基函數(shù)確定所要求的值。最小二乘法擬合:根據(jù)給定點(diǎn),確定建立正規(guī)方程組: (xij+k)ak=xij (yi ,j=0,1,n) ,解方程組得到擬合多項(xiàng)式。主要儀器設(shè)備臺(tái)式或筆記本計(jì)算機(jī)實(shí)驗(yàn)記錄(寫出實(shí)驗(yàn)內(nèi)容中的程序代碼和運(yùn)行結(jié)果)(可分欄或加頁(yè))package 實(shí)驗(yàn)4代數(shù)插值;import java.util.Scanner;public cl

12、ass Dscz public static final int N=7;public static void main(String args)Scanner sc=new Scanner(System.in);int i,j;double x=new doubleN; /x值 double y=new doubleN; /y值 double lx=new doubleN; /基函數(shù) double Xi,Lx; /Xi為給定值,Lx為對(duì)應(yīng)結(jié)果 System.out.println(輸入(x,f(x):); for(i=0;iN;i+) /輸入給定點(diǎn) xi=sc.nextDouble(); y

13、i=sc.nextDouble(); System.out.println(輸入要求的Xi:); Xi=sc.nextDouble(); System.out.println(輸出每個(gè)基函數(shù)的值:); for(i=0;iN;i+) /求基函數(shù) lxi=1; /設(shè)定初值無意義 for(j=0;jN;j+) if(xi-xj!=0) lxi=(Xi-xj)/(xi-xj)*lxi;/跳過相差為0的值 System.out.println(lx+i+=+lxi); Lx=0; for(i=0;iN;i+) /求y*lx的值 Lx=yi*lxi+Lx; System.out.println(結(jié)果為:+

14、Lx);package 實(shí)驗(yàn)4最小二乘法擬合;import java.util.Scanner;public class Min public static final int N=7;public static final int M=3;public static void Gauss1(double a,double b)/用高斯消元法解方程double s;int i,j,k;for(k=0;kM;k+)for(i=k;i=0;j-)ai+1j=ai+1j-akj*ai+1k/akk;System.out.println(上三角矩陣為:);for(i=0;iM;i+)for(j=0;j

15、=0;i-) s=0; for(j=M-1;ji;j-) s=aij*bj+s; bi=(ai3-s)/aii; for(i=0;iM;i+) System.out.println(x(+(i+1)+)=+bi); public static void main(String args)double b=new doubleM;Scanner sc=new Scanner(System.in); double a=new doubleMM+1; double x=new doubleN; double y=new doubleN;int i,j,k,l;double t;System.out.

16、println(輸入(x,f(x):);for(i=0;iN;i+) /輸入給定點(diǎn) xi=sc.nextDouble(); yi=sc.nextDouble(); for(i=0;iM;i+) /*計(jì)算正規(guī)方程組*/ for(j=0;j=M;j+) if(jM) /計(jì)算x的值 aij=0; for(l=0;lN;l+) t=1; for(k=0;kj+i;k+)/根據(jù)i和j的值確定x的次數(shù) t=t*xl; aij=aij+t;/改變系數(shù)矩陣的值 if(j=M) /計(jì)算y的值 aij=0; for(l=0;lN;l+) t=yl; for(k=0;ki;k+)/根據(jù)i和j的值確定y乘x的幾次 t=t*xl; aij=aij+t;/改變右邊結(jié)果的值 System.out.println(輸出正規(guī)矩陣:); for(i=0;iM;i+) /*輸出正規(guī)系數(shù)常數(shù)項(xiàng)矩陣*/ for(j=0;j=M;j+) System.out.print(aij+ ); System.out.println(); Gauss1(a,b); System.out.println(輸出擬合曲線方程

溫馨提示

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

評(píng)論

0/150

提交評(píng)論