- 相關(guān)推薦
Romberg龍貝格算法實(shí)驗(yàn)報告
課 程 實(shí) 驗(yàn) 報 告
課程名稱:
專業(yè)班級: CS1306班 學(xué) 號: U201314967 姓 名: 段沛云 指導(dǎo)教師: 報告日期:
計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
目錄
1 實(shí)驗(yàn)?zāi)康?........................................................ 1
2 實(shí)驗(yàn)原理 ........................................................ 1
3 算法設(shè)計(jì)與流程框圖 .............................................. 2
4 源程序 .......................................................... 4
5 程序運(yùn)行 ........................................................ 7
6 結(jié)果分析 ........................................................ 7
7 實(shí)驗(yàn)體會 ........................................................ 7
1 實(shí)驗(yàn)?zāi)康?/p>
掌握Romberg公式的用法,適用范圍及精度,熟悉Romberg算法的流程,并能夠設(shè)計(jì)算法計(jì)算積分
31
得到結(jié)果并輸出。 1x
2 實(shí)驗(yàn)原理
2.1 取k=0,h=b-a,求T0=
數(shù))。 2.2 求梯形值T0(
b-a
),即按遞推公式(4.1)計(jì)算T0。 k
2
h
[f(a)+f(b)],令1→k,(k記區(qū)間[a,b]的二分次2
2.3 求加速值,按公式(4.12)逐個求出T表的第k行其余各元素Tj(k-j)
(j=1,2,….k)。
2.4 若|Tk+1-Tk|
n-1
11T2n=[Tn+hn∑f(xi+)]
22i=0
1
Sn=T2n+(T2n-Tn)
31
Cn=S2n+(S2n-Sn)
151
Rn=C2n+(C2n-Cn)
63
3 算法設(shè)計(jì)與流程框圖
算法設(shè)計(jì):(先假定所求積分二分最大次數(shù)次數(shù)為20) 3.1 先求T[k][0] 3.2 再由公式T
(k)m
4m(k+1)1)=mTm-1-mTm(k-1(k=1,2,) 求T[i][j] 4-14-1
3.3 在求出的同時比較T[k][k]與T[k-1][k-1]的大小,如果二者之差的絕對
值小于1e-5,就停止求T[k][k];此時的k就是所求的二分次數(shù),而此時的T[k][k]就是最終的結(jié)果 3.4 打印出所有的T[i][j]; 程序流程圖
4 源程序
#include #include #include #include int main(void) {
float f(float(x)) {
float y; y=1/x; return y; }
float a,b,e,h,s,k,x,T1=0,T2=0,S1=0,S2=0,C1=0,C2=0,R1=0,R2=0; int i=0;
printf("請輸入積分下限 : "); scanf("%f",&a);
printf("\n請輸入積分上限 :"); scanf("%f",&b);
printf("\n請輸入允許誤差 :"); scanf("%f",&e); k大學(xué)網(wǎng)=1; h=b-a;
T1=h*(f(a)+f(b))/2;
printf("____________________________________________\n"); printf("計(jì)算結(jié)果如下 : \n");
printf("\nk T2 S2 C2 R2\n"); printf("%d %10.7f %10.7f %10.7f %10.7f\n",i,T1,S1,C1,R1); do {
x=a+h/2; s=0; while(x
{ s=s+f(x); x=x+h; }
T2=(T1+s*h)/2; S2=T2+(T2-T1)/3; if(k==1) {
T1=T2; S1=S2; h=h/2; k=k+1; }
else if(k==2) {
C2=S2+(S2-S1)/15; C1=C2; T1=T2; S1=S2; h=h/2; k=k+1; }
else if(k==3) {
R2=C2+(C2-C1)/63; C2=S2+(S2-S1)/15; C1=C2; T1=T2; S1=S2; h=h/2; k=k+1; } else {
C2=S2+(S2-S1)/15;
R2=C2+(C2-C1)/63; if(fabs(R2-R1)
printf("%d %10.7f %10.7f %10.7f %10.7f\n",i+1,T2,S2,C2,R2);
break;
} else { R1=R2; C1=C2; T1=T2; S1=S2; h=h/2; k=k+1; } } i++;
printf("%d %10.7f %10.7f %10.7f %10.7f\n",i,T2,S2,C2,R2); } while(1); system("pause"); return 0; }
5 程序運(yùn)行
6 結(jié)果分析
如上所示的結(jié)果與課本中求得的結(jié)果完全一樣,表明程序編寫正確,且符合要求,事實(shí)上,只要再將所求值的精度設(shè)置得更小,則所求的結(jié)果將更加準(zhǔn)確,最終將無限接近于標(biāo)準(zhǔn)值,由上表也可以看出用龍貝格積分法求函數(shù)的積分值在精度比較低的情況下就能求到很準(zhǔn)確的值!
7 實(shí)驗(yàn)體會
本次實(shí)驗(yàn)較為簡單,主要時間是耗費(fèi)在循環(huán)判斷上面,因?yàn)闀弦呀?jīng)給了流程圖,都是基本的C語言,難度不大。過程中唯一遇到的一點(diǎn)障礙就是在寫循環(huán)判斷時由于多重判斷多重循環(huán)導(dǎo)致混亂,幸好最后改
正了,最后得到的結(jié)果經(jīng)檢驗(yàn)與給定的結(jié)果相同。通過這次實(shí)驗(yàn)上機(jī),
使我更進(jìn)一步了解了龍貝格法的計(jì)算思想,其在精度上很有保證,收斂較快,是解積分問題的有效方法。
【Romberg龍貝格算法實(shí)驗(yàn)報告】相關(guān)文章:
綠色良知-盧岑貝格和他的《自然不可改良》05-01
基于貝葉斯粗糙集模型的屬性約簡算法04-29
基于貝葉斯優(yōu)化的無人機(jī)路徑規(guī)劃算法04-30
轉(zhuǎn):一個gg的羅蘭貝格暑期實(shí)習(xí)總結(jié)04-27
基于LMS格型算法的自適應(yīng)參數(shù)譜估計(jì)方法04-29
可壓流的龍格-庫塔時間步進(jìn)求解法及其應(yīng)用04-27
基于K2結(jié)構(gòu)學(xué)習(xí)算法的多光譜影像貝葉斯網(wǎng)絡(luò)分類器04-27
心算法04-30
數(shù)學(xué)算法04-28