數(shù)值計算方法課程設(shè)計(C語言)_第1頁
數(shù)值計算方法課程設(shè)計(C語言)_第2頁
數(shù)值計算方法課程設(shè)計(C語言)_第3頁
數(shù)值計算方法課程設(shè)計(C語言)_第4頁
數(shù)值計算方法課程設(shè)計(C語言)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)值計算方法課程設(shè)計姓名 學(xué)號成績 課程實(shí)際報告實(shí)驗(yàn)一:秦九韶算法題目用選列主元高斯消去法解線性方程組 算法語言:利用c語言的知識編寫該算法程序算法步驟敘述:秦九昭算法的基思路是v0=a0*x+a1 vi=vi-1*x+ai+1;利用秦九昭算法計算多項(xiàng)式函數(shù)。程序清單:#include<stdio.h>void main()float a5,x,sum;int i;printf("presase input the value of x=");scanf("%f",&x);for(i=5;i>=0;i-)printf("

2、;please input the value of a%d=",i);scanf("%f",&ai);sum=a5;for(i=5;i>=1;i-)sum=sum*x+ai-1;printf("f(x)=%f/n",sum);輸出結(jié)果計算:實(shí)驗(yàn)總結(jié):通過運(yùn)用C語言,解決了秦九韶算法手寫的復(fù)雜。為以后的雪地打下基礎(chǔ)。實(shí)驗(yàn)二:用選列主元高斯消去法解線性方程組題目用選列主元高斯消去法解線性方程組 算法步驟敘述第一步消元在增廣矩陣(A,b)第一列中找到絕對值最大的元素,將其所在行與第一行交換,再對(A,b)做初等行變換使原方程組的第一列

3、元素除了第一行的全變?yōu)?;第二步消元在增廣矩陣(A,b)中第二列中(從第二行開始)找到絕對值最大的元素,將其所在行與第二行交換,再對(A,b)做初等行變換使原方程組的第二列元素除了第一和第二行的全變?yōu)?;第三步消元在增廣矩陣(A,b)中第三列中(從第三行開始)找到絕對值最大的元素,將其所在行與第三行交換,再對(A,b)做初等行變換使原方程組的第三列第四行元素為0;第四,按x4-x3-x2-x1的順序回代求解出方程組的解,xn=bn/ann,xi=(bi-aijxj)/aii,i=n-1,2,1程序清單:#include<iostream>#include<math>#d

4、efine N 4 static double ANN = -3,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2; static double BN=1,0,0,0; static double XN; int i,j,k; void main()for(k = 0; k < N-1 ;k+)int index = k;for(i = k; i< N ;i+)if(fabs(Aindexk) < fabs(Aik)index = i;double temp;for( i = k ; i < N ;i+ ) temp = Aindexi; Aind

5、exi = Aki; Aki = temp;temp = Bindex;Bindex = Bk;Bk = temp;for(i = k+1; i<N; i+)double T = Aik/Akk;Bi = Bi - T * Bk;for ( j = k+1 ; j < N ; j+ )Aij = Aij - T * Akj;XN-1 = BN-1/AN-1N-1;for (i = N-2; i >=0 ; i-)double Temp = 0;for (int j = i+1; j<N ;j+)Temp = Temp + Aij * Xj;Xi = (Bi - Temp

6、) /Aii;cout << "線性方程組的解(X1,X2,X3.Xn)為:"<<endl;for( i = 0; i < N ;i+)cout << Xi <<" "實(shí)驗(yàn)總結(jié): 通過c+語言的編寫過程掌握高斯消元法及選列主元元素的技術(shù),掌握了簡單的c+程序編輯語言編寫算法程序?qū)嶒?yàn)五:二分法與牛頓法題目用二分法和Newton迭代法求下列方程的正根:要求結(jié)果的誤差限為 1.二分法算法語言:C語言算法思路: 算法思路先給定區(qū)間a,b,要求f(a)與f(b)是異號,保證區(qū)間內(nèi)與x軸有交點(diǎn),求x=(a+b)/

7、2,求f(x),檢查f(x)與f(a)是否同號,如果是同號,把x當(dāng)成新的a,否則把x當(dāng)成新的b,得到新的區(qū)間,重復(fù)求a和b的中點(diǎn)的值,判斷與f(a)是否同號,不斷循環(huán)下去,直到達(dá)到精度為止。3)牛頓迭代法設(shè)計思想是對f(x0)某點(diǎn)求切線,與x軸交x1點(diǎn)后,把x1當(dāng)成x0,再求出其相應(yīng)新的f(x0),再對其求切線,找到與x軸的新交點(diǎn),不斷循環(huán)下去,直到達(dá)到精度為止。這種方法要求先對函數(shù)求一階導(dǎo)數(shù),然后再迭代:x1=x0-f(x0)/f(x0) 程序清單:#include<stdio.h>#include <math.h>#define f(x) (x*log(sqrt(x

8、*x-1)+x)-sqrt(x*x-1)-0.5*x) void main() float a,b,x,eps; int k=0; printf("intput epsn");/* 0.5*10-6 */ scanf("%f",&eps); printf("a,b=n"); for(;) scanf("%f, %f",&a ,&b); if(f(a)*f(b)>=0) /* 判斷是否符合二分法使用的條件 */ printf("二分法不可使用,請重新輸入:n"); e

9、lse break; do x=(a+b)/2; k+; if(f(a)*f(x)<0) /* 如果f(a)*f(x)<0,則根在區(qū)間的左半部分 */ b=x; else if(f(a)*f(x)>0) /* 否則根在區(qū)間的右半部分 */ a=x; else break; while(fabs(b-a)>eps);/*判斷是否達(dá)到精度要求,若沒有達(dá)到,繼續(xù)循環(huán)*/ x=(a+b)/2; /* 取最后的小區(qū)間中點(diǎn)作為根的近似值 */ printf("n The root is x=%f, k=%dn",x,k);輸出結(jié)果計算:2. 牛頓法算法思路: 設(shè)

10、r是f(x)=0的根,選取x0作為r初始近似值,過點(diǎn)(x0,f(x0))做曲線y=f(x)的切線L,L的方程為y=f(x0) f'(x0)(x-x0),求出L與x軸交點(diǎn)的橫坐標(biāo) x1=x0-f(x0)/f'(x0),稱x1為r的一次近似值,如果|f(x1)-0|小于指定的精度,那么繼續(xù)過點(diǎn)(x1,f(x1))做曲線y=f(x)的切線,并求該切線與x軸的橫坐標(biāo) x2=x1-f(x1)/f'(x1)稱x2為r的二次近似值,重復(fù)以上過程。得r的近似值序列Xn,其中Xn 1=Xn-f(Xn)/f'(Xn),稱為r的n 1次近似值。程序清單:#include <st

11、dio.h>#include <math.h>float f(float x) /* 定義函數(shù)f(x) */ return (x*log(sqrt(x*x-1)+x)-sqrt(x*x-1)-0.5*x); float f1(float x) /* 定義函數(shù)f(x)的導(dǎo)數(shù) */ return x*log(sqrt(x*x-1)+x)-(sqrt(x*x-1)-0.5*x) ; void main() float eps,x0,x1=1.0; printf("input eps:n"); scanf("%f",&eps); /*

12、輸入容許誤差 */ do x0=x1; /* 準(zhǔn)備下一次迭代的初值 */ x1=x0-f(x0)/f1(x0); /* 牛頓迭代 */ while(fabs(x1-x0)>eps); /*當(dāng)滿足精度,輸出近似根*/ printf("x=%fn",x1);總結(jié):了解和掌握二分法和牛頓迭代的算法思路,學(xué)會利用簡單的編程語言編寫牛頓和二分法的算法思路,并作簡單的計算。實(shí)驗(yàn)八:應(yīng)用經(jīng)典的四階龍格庫塔方法求Lorenz方程題目:應(yīng)用經(jīng)典的四階龍格庫塔方法求Lorenz方程要求:參數(shù),初值,步長.程序設(shè)計:Lorenz方程實(shí)際上是一個四元一階常微分方程,用解析法精確求解是不可能的

13、,只能用數(shù)值計算,最主要的有歐拉法、亞當(dāng)法和龍格- 庫塔法等。為了得到較高精度的數(shù)值解,本實(shí)驗(yàn)要求采用經(jīng)典四階龍格庫塔方法求解該問題。程序清單:#include <stdio.h>float func(float x,float y) return(x-y);float runge_kutta(float x0,float xn,float y0,int N) float x,y,y1,y2,h,xh; float d1,d2,d3,d4; int i; x=x0; y=y0; h=(xn-x0)/(float)N; for(i=1;i<=N;i+) xh=x+h/2; d1=func(x,y); d2=func(xh,y+h*d1/2.0); d3=func(xh,y+h*d2/2.0); d4=func(xh,y+h*d3); y=y+h*(d1+2*d2+2*d3+d4)/6.0; x=x0+i*h; return(y); main() float x0,xn,y0,e; int N; printf("輸入步長 n:n "); scanf("%d",&N); printf("輸入?yún)?shù) x0,xn:n "); scanf("%f,%f"

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論