计算方法汇总
?
一、內(nèi)容簡(jiǎn)介
?????
?
?
?
本次報(bào)告,是在完成整個(gè)學(xué)期的計(jì)算方法學(xué)習(xí)之后做出的一次一小組為單位的總體匯報(bào),我們匯報(bào)的內(nèi)容主要是建立在以全英文教材《劍橋數(shù)值方法教材》學(xué)習(xí)的基礎(chǔ)上,對(duì)教材的四塊主要內(nèi)容經(jīng)行編程實(shí)現(xiàn)、組內(nèi)交流、組間匯報(bào)、匯報(bào)總結(jié)等學(xué)習(xí)討論之后進(jìn)行的一次總結(jié)歸納。此次報(bào)告主要分為四大部分,第一部分我們將著重講解一下計(jì)算方法課程的授課方式和小組內(nèi)的學(xué)習(xí)情況,第二部分我們主要講述一下課程的主要內(nèi)容和我們對(duì)計(jì)算方法經(jīng)行的一下課外的拓展,第三部分我們將展示一下我們組內(nèi)的成員對(duì)計(jì)算方法的學(xué)習(xí)和授課方式的感受,第四部分我們將回顧一學(xué)期的學(xué)習(xí)組長(zhǎng)經(jīng)行一下小組的一個(gè)學(xué)習(xí)總結(jié)。此次報(bào)告我們不局限于教材上所學(xué)的知識(shí),通過多個(gè)算法的比較,我們嘗試著探究效率更高、時(shí)間空間更加優(yōu)化的算法。于是,我們經(jīng)行的廣泛的查詢,雖然時(shí)間不是很充裕,在研究方面也是很淺顯,但是我們不會(huì)以此次報(bào)告為一個(gè)終結(jié)點(diǎn),而是組織組內(nèi)有興趣的人繼續(xù)下去,對(duì)計(jì)算方法這門課程有一個(gè)更加深入的了解。
?
?
?
?
二、前言
?
?
計(jì)算方法又稱“數(shù)值分析”,是為各種數(shù)學(xué)問題的數(shù)值解答研究提供最有效的算法。主要內(nèi)容為函數(shù)逼近論,數(shù)值微分、數(shù)值積分,誤差分析等。常用方法有迭代法、差分法、插值法、有限元素法、線性方程組等。現(xiàn)代的計(jì)算方法還要求適應(yīng)電子計(jì)算機(jī)的特點(diǎn)。
本課程是信息與計(jì)算科學(xué)、數(shù)學(xué)與應(yīng)用數(shù)學(xué)本科專業(yè)必修的一門專業(yè)基礎(chǔ)課,我們需在掌握數(shù)學(xué)分析、高等代數(shù)和常微分方程的基礎(chǔ)知識(shí)之上,學(xué)習(xí)本課程。 “計(jì)算方法”是專門研究各種數(shù)學(xué)問題的近似解的一門課程,通過這門課程的教學(xué),使學(xué)生掌握用數(shù)值分析方法解決實(shí)際問題以及算法原理和理論分析,提高我們應(yīng)用數(shù)學(xué)知識(shí)解決實(shí)際問題的能力。
對(duì)于這門課程的學(xué)習(xí),我們采取的是“大班授課,小組合作”的教學(xué)方式,即在承認(rèn)課堂教學(xué)為基本教學(xué)組織形式的前提下,教師以學(xué)生學(xué)習(xí)小組為重要的教學(xué)組織手段,通過指導(dǎo)小組成員展開合作,形成“組內(nèi)成員合作,組間成員競(jìng)爭(zhēng)”的學(xué)習(xí)模式,發(fā)揮群體的積極功能,提高個(gè)體的學(xué)習(xí)動(dòng)力和能力,達(dá)到完成特定的教學(xué)任務(wù)的目的,更好的幫助小組成員完成學(xué)習(xí)任務(wù)和教學(xué)任務(wù)。同時(shí)在組間實(shí)行競(jìng)爭(zhēng)機(jī)制更能有效的調(diào)動(dòng)學(xué)生的參與熱情和學(xué)習(xí)積極性,培養(yǎng)學(xué)生的競(jìng)爭(zhēng)意識(shí)。我們使用的是劍橋數(shù)值方法教材,在學(xué)習(xí)計(jì)算方法課程的同時(shí),也進(jìn)一步提高了我們的英語水平,此乃一舉兩得,使用全英文教材使我們直接接觸到當(dāng)前國(guó)際上最先進(jìn)的剖析和見解,避免了中文翻譯帶來的錯(cuò)誤和問題復(fù)雜化。
本小組一共有11位成員,在組長(zhǎng)的英明領(lǐng)導(dǎo)下,一共成功進(jìn)行了四次精彩的實(shí)習(xí)報(bào)告,每一次實(shí)習(xí)過程中,大家伙都積極參與,勇于表現(xiàn),各盡其責(zé),基本上人人都會(huì)寫出一份自己的程序并上機(jī)演示,積極與小組成員討論、改進(jìn)、升華,最后由組長(zhǎng)進(jìn)行總結(jié),篩選出最有特色、最具健壯性、最好的程序作為本小組進(jìn)行報(bào)告的內(nèi)容,并安排各小組成員的后續(xù)工作,如做PPT、寫報(bào)告、定發(fā)言人等,確保每位小組成員都有事可做,發(fā)揮自己的特長(zhǎng),實(shí)現(xiàn)自己的價(jià)值。一切的一切都是為了能讓該次實(shí)習(xí)報(bào)告做到最好,體現(xiàn)出本組強(qiáng)大的實(shí)力以及各成員強(qiáng)烈的積極性和責(zé)任心,發(fā)揮出團(tuán)隊(duì)最大的力量。
感謝曾三友老師能給我們這樣一次機(jī)會(huì)體驗(yàn)小組合作所帶來的收獲和喜悅,不僅培養(yǎng)我們的合作意識(shí)、團(tuán)隊(duì)精神、理性思考、同時(shí)也提升我們的境界拓寬我們的胸懷,尺有所短寸有所長(zhǎng),要多發(fā)現(xiàn)和挖掘各自的優(yōu)勢(shì)和長(zhǎng)處,求知的過程要提倡個(gè)人資源互補(bǔ)、優(yōu)勢(shì)共享才能少走彎路,攜手共贏。同時(shí)也非常感謝組內(nèi)所有成員,正是因?yàn)榇蠹一锏凝R心協(xié)力,眾志成城,不分彼此,團(tuán)結(jié)合作,互利共贏,共同成長(zhǎng),才取得了這樣不錯(cuò)的成績(jī),謝謝大家。
由于小組水平所限,不當(dāng)之處在所難免,歡迎老師還有各位同學(xué)批評(píng)指正,在下代表本組成員感激不盡。
?
?
?
?
?
三、目錄
一、內(nèi)容簡(jiǎn)介—————————————————— 02
二、前言———————————————————— 03
三、目錄———————————————————— 04
三、主要內(nèi)容—————————————————— 05
??? 1、計(jì)算方法概要——————————————— 05
?? ?2、方程求根??? ——————————————— 06
3、方程組求解? ——————————————— 12
??? 4、方程積分??? ——————————————— 23
5、方程微分??? ——————————————— 39
五、結(jié)課感言—————————————————— 46
小組總結(jié)????? ——————————————— 46
小組成員感言? ——————————————— 47
六、小組分工—————————————————— 52
七、總結(jié)———————————————————— 54
?
?
?
?
?
?
?
?
?
?
?
?
?
四、主要內(nèi)容
計(jì)算方法概要
介紹一下什么是計(jì)算方法
??? 現(xiàn)代科學(xué)發(fā)展依賴于理論研究、科學(xué)實(shí)驗(yàn)與科學(xué)計(jì)算三種主要手段,它們相輔相成,可以互相補(bǔ)充又都不可缺少。由于計(jì)算機(jī)技術(shù)的發(fā)展及其在各技術(shù)科學(xué)領(lǐng)域的應(yīng)用推廣與深化,新的計(jì)算性學(xué)科分支紛紛興起,如計(jì)算力學(xué)、計(jì)算物理、計(jì)算化學(xué)、計(jì)算經(jīng)濟(jì)學(xué)等等,不論其背景與含義如何,要用計(jì)算機(jī)進(jìn)行科學(xué)計(jì)算都必須建立相應(yīng)的數(shù)學(xué)模型,并研究其適合于計(jì)算機(jī)編程的計(jì)算方法。“數(shù)值計(jì)算方法”是計(jì)算數(shù)學(xué)的一個(gè)主要部分。伴隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展和計(jì)算數(shù)學(xué)方法與理論的日益成熟,科學(xué)計(jì)算已成為第三種科學(xué)研究的方法和手段。數(shù)值計(jì)算方法是研究怎樣利用計(jì)算工具來求出數(shù)學(xué)問題的數(shù)值解,并對(duì)算法的收斂性、穩(wěn)定性和誤差進(jìn)行分析、計(jì)算的全過程。
數(shù)值計(jì)算方法,簡(jiǎn)稱計(jì)算方法,又稱“數(shù)值分析”。是在計(jì)算機(jī)上使用的解數(shù)學(xué)問題的方法,數(shù)值分析的目的是設(shè)計(jì)及分析一些計(jì)算的方式,可針對(duì)一些問題得到近似但夠精確的結(jié)果,為各種數(shù)學(xué)問題的數(shù)值解答研究提供最有效的算法。數(shù)值計(jì)算方法是微分方程,常微分方程,線性方程組的求解,主要內(nèi)容為函數(shù)逼近論,數(shù)值微分,數(shù)值積分,求解線性方程組, 計(jì)算矩陣特征值和特征向量,常微分方程數(shù)值解,誤差分析等,常用方法有迭代法、差分法、插值法、有限元素法等,計(jì)算對(duì)象是微積分,線性代數(shù),常微分方程中的數(shù)學(xué)問題。
在使用計(jì)算方法解決實(shí)際問題的過程中,往往需要把連續(xù)型離散化處理,同時(shí)離散形式的解可以近似原來的連續(xù)模型的解。例如:求一個(gè)函數(shù)的積分是一個(gè)連續(xù)模型的問題,也就是求一曲線以下的面積,若將其離散化變成數(shù)值積分,就變成將上述面積用許多較簡(jiǎn)單的形狀(如矩形、梯形、拋物線)近似,因此只要求出這些形狀的面積然后累加即可。離散化是程序設(shè)計(jì)中一個(gè)很常用的技巧,它可以有效的降低時(shí)間復(fù)雜度。在學(xué)習(xí)數(shù)值積分時(shí),Trapezium rule、Mid-point rule、Simpson’s rule、Gauss quadrature等方法都體現(xiàn)了離散化的思想,降低了解決實(shí)際問題過程中的難度。
計(jì)算方法和計(jì)算機(jī)的結(jié)合
利用計(jì)算機(jī)解決科學(xué)計(jì)算問題的全過程為:實(shí)際問題??? 構(gòu)造數(shù)學(xué)模型??? 設(shè)計(jì)數(shù)值計(jì)算方法???? 程序設(shè)計(jì)??? 上機(jī)求出結(jié)果???? 回到實(shí)際問題。由流程圖可以發(fā)現(xiàn)計(jì)算數(shù)學(xué)中的數(shù)值計(jì)算方法是解決“計(jì)算”問題的橋梁和工具,計(jì)算機(jī)與計(jì)算方法緊密聯(lián)系,相輔相成,互相影響。因此在數(shù)值分析過程中,我們需要:面向計(jì)算機(jī),要根據(jù)計(jì)算機(jī)特點(diǎn)提供實(shí)際可行的算法,即算法只能由計(jì)算機(jī)可執(zhí)行的加減乘除四則運(yùn)算和各種邏輯運(yùn)算組成.
計(jì)算能力是計(jì)算工具和計(jì)算方法的效率的乘積,計(jì)算方法是研究用計(jì)算機(jī)求解數(shù)學(xué)問題的數(shù)值計(jì)算方法及其軟件實(shí)現(xiàn),提高計(jì)算方法的效率與提高計(jì)算機(jī)硬件的效率同樣重要。計(jì)算方法與計(jì)算機(jī)發(fā)展緊密相關(guān),現(xiàn)代計(jì)算數(shù)學(xué)是計(jì)算科學(xué)的核心,是各類計(jì)算性學(xué)科(計(jì)算力學(xué)、計(jì)算物理、計(jì)算化學(xué)等)的共同基礎(chǔ)。自從計(jì)算機(jī)誕生以來,經(jīng)典計(jì)算方法經(jīng)歷的一個(gè)重新評(píng)價(jià)、篩選、改造和創(chuàng)新過程,許多能充分發(fā)揮計(jì)算機(jī)潛力,有更大解題能力的新方法和新概念不斷涌現(xiàn),構(gòu)成了現(xiàn)代意義下的計(jì)算方法。可見計(jì)算方法與計(jì)算機(jī)互相影響、共同發(fā)展
計(jì)算方法在實(shí)際應(yīng)用中的重要性
? 航天航空、地質(zhì)勘探、汽車制造、橋梁設(shè)計(jì)、天氣預(yù)報(bào)和漢字字樣設(shè)計(jì)中都有計(jì)算方法的蹤影。并且在社會(huì)生活的各個(gè)領(lǐng)域中,如預(yù)產(chǎn)期、標(biāo)準(zhǔn)體重、養(yǎng)老金、個(gè)人所得稅等的計(jì)算都用到了計(jì)算方法。
以下是一些會(huì)利用數(shù)值分析處理的問題:數(shù)值天氣預(yù)報(bào)中會(huì)用到許多先進(jìn)的數(shù)值分析法。計(jì)算太空船的軌跡需要求出常微分方程的數(shù)值解。汽車公司會(huì)利用電腦模擬汽車撞擊來提升汽車受到撞擊時(shí)的安全性。電腦的模擬會(huì)需要求出偏微分方程的數(shù)值解。對(duì)沖基金會(huì)利用各種數(shù)值分析的工具來計(jì)算股票的市值及其變異程度。航空公司會(huì)利用復(fù)雜的最佳化算法決定票價(jià)、飛機(jī)、人員分配及用油量。此領(lǐng)域也稱為作業(yè)研究。保險(xiǎn)公司會(huì)利用數(shù)值軟件進(jìn)行精算分析。
方程求根
1、實(shí)際引用
???? 方程的應(yīng)用無處不在,飛機(jī)為什么能夠飛上天?用到了伯努利方程;生產(chǎn)關(guān)系中的動(dòng)態(tài)平衡方程;行程的價(jià)格路程估算問題;工程的比例模型計(jì)算;會(huì)計(jì)中的利潤(rùn)率的計(jì)算等都用到了方程,都需要方程求解。掌握基本的方程求根的方法是很必要的,方程求根的方法包括:二分法、迭代法、牛頓法。
2、主要內(nèi)容
(1)、二分法
算法描述
對(duì)方程 在[a,b]內(nèi)求根。
將所給區(qū)間二分,在分點(diǎn) 判斷是否 ;若是,則有根 。
否則,繼續(xù)判斷是否 ,若是,則令 ,否則令 。
否則令 。重復(fù)此過程直至求出方程 在[a,b]中的近似根為止。
代碼實(shí)現(xiàn)
#define zero 0.0001
double f(double x)
{return 2*sin(PI*x) + cos(PI*x);}
int main()
{?? double a,b;
??? double x1,x2,x3;
??? printf("二分法的實(shí)現(xiàn)\n");
??? printf("例子式:2*sin(π*x)+cos(π*x)=0\n");
??? printf("請(qǐng)輸入根所在區(qū)間【】:");
??? scanf("%lf %lf",&a,&b);
??? printf("下界\t\t上界\t\t中間值\n");
??? x1=a;
??? x2=b;
??? x3 = (x1+x2)/2;
??? while(fabs(x2-x1)>=zero){
??????? printf("%lf\t%lf\t%lf\n",x1,x2,x3);
??????? if(f(x1)*f(x3)>0 )x1=x3;//x2=x2|| f(x1)*f(b)<0
??????? else if(f(x1)*f(x3)<0)x2=x3;//|| f(x1)*f(a)<0
??????? else printf("\t\t%.6lf\n",x1);
??????? x3 = (x1+x2)/2;}
??? printf("結(jié)果:%.6lf\n",x3);
return 0;}
運(yùn)行結(jié)果
開始界面顯示為:
?
這是需要輸入一個(gè)區(qū)間范圍,然后在這個(gè)范圍內(nèi)查找方程的根,假如輸入1~2的范圍,程序運(yùn)行后的界面為:
?
?
(2)、迭代法
算法描述
將方程 等價(jià)變換為 形式,并建立相應(yīng)的迭代公式 。遞推迭代式 ,當(dāng)k趨于無窮大時(shí),xk的極限存在,且 (xk)連續(xù)。
代碼實(shí)現(xiàn)
#include<stdio.h>
#include<math.h>
#define zero 1e-5
double f(double x)
{
??? return exp(-x);
}
int main()
{
??? double x1,x2;
??? printf("迭代法的實(shí)現(xiàn)\n");
??? printf("例式:x = e(-x)\n");
??? printf("請(qǐng)輸x0的值:");
??? scanf("%lf",&x1);
??? x2=100;
??? while(fabs(x1-x2)>=zero)
??? {
??????????????????????????? x2=x1;
??????? printf("%.7lf\n",x1);
??????? x1 = f(x1);
??? }
??? return 0;
}
運(yùn)行結(jié)果
該程序所求方程為:e-x-x=0,可轉(zhuǎn)化為x=e-x,并在x0處進(jìn)行迭代
?
假設(shè)輸入x0=1,則在x=1處進(jìn)行迭代求x1,以此可求出x2,x3,x4···,當(dāng)|xk+1-xk|<=0.00001時(shí)迭代結(jié)束,輸出結(jié)果為:
?
最后求得方程的解為0.5671477
(3)、牛頓法
算法描述
用牛頓迭代法求f(x)=0在x0附近的一個(gè)實(shí)根的方法是:
(1) 選一個(gè)接近于x的真實(shí)根的近似根x1;
(2) 通過x1求出f(x1)。在幾何上就是作x=x1,交f(x)于f(x1);
(3) 過f(x1)作 f(x)的切線,交x軸于x2。可以用公式求出x2。由于f'(x1)=f(x1)/(x2-x1),故x2=x1-f(x1)/f'(x1)
(4) 通過x2求出f(x2);
(5) 再過f(x2)作f(x)的切線交x軸于x2;
(6) 再通過x3求出f(x3),…一直求下去,直到接近真正的根。當(dāng)兩次求出的根之差|xn+1-xn|≤ε就認(rèn)為 xn+1足夠接近于真實(shí)根。
牛頓迭代公式是:xn+1=xn-f(xn)/f'(xn)
代碼實(shí)現(xiàn)
#define zero 1e-5
double f(double x)
{
??? return x-(x-exp(-x))/(1+x);
}
int main()
{
??? double a;
??? double x1,x2;
??? printf("牛頓法的實(shí)現(xiàn)\n");
??? printf("例式:x = e(-x)\n");
??? printf("請(qǐng)輸入x0的值:");
??? scanf("%lf",&a);
??? x2=a*2;
??? x1=a;
????????????? printf("%.7lf\n",x1);
??? while(fabs(x1-x2)>=zero)
??? {??
??????????????????????????? x2=x1;
??????? x1= f(x1);??????????????
??????? printf("%.7lf\n",x1);
??? }
??? return 0;
}
運(yùn)行結(jié)果
初始界面顯示為:
?
該程序所求方程為:e-x-x=0,可轉(zhuǎn)化為x=e-x,在x0處開始迭代。
假設(shè)x0輸入為1,則顯示結(jié)果為:
?
3、算法比較
| 方法 | 優(yōu)點(diǎn) | 缺點(diǎn) |
| 二分法 | 應(yīng)用廣泛,可常用于求精度不高的近似根 | 循環(huán)次數(shù)較多,計(jì)算量大 |
| 迭代法 | 計(jì)算量較小,誤差小 | 可能不收斂 |
| 牛頓法 | 計(jì)算量最少,誤差小 | 對(duì)重根收斂較慢,要求函數(shù)的一階導(dǎo)數(shù)存在,可能不收斂 |
?
從以上的比較可以看出一下幾點(diǎn)結(jié)論:
1、? 二分法和迭代法、牛頓法均能解出方程的根。
2、? 一般地看來,牛頓迭代法的效率較普通迭代法的要高,兩點(diǎn)加速迭代法能加速一般迭代法。
3、? 迭代法和牛頓法對(duì)初值是敏感的,若初值選擇的不合適可能導(dǎo)致迭代的效率很低,甚至是發(fā)散的。例如,對(duì)于函數(shù) 形成的迭代,當(dāng)選取初值 時(shí),因?yàn)?是沒有意義的,這樣就導(dǎo)致了迭代的停止或發(fā)散。
4、小組討論及分工情況
在第一次的小組討論中,基本上每個(gè)組員都能認(rèn)真的聽取其他組員對(duì)程序的講解,并在不懂的地方主動(dòng)提出疑問使自己對(duì)程序的理解更深刻,覺得有些多余或者不夠完善的地方提出改進(jìn)的建議來幫助同學(xué)提高對(duì)算法的更多認(rèn)識(shí)。在討論過程中,每位組員都或多或少的有些收獲。
在討論之后的完成報(bào)告過程中,小組內(nèi)有明確、合理的分工,讓在報(bào)告某個(gè)不擅長(zhǎng)的地方的同學(xué)和一個(gè)比較擅長(zhǎng)的同學(xué)合作完成分配的任務(wù),并爭(zhēng)取每一位同學(xué)參與。最終報(bào)告的完成情況是:以肖大軍的程序?yàn)榛A(chǔ),吸收了韓學(xué)武計(jì)算誤差的方法,和陳俊樺、劉宇同學(xué)提出的計(jì)算收斂度的思想。在向勝男、方正等同學(xué)提出要將三個(gè)算法放在一起更好的比較幾個(gè)算法的效率。最后由彭亞瓊、楊耀鵬、張鐘文、梅旭三位同學(xué)負(fù)責(zé)修改程序,王艷琴和肖大軍制作展示PPT,韓學(xué)武寫word文檔。
方程組求解
1、實(shí)際應(yīng)用
在我們的實(shí)際生活和生成當(dāng)中會(huì)出現(xiàn)大量的方程組,在這些方程組需要求解,如果是要用人工的去求解的時(shí)候無疑是一個(gè)龐大的工作,而且很能避免錯(cuò)誤的出現(xiàn),這樣會(huì)浪費(fèi)大量的人力物力和時(shí)間。于是我們今天在前輩們關(guān)于方程組的求解總結(jié)出來的高斯消去法和直接三角分解法(LU分解)的基礎(chǔ)之上借助編程過程中的循環(huán)來讓計(jì)算機(jī)對(duì)方程組經(jīng)行求解。這樣可以節(jié)省大量的時(shí)間同時(shí)避免了錯(cuò)誤的出現(xiàn)。下面將是我們本著這個(gè)目的去實(shí)現(xiàn)高斯消去法和直接三角分解法(LU分解)的過程。雖然有很多的難題還沒有解決,但是這是我們小組共同努力的成果。
2、主要內(nèi)容
1、高斯列主元消去法求解方程組
(1)、算法描述
Gauss消去法的基本思想是一次用前面的方程消去后面的未知數(shù),從而將方程組化為等價(jià)形式:
?
這個(gè)過程就是消元,然后再回代就好了。具體過程如下:
對(duì)于 ,若 依次計(jì)算
?
然后將其回代得到:
?
以上是高斯消去法。
但是高斯消去法在消元的過程中有可能會(huì)出現(xiàn) 的情況,這時(shí)消元就無法進(jìn)行了,即使主元數(shù) 但是很小時(shí),其做除數(shù),也會(huì)導(dǎo)致其他元素?cái)?shù)量級(jí)的嚴(yán)重增長(zhǎng)和舍入誤差的擴(kuò)散。因此,為了減少誤差,每次消元選取系數(shù)矩陣的某列中絕對(duì)值最大的元素作為主元素。然后換行使之變到主元位置上,再進(jìn)行銷元計(jì)算。即高斯列主元消去法。
?
(2)、代碼實(shí)現(xiàn)
#include<stdio.h>
#include<string.h>
#include<math.h>
#define e 0.00000001
const int M=1000;
const int N=1000;
double a[N][M];
double b[M];
double pt(int n,int m)//矩陣的輸出
{
??? for(int i=0;i<n;i++)
??? {
??????? for(int j=0;j<m;j++)
??????? printf("%lf? ",a[i][j]);
??????? printf("\n");
??? }
}
int jihuan(double a[N][M],int n,int m,int i)
{
??? int mi=i;//最大行首
??? //printf("%lf\n",a[mi][mi]);
??? int x;
??? for(int j=i+1;j<n;j++)
??????? if(fabs(a[j][i])>fabs(a[mi][i]))mi=j;//列不動(dòng)
??????? //printf("##%d\n",mi);
??? //printf("%.6f\n",a[mi][i]);
??? if(mi!=i)
??? for(int j=0;j<m;j++)//換行
??? {
??????? x=a[mi][j];
??????? a[mi][j]=a[i][j];
??????? a[i][j]=x;
??? }
??? //printf("##\n");
??? //pt(n,m);
??? //printf("##\n");
??? return 0;
}
int main()
{
??? int n,m,zhi;
??? double t;
??? printf("請(qǐng)輸入增廣矩陣N,M\n");
??? while(scanf("%d %d",&n,&m)!=EOF)
??? {
??????? for(int i=0;i<n;i++)
??????? for(int j=0;j<m;j++)
??????? scanf("%lf",&a[i][j]);
??????? //pt(n,m);
??????? for(int i=0;i<n-1;i++)
??? {
??????? jihuan(a,n,m,i);//找到不為0的因子,交換行首最大
??????? for(int j=i+1;j<n;j++)
?????? {
?
????????? if(fabs(a[j][i])>e)
????????? {
????????????? t=a[j][i]/a[i][i];//對(duì)a[i][i]處理
????????????? for(int k=i;k<m;k++)
????????????? {
????????????????? a[j][k]=a[j][k]-a[i][k]*t;
?
?????????????? }
?????????? }
??????? }
??????? pt(n,m);printf("\n");
??? }
??????? int j;
??????? for(j=0;j<m;j++)
??????????? if(fabs(a[n-1][j])>e)break;//判斷最后行是否全為0
???????? //printf("%lf %lf",a[n-1][m-2],a[n-1][m-1]);
??????? if(fabs(a[n-1][m-2])<e&&fabs(a[n-1][m-1])>e){printf("方程無解\n");continue;}
??????? //printf("%d %d",j,m);
??????? if(j==m)
??????? {
??????????? for(int i=n-1;i>-1;i--)//其他行
??????????? if(fabs(a[i][m-2])<e)n--;
??????? }
??????? if(n<m-1)//判斷矩陣的秩
??????? {
?????????? printf("方程有無窮多解\n");
?????????? printf("化簡(jiǎn)后的矩陣為:\n");
?????????? pt(n,m);
?????????? printf("請(qǐng)輸入拓展矩陣N,M\n");
?????????? continue;
??????? }
??????? else if(n>m-1)
??????? {
??????????? printf("方程無解\n");
??????????? printf("化簡(jiǎn)后的矩陣為:\n");
??????????? pt(n,m);
??????????? printf("請(qǐng)輸入拓展矩陣N,M\n");
??????????? continue;
??????? }
???????? for(int i=n-1;i>0;i--)
???????? for(int j=i-1;j>-1;j--)
??????? {
??????????? t=a[j][i]/a[i][i];
??????????? //printf("%.2f\n",t);
??????????? a[j][i]=a[j][i]-a[i][i]*t;//對(duì)a[i][i]處理
??????????? a[j][m-1]-=a[i][m-1]*t;
???????? }
???????? pt(n,m);
???????? printf("\n");
???????? printf("方程的解為:");
???????? for(int i=0;i<n;i++)
???????? printf("%.3lf ",a[i][m-1]/a[i][i]);
??????? printf("\n請(qǐng)輸入拓展矩陣N,M\n");
???? }
??? return 0;
}
(3)、運(yùn)行結(jié)果
測(cè)試數(shù)據(jù)1:3 4
1 2 3 6
2 2 3 7
1 4 4 9
答案:1 1 1
?
測(cè)試數(shù)據(jù)2:3 4
0 0 1 3
3 0 0 2
0 2 0 1
答案:0.667?? 0.5?? 3
?
2、直接三角分解法(LU分解)求解方程組
(1)、算法描述
先將矩陣A直接分解為 則求解方程組的問題就等價(jià)于求解兩個(gè)三角形方程組。
直接利用矩陣乘法,得到矩陣的三角分解計(jì)算公式為:
?
由上面的式子得到矩陣A的LU分解后,求解Ux=y的計(jì)算公式為
?
以上為L(zhǎng)U分解法。
?
(2)、代碼實(shí)現(xiàn)
#include<iostream>
#include<string.h>
using namespace std;
double m[20][20],lu[20][20];//系數(shù),LU
double root[20],x[20],y[20];
int n;
void LU()//化解
{
??? int i,j,k,t;
??? double num;
??? memset(lu,0,sizeof(lu));
??? for(i=0;i<n;i++)//U的第一行,L的第一列處理
??? {
??????? lu[0][i]=m[0][i];
??????? if(i>0)
??????? lu[i][0]=m[i][0]/lu[0][0];
??? }
??? for(i=1;i<n;i++)
??? {
??????? for(j=i;j<n;j++)//U的第i行
??????? {
??????????? num=0;
??????????? for(t=0;t<i;t++)
??????????? {
??????????????? //if(i-1==t) {num+=lu[t][j];continue;}
???????????????? num+=lu[i][t]*lu[t][j];
??????????? }
??????????? //if(i==1) cout<<num<<endl;
??????????? lu[i][j]=m[i][j]-num;
?
??????? }
??????? for(j=i+1;j<n;j++)//L的第i列
??????? {
??????????? num=0;
??????????? for(k=0;k<i;k++)
??????????? num+=lu[j][k]*lu[k][i];
??????????? lu[j][i]=(m[j][i]-num)/lu[i][i];
??????? }
??? }
??? cout<<endl;
??? cout<<"分解后的LU矩陣為:"<<endl;
??? for(i=0;i<n;i++)
??? {
??????? for(j=0;j<n;j++)
??????? cout<<lu[i][j]<<" ";
??????? cout<<endl;
??? }
??? cout<<endl;
}
double iteration(int i)
//求方程組中第i個(gè)未知數(shù)的解(遞推)
{
??? double sum;
????????????? if(i==0)
??????????????????????????? return root[0];
????????????? else
????????????? {
??????????????????????????? double sum=root[i];
??????????????????????????? for(int j=i-1;j>=0;j--)
??????????????????????????? {
????????????????????????????????????????? sum-=lu[i][j]*iteration(j);
????????????????????????????????????????? //cout<<lu[i][j]<<" ";
??????????????????????????? }
??????????????????????????? return sum;
????????????? }
}
double iteration_root(int i)
//求方程組中第i個(gè)未知數(shù)的解
{
??? double sum;
????????????? if(i==n-1)
??????????????????????????? return y[n-1]/lu[i][i];
????????????? else
????????????? {
??????????????????????????? double sum=y[i];
??????????????????????????? for(int j=i+1;j<n;j++)
??????? {
??????????? sum=(sum-lu[i][j]*iteration_root(j));
??????? }
??????? sum=sum/lu[i][i];
??????????????????????????? return sum;
????????????? }
}
?
int main()
{
??? int i,j,k,t;
??? double s;
??? memset(m,0,sizeof(m));
??? memset(root,0,sizeof(root));
??? memset(x,0,sizeof(x));
??? memset(y,0,sizeof(y));
??? cout<<"請(qǐng)輸入系數(shù)矩陣的階數(shù)"<<endl;
??? cin>>n;
??? cout<<"請(qǐng)輸入系數(shù)矩陣"<<endl;
??? for(i=0;i<n;i++)
??? for(j=0;j<n;j++)
??? cin>>m[i][j];
??? cout<<"請(qǐng)輸入結(jié)果數(shù)組"<<endl;
??? for(i=0;i<n;i++)
??? cin>>root[i];
??? for(i=0;i<n;i++)//如果系數(shù)矩陣對(duì)角線上存在為0的元素,則對(duì)矩陣進(jìn)行旋轉(zhuǎn)
??? {
??????? s=0;
?????? if(m[i][i]==0)
?????? {
?????????? for(j=0;j<n;j++)
??????? {
????????? if(m[j][i]>s)
????????? {
???????????? s=m[j][i];
??????????? ?t=j;
????????? }
??????? }
??????? for(k=0;k<n;k++)
??????? {
?????????? s=m[t][k];
?????????? m[t][k]=m[i][k];
?????????? m[i][k]=s;
??????? }
??????? s=root[t];
??????? root[t]=root[i];
??????? root[i]=s;
?????? }
??? }
???? LU();
??? for(j=0;j<n;j++)
??? {
??????? y[j]=iteration(j);
??????? cout<<"Y"<<j<<"="<<y[j]<<endl;
??? }
??? cout<<endl;
??? for(k=n-1;k>=0;k--)
??? x[k]=iteration_root(k);
??? cout<<"方程解為:"<<endl;
??? for(k=0;k<n;k++)
??? cout<<"X"<<k<<"="<<x[k]<<endl;
??? cout<<endl;
}
?
(3)、運(yùn)行結(jié)果
實(shí)例一:
實(shí)例二:
、
實(shí)例三:
?
?
3、小組討論及分工情況
? ?有了第一次方程求根時(shí)做小組匯報(bào)的經(jīng)驗(yàn),這次我們小組在進(jìn)行小組匯報(bào)方面做了一些改變,以得到更好的效果。
首先,鑒于組內(nèi)各成員的編程能力各不相同,有的同學(xué)基礎(chǔ)較弱,編寫的程序或沒有寫完,或運(yùn)行起來會(huì)有錯(cuò)誤、所以,我們將小組成員分成兩個(gè)同學(xué)一個(gè)小組, 又編程能力強(qiáng)的同學(xué)帶著編程能力稍弱的同學(xué)完成程序的編寫,這樣能確保每個(gè)同學(xué)都能學(xué)到一些編程的方法和技巧,也有助于彼此之間的共同提高。
其次,我們這次也做了組員之間任務(wù)的交換完成,也就是上一次的分工之后,我們這次決定相互的交換一下工作,然后讓一些編程能力相對(duì)比較弱的同學(xué)參與到了討論后的代碼修改當(dāng)中。這次的分工是:由彭亞瓊、劉宇、方正、陳俊樺、韓學(xué)武五位同學(xué)負(fù)責(zé)修改程序,王艷琴和向勝男負(fù)責(zé)細(xì)化許多上臺(tái)匯報(bào)的工作,張鐘文和楊耀鵬寫word文檔,肖大軍和梅旭負(fù)責(zé)制作PPT。
?
方程積分
1、實(shí)際應(yīng)用
積分在我們?nèi)粘5纳钪杏泻軓V泛地應(yīng)用,特別是在計(jì)算很多復(fù)雜的問題的時(shí)候,積分顯示出無可替代的作用,為了滿足大量的需求,這樣如何用程序快速的求出積分就成了一個(gè)需要解決的問題。我們通過這次的計(jì)算方法的學(xué)習(xí),建立在積分分割小塊求面積,然后把面積加起來得到積分的近似值的原則上,將分別對(duì)trapezium rule、Mid-point rule、Simpson's rule、Gruss Qusdrature、Gruss Qusdrature-three point這五種積分方式經(jīng)行效率經(jīng)行比較,從而得到最好的積分方式。
2、主要的算法
1.???? 梯形(trapezia)公式
1、算法描述
如果用一個(gè)梯形來近似代替每個(gè)子區(qū)間的面積,梯形的四個(gè)頂點(diǎn)分別位于 , , 與 。梯形的面積為
????????????????????????????????
對(duì)于整個(gè)[a,b]區(qū)間,積分值由所有窄帶的和給出
?
?
y
?
?
???????????????????????????????? F(x)
???????????????????? h
???????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????? (上底+下底)*h/2=梯形面積
?
?
????????????? a????? xi xi+1 b??????????????????????? x
2、代碼實(shí)現(xiàn)
#define Pi 3.1415926535897931
int Trapezium(double x1,double x2)//梯形法
{
??? int i,j;
??? double s=0;//記和
??? double x;
??? double error1,error2=1;
??? double Error_Ratio;//收斂性
??? int intervals[20]= {1,2,4,8,16,32,64,128,256,512,1024,
??? 2048,4096,8192,16384,32768,65536,131072,262144,524288};//細(xì)分
??? s=s+function(x1)+function(x2);
??? cout<<setiosflags(ios::left)<<setw(6)<<"No."<<"???????????? "<<
??? setw(7)<<"No.f(x)"<<"?????? "<<setw(15)<<"Trapezium Rule"
??? <<"???????? "<<setw(10)<<"Error Ratio"<<endl;
??? for(i=0; i<20; i++)
??? {
??????? s=function(x1)+function(x2);
??????? x=fabs(x2-x1)/intervals[i];
??????? if(x1<x2)
??????? {
??????????? for(j=0; j<intervals[i]-1; j++)
??????????????? s+=2*function(x1+(j+1)*x);
??????? }
??????? else
??????? {
??????????? for(j=0; j<intervals[i]-1; j++)
??????????????? s+=2*function(x2+(j+1)*x);
??????? }
??????? s=x*s/2;
??????? error1=s-2;
??????? Error_Ratio=error1/error2;
??????? error2=error1;
??????? if(i!=0)
? ??????{
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]+1<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<setw(10)<<Error_Ratio<<endl;
??????? }
??????? else
??????? {
?????????? ?cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]+1<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<endl;
??????? }
??? }
??? return 0;
}
?
3、運(yùn)行結(jié)果
2.???? 中值發(fā)公式
1、算法描述
如果用一個(gè)矩形來近似代替每個(gè)子區(qū)間的面積,矩形的高應(yīng)該用其中點(diǎn),一間距為寬可以計(jì)算出矩形面積
然后同理梯形的計(jì)算方法可以得出積分。
2、代碼實(shí)現(xiàn)
#define Pi 3.1415926535897931
//中值法
int Mid_Point(double x1,double x2)
{
??? int i,j;
??? double s=0,x;
??? double error1,error2=1;
??? double Error_Ratio;
??? int intervals[20]= {1,2,4,8,16,32,64,128,256,512,1024,
??? 2048,4096,8192,16384,32768,65536,131072,262144,524288};
??? cout<<setiosflags(ios::left)<<setw(6)<<"No."<<"???????????? "
??? <<setw(7)<<"No.f(x)"<<"?????? "<<setw(15)<<"Midpoint Rule"
??? <<"???????? "<<setw(10)<<"Error Ratio"<<endl;
??? for(i=0; i<20; i++)
??? {
??????? s=0;
??????? x=fabs(x2-x1)/intervals[i];
??????? if(x1<x2)
??????? {
??????????? for(j=0; j<intervals[i]; j++)
??????????????? s+=function(x1+(j+0.5)*x);
??????? }
??????? else
??????? {
??????????? for(j=0; j<intervals[i]; j++)
??? ????????????s+=function(x2+(j+0.5)*x);
??????? }
??????? s=x*s;
??????? error1=s-2;
??????? Error_Ratio=error1/error2;
??????? error2=error1;
??????? if(i!=0)
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"??????? ?????"<<setw(7)<<intervals[i]<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<setw(10)<<Error_Ratio<<endl;
??????? }
??????? else
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<endl;
??????? }
??? }
??? returen 0;
}
3、運(yùn)行結(jié)果
?
3. Simpson公式
?? 1、算法描述
?當(dāng)積分的上下限相對(duì)于展開的中心點(diǎn)對(duì)稱時(shí),積分泰勒展開式中含有f(x)的奇數(shù)階導(dǎo)數(shù)的項(xiàng)都將等于零。利用這一性質(zhì),我們可以在相鄰的兩個(gè)子區(qū)間內(nèi)對(duì)面積作泰勒級(jí)數(shù)展開,可得
?
積分的精確度可以達(dá)到1。利用中心差分,可將f(x)的二階導(dǎo)數(shù)近似表為
?
將此結(jié)果代入前述中心查分表式,則子區(qū)間[xi-1,xi+1]內(nèi)的積分近似為
?
對(duì)于整個(gè)[a,b]區(qū)間,結(jié)果為
?
?
?
假設(shè)區(qū)間的數(shù)目N為偶數(shù),則奇數(shù)格點(diǎn)的貢獻(xiàn)是偶數(shù)格點(diǎn)貢獻(xiàn)的2倍。這種權(quán)重上的差異來自我們?yōu)樾拚痉椒ㄋ玫囊患?jí)結(jié)果所引入的f(x)二階導(dǎo)數(shù)的貢獻(xiàn)。而兩端點(diǎn) 和 的權(quán)重則僅為偶數(shù)點(diǎn)的一半。Simpson法則的另一優(yōu)點(diǎn)在于其自然引出了一種算法,即通過迭代使積分達(dá)到所需要的精確度。
誤差估計(jì)---原則上,我們可以通過估計(jì)所省略的高階項(xiàng)大小得出數(shù)值計(jì)算中的誤差。其前提是知道高階導(dǎo)數(shù),這樣做并不容易。比較相繼的兩次迭代結(jié)果是較為簡(jiǎn)便的一種方法。例如,如果兩次計(jì)算值I[a,b]之差小于預(yù)設(shè)的允許值 ,則我們認(rèn)為計(jì)算已經(jīng)達(dá)到了所需的精確度。對(duì)于Simpson法則,該算法可通過如下方法實(shí)施。假設(shè)我們?cè)趚=a和x=b之間對(duì)函數(shù)f(x)進(jìn)行積分,且要求達(dá)到精確度 。各個(gè)節(jié)點(diǎn)上的函數(shù)值對(duì)積分的貢獻(xiàn)可分為三個(gè)部分,即端點(diǎn)區(qū),奇數(shù)點(diǎn)與偶數(shù)點(diǎn)的貢獻(xiàn),
?
?
進(jìn)行迭代計(jì)算,應(yīng)從N= 開始,其中 應(yīng)為某個(gè)較小而合理的區(qū)間數(shù)目,例如取 =6。這是迭代計(jì)算的第一步。在下一輪迭代中,將區(qū)間的數(shù)目翻倍,而令步長(zhǎng)h減半,即令N= =2 。以這種方式改變子區(qū)間數(shù)目的好處在于,對(duì)于一個(gè)新的N,來自兩個(gè)端點(diǎn)的貢獻(xiàn)(存儲(chǔ)為 )是不變的,而偶數(shù)點(diǎn)與上一次迭代計(jì)算過的偶數(shù)點(diǎn)完全相同。也就是說,在新的迭代中的 的值就是上一次循環(huán)的 與 之和。所需計(jì)算的僅僅是函數(shù)在(新的)奇數(shù)點(diǎn)上的值。從而我們得到結(jié)果
?
其中h=(b-a)/N2。利用上面等式進(jìn)行變步長(zhǎng)的循環(huán)計(jì)算即。如果計(jì)算值與前一循環(huán)所得結(jié)果之差小于ε,則可認(rèn)為計(jì)算結(jié)果已收斂;否則即再次令子區(qū)間數(shù)目加倍,使N=N3=2N2。然后依此類推,直到計(jì)算結(jié)果收斂或者達(dá)到最大迭代次數(shù)
?
2、代碼實(shí)現(xiàn)
?
#define Pi 3.1415926535897931
int Simpson(double x1,double x2)
{
??? int i,j;
??? double s=0,x;
??? double error1,error2=1;
??? double Error_Ratio;
??? int intervals[20]= {1,2,4,8,16,32,64,128,256,512};
??? cout<<setiosflags(ios::left)<<setw(6)<<"No."<<"???????????? "
??? <<setw(7)<<"No.f(x)"<<"?????? "<<setw(15)<<"Simpson Rule"
??? <<"???????? "<<setw(10)<<"Error Ratio"<<endl;
??? for(i=0; i<10; i++)
??? {
??????? s=0;
??????? //n個(gè)區(qū)間 分為2n等份
??????? x=fabs(x2-x1)/(2*intervals[i]);
??????? s=s+function(x1)+function(x2);
??????? if(x1<x2)
??????? {
??????????? for(j=1; j<2*intervals[i]; j++)
??????????? {
??????????????? if(j%2==0)
??????????????? {
??????????????????? s+=2*function(x1+j*x);
??????????????? }
?????????????? ?else
??????????????? {
??????????????????? s+=4*function(x1+j*x);
??????????????? }
??????????? }
??????? }
??????? else
??????? {
??????????? for(j=1; j<2*intervals[i]; j++)
??????????? {
??????????????? if(j%2==0)
??????????????? {
??????????????????? s+=2*function(x2+j*x);
??????????????? }
??????????????? else
??????????????? {
??????????????????? s+=4*function(x2+j*x);
??????????????? }
??????????? }
??????? }
??????? s=s*x/3;
??????? error1=s-2;
??????? Error_Ratio=error1/error2;
??????? error2=error1;
??????? if(i!=0)
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]*2+1<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<setw(10)<<Error_Ratio<<endl;
??????? }
??????? else
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]*2+1<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<endl;
??????? }
??? }
??? return 0;
?
?
3、運(yùn)行結(jié)果
4. Gruss Qusdrature及Gruss Qusdrature-three point公式
1、算法原理
在高斯求積公式(1-1)中,若取權(quán)函數(shù)p(x)=1,積分區(qū)間[-1,1]得
稱之為高斯-勒讓德求積公式.
對(duì)任意求積區(qū)間[a,b],通過變換
?
可化為區(qū)間[-1,1],這時(shí)
?
取a=-1,b=1,則得公式
(2-3)
求積公式的高斯點(diǎn)就是勒讓德多項(xiàng)式的零點(diǎn).
利用勒讓德多項(xiàng)式的一個(gè)性質(zhì)
(2-3)
按(2-2)式,可推得余項(xiàng)為
?
若取
?
的零點(diǎn)x0=0為節(jié)點(diǎn),從而一點(diǎn)高斯-勒讓德求積公式(中矩形求積公式)為
?
其余項(xiàng)為
?
若取
?
的兩個(gè)零點(diǎn) 為節(jié)點(diǎn),則
?
從而二點(diǎn)高斯-勒讓德求積公式為
?
其余項(xiàng)
?
同理,三點(diǎn)高斯-勒讓德求積公式為
?
其余項(xiàng)
?
一般地,高斯-勒讓德求積公式的節(jié)點(diǎn)可以通過勒讓德多項(xiàng)式的零點(diǎn)確定,而系數(shù)通過(2-3)式確定.
2、代碼實(shí)現(xiàn)
int Simpson(double x1,double x2)
{
??? int i,j;
??? double s=0,x;
??? double error1,error2=1;
??? double Error_Ratio;
??? int intervals[20]= {1,2,4,8,16,32,64,128,256,512};
??? cout<<setiosflags(ios::left)<<setw(6)<<"No."<<"???????????? "
??? <<setw(7)<<"No.f(x)"<<"?????? "<<setw(15)<<"Simpson Rule"
?? ?<<"???????? "<<setw(10)<<"Error Ratio"<<endl;
??? for(i=0; i<10; i++)
??? {
??????? s=0;
??????? //n個(gè)區(qū)間 分為2n等份
??????? x=fabs(x2-x1)/(2*intervals[i]);
??????? s=s+function(x1)+function(x2);
??????? if(x1<x2)
??????? {
??????????? for(j=1; j<2*intervals[i]; j++)
??????????? {
??????????????? if(j%2==0)
??????????????? {
??????????????????? s+=2*function(x1+j*x);
??????????????? }
??????????????? else
??????????????? {
??????????????????? s+=4*function(x1+j*x);
??????????????? }
??????????? }
??????? }
???? ???else
??????? {
??????????? for(j=1; j<2*intervals[i]; j++)
??????????? {
??????????????? if(j%2==0)
??????????????? {
??????????????????? s+=2*function(x2+j*x);
??????????????? }
??????????????? else
??????????????? {
??????????????????? s+=4*function(x2+j*x);
??????????????? }
??????????? }
??????? }
??????? s=s*x/3;
??????? error1=s-2;
??????? Error_Ratio=error1/error2;
??????? error2=error1;
??????? if(i!=0)
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???? ????????"<<setw(7)<<intervals[i]*2+1<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<setw(10)<<Error_Ratio<<endl;
??????? }
??????? else
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]*2+1<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<endl;
??????? }
??? }
??? return 0;
}
Gauss_three.h
int Gauss_three(double x1,double x2)
{
??? int i,j;
??? double s=0,x;
??? double error1,error2=1;
??? double Error_Ratio;
??? int intervals[9]= {1,2,4,8,16,32,64,128,256};
??? cout<<setiosflags(ios::left)<<setw(6)<<"No."<<"???????????? "
??? <<setw(7)<<"No.f(x)"<<"?????? "<<setw(15)<<"Midpoint Rule"
??? <<"???????? "<<setw(10)<<"Error Ratio"<<endl;
??? for(i=0; i<9; i++)
??? {
??????? s=0;
??????? x=fabs(x1-x2)/intervals[i];
??????? x=x/2;
??????? for(j=0; j<intervals[i]; j++)
??????????? s=s+x/9*(8*function(2*j*x+x)+5*function(2*j*x+x-sqrt(0.6)*x)
???????????????????? +5*function(2*j*x+x+sqrt(0.6)*x));
??????? error1=s-2;
?? ?????Error_Ratio=error1/error2;
??????? error2=error1;
??????? if(i!=0)
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]*3<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<setw(10)<<Error_Ratio<<endl;
??????? }
??????? else
??????? {
??????????? cout<<setiosflags(ios::left)<<setw(6)<<intervals[i]
??????????? <<"???????????? "<<setw(7)<<intervals[i]*3<<"?????? "
??????????? <<setw(15)<<error1<<"???????? "<<endl;
??????? }
? ??}
??? return 0;
}
3、運(yùn)行情況
Gruss Qusdrature
GrussQusdrature-threepoint
?
?
3、? 算法效率的比較
?
?
?
| ???????? 計(jì)分方法 | ???????? 運(yùn)行效率 |
| trapezium rule | ??????? O(2) |
| Mid-point rule | ??????????? O(3) |
| Simpson's rule | ??????? O(2) |
| Gruss Qusdrature | ??????? O(4) |
| GrussQusdrature-three point | ??????? O(5) |
?
4、 當(dāng)時(shí)小組討論情況
在第三次的報(bào)告中,大家實(shí)行兩人一組,相互的交流,然后在討論的時(shí)候相互的展示程序。大家百花齊放。之后我們對(duì)匯報(bào)經(jīng)行討論。我們組提出了也盡量做到時(shí)間和空間精確讀的最優(yōu)化,大家在課下不僅僅是對(duì)課本上的思想在程序經(jīng)行了實(shí)現(xiàn),而且在實(shí)現(xiàn)之后大家相互的交流之后,對(duì)算法的時(shí)間空間上面進(jìn)行了優(yōu)化,在這其中大家試著去做到如何精確,做了許多超出課本上要就的測(cè)試,得出為什么越大誤差會(huì)很大,并且探求出是函數(shù)的原因。大家除了課本從算法的優(yōu)化和對(duì)積分的認(rèn)識(shí)上面有了很大的提高。大家積極的參與到后期的報(bào)告活動(dòng)中,很好的完成了后期的匯報(bào)工作。
?
?
方程微分
1、實(shí)際應(yīng)用
?? 科學(xué)技術(shù)中常常要求解常微分方程的定解問題。這里我們著重考察的一階方程的初值問題
? ??????????????????????????? ?????????????????
我們知道,只要函數(shù) 適當(dāng)光滑,譬如關(guān)于 滿足Lipschitz條件
?????????????? 。???? ?????????????????(1.3)
理論上就可以保證初值問題(1.1),(1.2)的解 存在并且唯一。實(shí)際生產(chǎn)與科研中,除少數(shù)簡(jiǎn)單情況能獲得初值問題的初等解外,絕大多數(shù)情況下是求不出初等解的。
實(shí)用的方法實(shí)在計(jì)算機(jī)上進(jìn)行數(shù)值求解,就是尋求 在一系列離散節(jié)點(diǎn)
?
上的近似值 。相鄰兩個(gè)結(jié)點(diǎn)的間距 稱為步長(zhǎng)。如果不特別說明,我們總是假定 為定數(shù),這時(shí)節(jié)點(diǎn)為?????? 。
初值問題(1.1),(1.2)的數(shù)值解法有個(gè)基本特點(diǎn),它們都采用取“步進(jìn)式”,即求解過程順著節(jié)點(diǎn)的次序一步一步地向前推進(jìn),所以只要給出用已知信息 計(jì)算 的遞推公式。
首先,要對(duì)方程(1.1)離散化,建立求數(shù)值解的遞推公式。一類是計(jì)算 時(shí)只用到前一點(diǎn)的值 ,稱為單步法。另一類是用到 前面 點(diǎn)的值 ,稱為步法。其次,要研究公式的局部截?cái)嗾`差和階,數(shù)值解 與精確解 的誤差估計(jì)及收斂性,還有遞推公式的計(jì)算穩(wěn)定性等問題。
??? 這里我們用了三種數(shù)值方法來求解常微分方程組,它們分別是歐拉法、后退歐拉法、Crank-Nicholson方法。
?
2.主要內(nèi)容
(1)Euler method
A.算法描述
? 在 平面上,我們把微分方程(1.1)的解 稱作它的積分曲線。積分曲線上一點(diǎn) 的切線斜率等于函數(shù) 的值,如果按函數(shù) 在 平面上建立一個(gè)方向場(chǎng),那么,積分曲線上每一點(diǎn)的切線方向均與方向場(chǎng)在該點(diǎn)的方向相一致。
基于上述幾何解釋,我們從初始點(diǎn) 出發(fā),先依方向場(chǎng)在該點(diǎn)的方向推進(jìn)到 上一點(diǎn) ,然后再從 依方向場(chǎng)的方向推進(jìn)到 上一點(diǎn) ,循此前進(jìn)推出一條折線 (圖9.1)。
一般地,設(shè)已做出該折線的頂點(diǎn) ,過 依方向場(chǎng)的方向再推進(jìn)到 ,顯然兩個(gè)頂點(diǎn) , 的坐標(biāo)有關(guān)系
?
即
???????????????????????? ?????????????????????(2.1)
這就是著名的歐拉(Euler)公式。若初值 已知,則依公式(2.1)可逐步算出
????????????????????????
? ?B.代碼實(shí)現(xiàn)
????????? 測(cè)試?yán)?#xff1a; ???????
????????? 易解得其原函數(shù)是
?初始化:t=0.0,y=1.0,dx=0.1;
?
主要通過迭代來完成
?? for(i=1; i<=10; i++)
??? {
??????? t=(i-1)*dx;
??????? y=y+dx*fun(t,y);
??????? Y=funr(t);
??????? Error[i]=Y-y;
??????? if(i==1) printf("%d\t??????? %.10f\t??? %.10f\t??? \n",i,y,Error[i]);
?????? ?if(i>1) printf("%d\t??????? %.10f\t??? %.10f\t%.10f \n",i,y,Error[i],Error[i]/Error[i-1]);
}
C.運(yùn)行結(jié)果
???? 運(yùn)行環(huán)境:VC++6.0
?
?
(2)Backward Euler
A.算法描述
假設(shè) ,即頂點(diǎn) 落在積分曲線 上,那么,按歐拉方法做出的折線 便是 過點(diǎn) 的切線,從圖形上看,這樣定出的頂點(diǎn) 明顯地偏離了原來的積分曲線,可見歐拉方法是相當(dāng)粗糙的。
為了分析計(jì)算公式的精度,通常可用泰勒展開將 在 處展開,則有
???? ?????(2.2)
在 的前提下, ,于是可得到歐拉法(2.1)的公式誤差
?????????????? ?????????????????(2.3)
稱為此方法的局部截?cái)嗾`差。
如果對(duì)方程(1.1)從 到 積分,得
. (2.4)
右端積分用左矩形公式 近似,再以 代替 , 代替 也得到(2.1),局部截?cái)嗾`差也是(2.3).
如果在(2.4)中右端積分用右矩形公式 近似,則得另一個(gè)公式
, (2.5)
稱為后退的歐拉法.
B.代碼實(shí)現(xiàn)
for(i=1; i<=10; i++)
??? {
??????? t=i*dx;
??????? y=y+dx*fun(t,y);
??????? Y=funr(t);
??????? Error[i]=Y-y;
??????? if(i==1)? printf("%d\t??????? %.10f\t??? %.10f\t??? \n",i,y,Error[i]);
? ??????if(i>1) printf("%d\t??????? %.10f\t??? %.10f\t%.10f \n",i,y,Error[i],Error[i]/Error[i-1]);
??? ?}
C.運(yùn)行結(jié)果
???? 運(yùn)行環(huán)境:VC++6.0
?
(3)Crank-Nicholson
???? A.算法描述
??? 為得到比歐拉法精度高的計(jì)算公式,在等式(1.4)右端積分中若用梯形求積公式近似,并用 代替 , 代替 ,則得
??????????????? ????????? (2.7)
稱為梯形方法.
梯形方法是隱式單步法,可用迭代法求解.同后退的歐拉方法一樣,仍用歐拉方法提供迭代初值,則梯形法的迭代公式為
(2.8)
為了分析迭代過程的收斂性,將(2.7)式與(2.8)相減,得
?
于是有
,
式中 為 對(duì) 滿足Lipschitz常數(shù),如果選取 充分小,使得
,
則當(dāng) 時(shí)有 ,這說明迭代過程(2.8)是收斂的.
B.代碼實(shí)現(xiàn)
? for(i=1; i<=10; i++)
??? {
??????? t=i*dx;
??????? tem=y;
??????? y=y+dx*fun(t,y);
??????? y=tem+(dx*fun(t,y)+dx*fun((i-1)*dx,tem))/2.0;
??????? Y=funr(t);
??????? Error[i]=Y-y;
??????? if(i==1)?? printf("%d\t??????? %.10f\t??? %.10f\t??? \n",i,y,Error[i]);
??????? if(i>1) printf("%d\t??????? %.10f\t??? %.10f\t%.10f \n",i,y,Error[i],Error[i]/Error[i-1]);
}
?
C.運(yùn)行結(jié)果
?
這里,我們還有介紹一種改進(jìn)的歐拉方法:
顯示歐拉公式計(jì)算工作量小,但精度低。Crank-Nicholson方法雖提高了精度,但為隱式公式,需用迭代法求解,計(jì)算工作量大。綜合兩者便可改進(jìn)Euler公式。 先用Euler公式求出一個(gè)初步的近似值 ,稱為預(yù)測(cè)值,它的精度不高,再用Crank-Nicholson公式對(duì)它校正一次,即迭代一次,求得 ,稱為校正值。即得到改進(jìn)的Euler公式:
?
可以證明該公式的精度是二階,這是一種顯示方式
相應(yīng)具體代碼如下:
??? for(i=1; i<=10; i++)
??? {
??????? t1=(i-1)*dx;
??????? t2=i*dx;
??????? tem=y+dx*fun(t1,y);
??????? y=y+(dx*fun(t1,y)+dx*fun(t2,tem))/2.0;
??????? Y=funr(t2);
??????? Error[i]=Y-y;
??????? if(i==1)???? printf("%d\t??????? %.10f\t??? %.10f\t??? \n",i,y,Error[i]);
??????? if(i>1) printf("%d\t??????? %.10f\t??? %.10f\t%.10f \n",i,y,Error[i],Error[i]/Error[i-1]);
?}
以下是運(yùn)行結(jié)果:
?
可以從運(yùn)行結(jié)果看出,結(jié)合改進(jìn)后的歐拉法后誤差相對(duì)變小,精確度和穩(wěn)定性相對(duì)高于前面的顯示歐拉法。
?
3、算法效率的比較
各種算法的優(yōu)劣比較:
| ??????? 方法 | ??????? 優(yōu)點(diǎn) | ??????? 缺點(diǎn) |
| ??? Euler Method | ??????? 簡(jiǎn)單 | ?????? 精度低 |
| ? Backward Euler | ????? 穩(wěn)定性好 | ? 精度低,計(jì)算量大 |
| ??? Crank-Nicholson | ????? 精度提高 | ?????? 計(jì)算量大 |
?
各種算法局部截?cái)嗾`差和階數(shù)的比較:
?????????????????????????????????????????????????????????????????? (h代表步長(zhǎng))
| ??????? 方法 | ?????? 截?cái)嗾`差 | ?????? 階數(shù) |
| ??? Euler Method | ???? ? | ?????? 一階 |
| ? Backward Euler | ??? | ?????? 一階 |
| ??? Crank-Nicholson | ???? ? | ?????? 二階 |
?
經(jīng)探討,我們得出提高計(jì)算精度的方法
①增加展開項(xiàng)數(shù)。
? 增加 函數(shù)的泰勒展開式的階數(shù),即逐次取高次項(xiàng),這樣就可以減少截?cái)嗾`差。其誤差系列為
②縮小步長(zhǎng)
? 由于差分間隔減小,即h值變得很小,可使計(jì)算精度提高。在理論上步長(zhǎng)值越小越好,而且趨近于0最好。但是,dx越小會(huì)使計(jì)算次數(shù)增加,浪費(fèi)計(jì)算時(shí)間,而且還會(huì)使舍入誤差增大。
?
4、小組內(nèi)討論情況
???? ①大家對(duì)算法經(jīng)行了細(xì)致的研究
???? 經(jīng)過上三次的編寫程序之后我們對(duì)各自的編程的特點(diǎn)和基本思路有了一個(gè)清晰的了解,大家在交流的時(shí)候也是明顯的速度加快了許多,同時(shí)對(duì)微分的認(rèn)識(shí)也是加強(qiáng)了很多。對(duì)于這次的編程我們組提出了也盡量做到時(shí)間和空間也精確讀的最優(yōu)化。于是大家在課下不僅僅是對(duì)課本上的思想在程序經(jīng)行了實(shí)現(xiàn),而且大家試著去做到如何精確,做了許多超出課本上要就的測(cè)試,得出為什么越大誤算從而更加精確的確定其微分的值。大家除了課本從算法的優(yōu)化和對(duì)積分的認(rèn)識(shí)上面有了很大的提高。
???? ②大家積極的參與到后期的報(bào)告活動(dòng)中
??? 這次中,大家表現(xiàn)出前所未有的熱情,爭(zhēng)先恐后的去做報(bào)告PPT等任務(wù),力求做的最好。在即上三次的分工之后,我們這次決定再次相互的交換一下工作。我們最終的程序或許沒有解決我們最初討論出的問題,但是我想大家參與了就是一種最大的收獲。這次的分工是:陳俊樺、韓學(xué)武、肖大軍和梅旭由四位同學(xué)負(fù)責(zé)修改程序,王艷琴和向勝男經(jīng)行程序的測(cè)試和算法的描述工作,彭亞瓊、劉宇、方正寫word文檔,肖大軍和梅旭負(fù)責(zé)制作PPT ,張鐘文和楊耀鵬寫臺(tái)上的細(xì)化工作。
?
五、結(jié)課感言
小組總結(jié)
經(jīng)過一學(xué)期的學(xué)習(xí),從小組的角度看,小組有了一個(gè)不錯(cuò)的成長(zhǎng)。小組阿紫組織大家的學(xué)習(xí)討論的時(shí)候,本著老師要求的基本原則,經(jīng)行了多次的改革。首先介紹一下組內(nèi)的成員。我們小組內(nèi)的成員相對(duì)其他組來說沒有編程能力特別出眾的人員,所以我們小組在第一次的實(shí)習(xí)中經(jīng)行了一次小小的嘗試,結(jié)果很顯然,寫出程序來的人并不多,有的甚至連教材上面講的基本原理都不清楚,所以在第一次討論之后,我們組內(nèi)經(jīng)行了一次關(guān)于改革的討論,將大家分為兩人一組,這樣可以加強(qiáng)大家之間的交流,同時(shí)也能讓大家都參與到其中,第一次的報(bào)告其實(shí)完成的還是很倉促的。但是第二次的時(shí)候就是有了一個(gè)新的面貌,兩人一組經(jīng)行匯報(bào)討論,這樣大家就建立在討論之前兩人已經(jīng)進(jìn)行了交流,這樣進(jìn)度經(jīng)快了很多,完成之后我們現(xiàn)場(chǎng)對(duì)一些精度等存在問題的代碼現(xiàn)場(chǎng)經(jīng)行了更改,這樣讓大家更清楚了在寫程序的時(shí)候需要注意什么。然后我們開始對(duì)組間匯報(bào)有了一個(gè)明確的分工。在組間匯報(bào)完之后,我們并且對(duì)每個(gè)組的匯報(bào)經(jīng)行了總結(jié),對(duì)第三次的匯報(bào)提出要求,希望大家不僅僅以實(shí)現(xiàn)算法,盡量的讓代碼從時(shí)間空間可讀性等各個(gè)方面有一定的建樹。等到第三次實(shí)習(xí)的時(shí)候,大家對(duì)原理和代碼都很熟悉,討論很快就結(jié)束了,我們這次著重的經(jīng)行了一下對(duì)每個(gè)人寫代碼的特點(diǎn)的展示,比如如何考慮和實(shí)現(xiàn)時(shí)空的最優(yōu)化,如何讓代碼健壯性更好,有的人更是展示了面向?qū)ο蟮膶?shí)現(xiàn)方式。大家在相互交流的同時(shí)相互的學(xué)習(xí),使自己在編程的思想上面有了一定的提高。這次大家很積極的要求去做各個(gè)任務(wù)。在這個(gè)基礎(chǔ)上面我們經(jīng)行三次匯報(bào)結(jié)束之后,就各個(gè)小組之間存在問題經(jīng)行了探討。于是在第四次匯報(bào)的時(shí)候我們不僅僅是對(duì)教材上面的微分的內(nèi)容經(jīng)行了實(shí)現(xiàn),還對(duì)一些大家忽略的內(nèi)容比如各個(gè)類型的精確度問題等經(jīng)行了探究,讓我們對(duì)實(shí)現(xiàn)中各個(gè)實(shí)現(xiàn)過程更加的胸有成竹。
可能我們組做的不是做好的,但是從一定程度上說我們覺得我們已經(jīng)得到自己想要得到的,不僅僅是在計(jì)算方法上面更是在大家對(duì)編程的自信心和技巧上面有了一個(gè)很大的提高。有句話說的好:我們不和其他人比較,我們每次超越自己一點(diǎn)劇足夠了。的確在這個(gè)學(xué)期的學(xué)習(xí)中,我們小組雖然沒有那么輝煌的成就,但是我們對(duì)每一個(gè)組員都是熱心的幫助,大家一起進(jìn)步,讓很多以前沒有動(dòng)手編過程序的人開始意識(shí)到編程沒有自己想象的那么難。
在課程即將結(jié)束的時(shí)候,有組員主動(dòng)的提出要去完成某些任務(wù),當(dāng)這次任務(wù)已經(jīng)那排好了的時(shí)候,他要求下次讓他來。這和其他組的本著能者多勞的原則大大的不同,在我們組這樣的人不僅僅一個(gè),而是大家一起。雖然有些事情說出來沒什么驕傲的,但是我依然覺得自始至終在老師不點(diǎn)名的情況下,我們組內(nèi)的成員沒有一個(gè)人翹過一節(jié)課,更是后來似乎愛上了這種模式。這源自于大家對(duì)小組的付出和在小組內(nèi)的存在感。我想在大學(xué)的學(xué)習(xí)中,本次的小組學(xué)習(xí)是大家經(jīng)歷過的醉成功學(xué)習(xí)之一。
為什么大家積極的去做任務(wù),因?yàn)榇蠹覍?duì)小組愛的深沉。
小組成員感言
組長(zhǎng) 韓學(xué)武
??? 作為組長(zhǎng)在這學(xué)期的計(jì)算方法學(xué)習(xí)上面有很大的收獲很大,在四次的實(shí)習(xí)中,積極的完成每次的程序編寫工作,然后積極和大家討論,并且積極的組織大家經(jīng)行小組簡(jiǎn)單扼匯報(bào)準(zhǔn)備工作,每次的匯報(bào)主要分擔(dān)了寫報(bào)告的工作。除此之外還積極的對(duì)小組的管理和安排經(jīng)行改革極大的調(diào)動(dòng)大家的積極性。通過此次計(jì)算方法的學(xué)習(xí),我最大的感受就是團(tuán)隊(duì)精神,俗話說“三人行必有我?guī)煛痹诙啻蔚慕涣髦?#xff0c;在編程思想,PPT制作,匯報(bào)方式等等方面學(xué)到了很多。在這種積極活躍的授課方式之下,感覺到對(duì)計(jì)算方法和程序編寫有了更深的認(rèn)識(shí)。
向勝男
起初,我對(duì)老師用英文版教材授課的方式很不習(xí)慣。由于英語水平有限,課本上內(nèi)容基本看不懂,單靠聽老師的講解只能半知半解。后來老師又要求對(duì)每章節(jié)的知識(shí)用程序?qū)崿F(xiàn),而且進(jìn)行討論并作匯報(bào),這讓我開始對(duì)這門課程感到些許的茫然。但是,為了真正弄懂各種算法的原理,我課后還是積極查閱資料,嘗試著編寫出正確的程序。有一次程序運(yùn)行結(jié)果不對(duì),自己花了大量時(shí)間還是不知道問題出在哪里,后來在小組討論環(huán)節(jié)經(jīng)和同學(xué)分析將問題解決。雖然那次程序?qū)懙么植?#xff0c;但還是很有成就感,并且漸漸對(duì)老師的這種授課方式提起興趣來。
四次程序匯報(bào)后,這門課也就相應(yīng)結(jié)束了。在這過程中,我感受到了團(tuán)隊(duì)合作的重要性。每次小組匯報(bào),和大家一起交流算法,提出并分析問題,接著準(zhǔn)備匯報(bào)材料,在有限的時(shí)間內(nèi)大家一起忙碌各自分配的任務(wù),喜歡這樣一個(gè)愉快的過程。同時(shí),發(fā)現(xiàn)自己的動(dòng)手實(shí)踐能力也提高了,學(xué)會(huì)如何調(diào)試修改程序,完善自己的代碼,以及美化輸出界面等,而且對(duì)知識(shí)原理了解得更加透徹了。當(dāng)然,拿起英文教材也沒那么恐懼了,認(rèn)識(shí)了不少單詞呢。如果我們平時(shí)沒有這樣的練習(xí),最后知識(shí)傳統(tǒng)地筆試考試后就結(jié)課是完全達(dá)不到這種效果的。
?
肖大軍
?? 誠(chéng)然的說以前從來沒有老師以這種方式授過課。我能感受的到,我不僅僅學(xué)習(xí)到了課本上的知識(shí),更提高了團(tuán)隊(duì)合作,有效溝通,當(dāng)眾演說等其他方面的綜合素質(zhì)。
首先,上課的教材采用英文版本就讓我們耳目一新,誠(chéng)然以我個(gè)人的英語水平還不能完全理解教材。經(jīng)過在課堂上老師的重點(diǎn)剖析,能理解計(jì)算方法的基本算法思想,并能獨(dú)立的編寫每一個(gè)程序。英語教材的使用也讓我再次意識(shí)到英語水平的不足,以及英語學(xué)習(xí)的重要性和迫切性。
然后老師采取分組的方式進(jìn)行交流,的確很契合大多數(shù)場(chǎng)合集體交流探討的需要,讓我們意識(shí)到團(tuán)隊(duì)的重要性,對(duì)今后我們的工作實(shí)踐有了較好的啟蒙基礎(chǔ),在小組內(nèi)積極討論還鍛煉了我們的團(tuán)隊(duì)協(xié)作能力,增進(jìn)了大家的情感交流,學(xué)習(xí)了不同同學(xué)好的算法思路。
采取小組回報(bào)的方式,給我們提供了一個(gè)上臺(tái)發(fā)言的平臺(tái),讓我們嘗試著在更多人面前講話,做PPT展示,克服膽怯的心里,鍛煉了交際能力,靈活的應(yīng)變能力,對(duì)今后的學(xué)習(xí)工作都有啟蒙意義。
總的來說,在計(jì)算方法這門課上,我學(xué)到的東西著實(shí)很多,在上課時(shí),積極圍繞著老師的講解思考問題,有時(shí)老師一些發(fā)人肺腑的話,也讓人受益匪淺;課下我積極編程實(shí)現(xiàn)算法,提高了動(dòng)手能力,也進(jìn)一步的理解了算法的核心思想;在小組內(nèi)討論時(shí),積極幫同學(xué)解決困惑,積極思考同學(xué)提出的新的算法思路,這些都讓我受益匪淺;經(jīng)過全組同學(xué)的共同努力,在小組匯報(bào)時(shí),我抱著鍛煉自己的心態(tài)積極參加小組匯報(bào)!
?
彭亞瓊
說起計(jì)算方法,先談?wù)動(dòng)?jì)算方法的授課老師-曾老師吧,第一次上曾老師的課,給我的感覺就是老師的態(tài)度非常認(rèn)真,為了讓多數(shù)同學(xué)能聽懂,很基礎(chǔ)的定理、公式都在黑板上一一推導(dǎo),還時(shí)不時(shí)的找同學(xué)提問,以確定同學(xué)是否真正聽懂。此外,在英語不怎么好的情況下,曾老師堅(jiān)持用英文教材,目的在于督促大家學(xué)習(xí)更多的英語,促進(jìn)英語能力的提高。而我的收獲也是非常大的,首先是英語專業(yè)詞匯的學(xué)習(xí),在講解每一章內(nèi)容時(shí),我都會(huì)用手機(jī)查詢不懂的詞匯,并且掌握;再者就是掌握了一系列解決實(shí)際問題的方法,主要學(xué)習(xí)對(duì)象是微分方程,常微分方程,線性方程組,學(xué)習(xí)了迭代法、二分法、插值法的理論知識(shí),并在計(jì)算機(jī)上用所學(xué)內(nèi)容實(shí)現(xiàn)了對(duì)相關(guān)問題的求解,掌握了微積分,線性代數(shù),常微分方程中的數(shù)學(xué)問題,并學(xué)習(xí)了誤差、收斂度的分析與判斷。此外掌握了一種重要的數(shù)學(xué)思想-離散化:離散化是程序設(shè)計(jì)中一個(gè)很常用的技巧,它可以有效的降低時(shí)間復(fù)雜度。在學(xué)習(xí)數(shù)值積分時(shí),Trapezium rule、Mid-point rule、Simpson’s rule、Gauss quadrature等方法都體現(xiàn)了離散化的思想,降低了解決實(shí)際問題過程中的難度;最后就是提升了我的團(tuán)隊(duì)合作能力,這也是老師一直強(qiáng)調(diào)的東西,要有集體榮辱觀,這樣才能發(fā)揮你個(gè)人的最大潛質(zhì),為小組貢獻(xiàn)自己的力量。并且學(xué)習(xí)態(tài)度也有了改善,在學(xué)習(xí)一門新的學(xué)科時(shí),不能憑自己的喜好決定你的努力程度,你要對(duì)自己負(fù)責(zé),學(xué)東西時(shí)一定要持有認(rèn)真的態(tài)度,不能隨心所欲。本門課程學(xué)習(xí)過程中收獲頗豐,希望自己秉著學(xué)習(xí)的態(tài)度一直走下去。
楊耀鵬
其實(shí)一直以來感覺自己在數(shù)學(xué)方面還是比較感興趣的,但是從學(xué)完線性代數(shù)和高數(shù)后自己也就很少去碰數(shù)學(xué)方面的書了,直到這個(gè)學(xué)期的這門計(jì)算方法讓我重新又找回了學(xué)習(xí)數(shù)學(xué)的感覺。經(jīng)過這一個(gè)學(xué)期的學(xué)習(xí),總體感覺還行,基本上都能領(lǐng)悟。個(gè)別的知識(shí)點(diǎn)可能比較抽象,但是好多的算法我們都經(jīng)過了上機(jī)實(shí)踐,所以掌握起來會(huì)更透徹一點(diǎn)。學(xué)習(xí)了這門課,感覺實(shí)用性比較大。像拉格朗日和牛頓插值法等等算法。因?yàn)槲覀冊(cè)诂F(xiàn)實(shí)生活中需要通過已有的數(shù)據(jù)來發(fā)掘事物本身的內(nèi)在規(guī)律,或者模擬出相應(yīng)的數(shù)學(xué)模型來解決。所以這就需要我們用到這學(xué)期學(xué)習(xí)的相關(guān)知識(shí)來完成。這門課程也是連接數(shù)學(xué)與計(jì)算機(jī)之間的橋梁,之前學(xué)習(xí)的數(shù)學(xué)積分的知識(shí)現(xiàn)在也知道怎么用程序來實(shí)現(xiàn)了。還有就是對(duì)線性方程組和非線性方程組的求解方法的掌握。插值的應(yīng)用自己還想說的就是。自己準(zhǔn)備和同學(xué)一起做關(guān)于圖像處理的方面的東西,所以當(dāng)時(shí)我就覺得這門課程作用不一般。學(xué)完了這門課程也希望自己活學(xué)活用,發(fā)揮這門課應(yīng)有的作用。
方正
? 經(jīng)過了這個(gè)學(xué)期對(duì)計(jì)算方法的學(xué)習(xí),總體感覺還行,跟著老師的節(jié)奏,積極參加小組活動(dòng),課后仔細(xì)研究老師推薦的劍橋數(shù)值方法教材,基本上都能領(lǐng)悟,除了個(gè)別知識(shí)點(diǎn)可能比較抽象外,但是好多的算法我們都經(jīng)過了上機(jī)實(shí)踐,所以掌握起來會(huì)更透徹一點(diǎn)。學(xué)習(xí)了這門課程后,我感覺實(shí)用性很大,因?yàn)樵谖覀儸F(xiàn)實(shí)生活中我們經(jīng)常需要通過已有數(shù)據(jù)來發(fā)掘事物本身的內(nèi)在規(guī)律,或者模擬出相應(yīng)的數(shù)學(xué)模型來解決,這就需要我們用到這學(xué)期學(xué)到的相關(guān)知識(shí)來完成了。這門課程也是連接數(shù)學(xué)與計(jì)算機(jī)之間的橋梁。其實(shí)學(xué)習(xí)這門課最大的收獲是老師讓我們懂得了團(tuán)隊(duì)合作的意義,不僅培養(yǎng)我們的合作意識(shí)、團(tuán)隊(duì)精神、理性思考、同時(shí)也提升我們的境界拓寬我們的胸懷,尺有所短寸有所長(zhǎng),要多發(fā)現(xiàn)和挖掘各自的優(yōu)勢(shì)和長(zhǎng)處,求知的過程要提倡個(gè)人資源互補(bǔ)、優(yōu)勢(shì)共享才能少走彎路,攜手共贏。我很喜歡也很欣賞曾三友老師的這種富有創(chuàng)新意義的教學(xué)模式,讓我受益匪淺,得到了很大的提高。謝謝!
梅旭
在計(jì)算方法的課程學(xué)習(xí)中,曾老師的教學(xué)方法明顯和一般老師的不同,不僅僅是讓學(xué)生學(xué)習(xí)理論的知識(shí),還將理論與實(shí)踐緊密的結(jié)合起來,以此提高學(xué)生的動(dòng)手能力。星期二課堂上的討論更是讓學(xué)生對(duì)理論知識(shí)有了更深的理解,而星期四的匯報(bào)也讓每個(gè)人有機(jī)會(huì)學(xué)習(xí)其他人的程序和匯報(bào)形式。不過這門課程對(duì)英語水平有較高的要求,也許是英文教材寫得更好或者是有意讓學(xué)生了解數(shù)學(xué)術(shù)語的英文書寫、提高英語閱讀水平,我還是覺得用中文教材更方便學(xué)生學(xué)習(xí)。
王艷琴
課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,程序軟件已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活領(lǐng)域中的應(yīng)用可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握簡(jiǎn)單的軟件的開發(fā)技術(shù)是十分重要的。????? 回顧起此次數(shù)值分析的課程設(shè)計(jì),至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識(shí)重新溫故。? 我得到了很多同學(xué)的幫助。我想沒有他們我可能都要放棄了,因?yàn)槲冶救藢?duì)數(shù)值分析的算法本來就不是很熟悉,學(xué)的東西也不能很好的靈活應(yīng)用,理論聯(lián)系不了實(shí)際。
通過這段時(shí)間的學(xué)習(xí),我認(rèn)為要學(xué)好C++程序這門課程,不僅要認(rèn)真閱讀課本知識(shí),更重要的是要通過上機(jī)實(shí)踐才能增強(qiáng)和鞏固我的知識(shí)。特別是作為大學(xué)生,更要注重實(shí)踐這一環(huán)節(jié),只有這樣我們才能成為合格的計(jì)算機(jī)人材。? 整個(gè)過程不斷的調(diào)試,在調(diào)用子程序的時(shí)候遇到了部分問題,最后幸好都解決了。通過這次課程設(shè)計(jì)也穩(wěn)固了一些已經(jīng)學(xué)習(xí)的數(shù)值分析的算法,同時(shí)了解了一些以前沒有接觸的數(shù)值分析的算法。總之,這次的課程設(shè)計(jì)受益匪淺。
張鐘文
通過對(duì)計(jì)算方法的學(xué)習(xí),讓我明白了兩個(gè)道理。一、做一件事要做好充分的準(zhǔn)備,那樣便可以事半功倍。在正式操作前,對(duì)理論知識(shí)的學(xué)習(xí)很重要,經(jīng)過聽老師講課、課后自己看書,我對(duì)這門課的理論知識(shí)有了一定了解。二、學(xué)習(xí)中要勇于創(chuàng)新,不能墨守陳規(guī)。在編程時(shí),我發(fā)現(xiàn)有時(shí)候一個(gè)題目在用常規(guī)方法完成后,我們可以通過一些改進(jìn),從而可以讓程序變得更加簡(jiǎn)明易懂,這就需要我們的創(chuàng)新精神。
在上機(jī)實(shí)踐中,最具有挑戰(zhàn)性的是編程,它需要扎實(shí)的C語言功底和較強(qiáng)的邏輯思維能力及一定的編程技巧。正好讓我對(duì)已經(jīng)學(xué)習(xí)過的C語言這門課程進(jìn)行復(fù)習(xí)與鞏固,真是一舉兩得。
??? 經(jīng)過這幾天學(xué)習(xí)的實(shí)踐,我已經(jīng)對(duì)數(shù)值計(jì)算方法這門課程有了一定的了解,我相信有了這樣實(shí)用的數(shù)學(xué)工具,在今后的學(xué)習(xí)生活中一定會(huì)給我?guī)砗荻嗟膸椭?#xff0c;我也會(huì)更加努力,爭(zhēng)取更大的進(jìn)步!!!
??? 此外,在本次上機(jī)訓(xùn)練的學(xué)習(xí)中體驗(yàn)到了團(tuán)隊(duì)的重要性,大家分工合作,會(huì)把事情簡(jiǎn)單而又有效的完成。
陳俊樺
計(jì)算方法是信息科學(xué)與計(jì)算科學(xué)緊密相聯(lián)的一門課程,與計(jì)算機(jī)科學(xué)有著相輔相成的作用。一來計(jì)算方法的理論可以為計(jì)算機(jī)編程提供算法理論;另一方面,通過編程實(shí)現(xiàn),也可以對(duì)計(jì)算方法的算法效率和實(shí)現(xiàn)效果進(jìn)行衡量和比較。作為一名計(jì)算機(jī)專業(yè)的學(xué)生,僅僅知道計(jì)算方法的理論知識(shí)顯然還是不夠的,還要知道如何將算法編程實(shí)現(xiàn)。
? 不同于之前的計(jì)算方法課程,這次的課程老師更加注重了對(duì)動(dòng)手編程能力的考查,而不是對(duì)理論知識(shí)的考核。對(duì)于我們專業(yè)的同學(xué)來說,這樣的考查形式更有意義,也更符合我們鍛煉和提高編程能力的要求。通過這樣一門實(shí)踐性較強(qiáng)的課程的學(xué)習(xí),自己還是有所收獲的。
? 四次編程實(shí)踐真正的鍛煉了我思考問題和動(dòng)手編程的能力。比如,在用LU分解法求解線性方程組的時(shí)候,會(huì)有三個(gè)矩陣需要存儲(chǔ):系數(shù)矩陣,系數(shù)矩陣的下三角矩陣和系數(shù)矩陣的上三角矩陣。如果為每個(gè)矩陣都單獨(dú)開辟存儲(chǔ)空間,無疑將會(huì)占用太多的資源,所以可以用為系數(shù)矩陣開辟的空間來輪流存儲(chǔ)這三個(gè)矩陣,這是在課堂上我所學(xué)到的一個(gè)如何更好的解決問題的一個(gè)方法。自己動(dòng)手編程的重要在于通過自己去編寫代碼,才會(huì)發(fā)現(xiàn)問題,然后想出解決問題的辦法,使自己的編程能力得到提高。
這次以小組形式進(jìn)行編程實(shí)踐對(duì)我們團(tuán)隊(duì)合作意識(shí)的培養(yǎng)液起到了很大的作用。一個(gè)人想到的問題和解決方法是有限的,這也是為什么團(tuán)隊(duì)合作精神對(duì)于程序編寫人員來說如此重要的原因。在一個(gè)小組里面,和同學(xué)們一起針對(duì)給出的算法進(jìn)行討論,各抒己見,彼此之間分享自己的想法,最終每個(gè)小組成員都能吸收到別人的好的方法,同時(shí)也可以讓自己的好的方法為他人所用。這樣的一個(gè)環(huán)境讓我受益匪淺,知道了如何更好地和他人交流,通過團(tuán)隊(duì)合作來完成程序的設(shè)計(jì)。
? 總之,以動(dòng)手實(shí)踐編程為考查方式的計(jì)算方法課程的學(xué)習(xí),對(duì)于計(jì)算機(jī)專業(yè)的我們,還是有比較大的幫助的。在平時(shí)訓(xùn)練量少的情況下,這門課程的編程實(shí)踐也成為了比較難得的鍛煉的機(jī)會(huì)。理論知識(shí)固然重要,但是更要將理論知識(shí)運(yùn)用到實(shí)踐中,那樣才能學(xué)以致用,達(dá)到我們學(xué)習(xí)的更進(jìn)一步的目標(biāo)。
劉宇
我是信息工程學(xué)院的學(xué)生,是為了學(xué)習(xí)算法設(shè)計(jì)而選擇的這門課。
在這門課上,我們主要學(xué)會(huì)了泰勒公式在計(jì)算機(jī)數(shù)據(jù)在算法設(shè)計(jì)中的應(yīng)用。我們進(jìn)行了求函數(shù)值(二分法、Newton-Raphson、迭代法),線性方程求解(高斯消元法、LU算法),求積分(梯形法、
Mid-point rule、Simpson's rule、Guass quadrature),求解常微分方程(Euler method、backward Euler、Crank-Nicholson、Multistep methods)等方法的實(shí)驗(yàn)。
利用泰勒公式進(jìn)行計(jì)算方法的學(xué)習(xí)好處是用函數(shù)值替代導(dǎo)數(shù),簡(jiǎn)化程序設(shè)計(jì)的算法,縮短計(jì)算時(shí)間,此方法在工程領(lǐng)域的應(yīng)用異常廣泛。
而這門課程鍛煉的不僅僅是我們的編程能力和數(shù)學(xué)能力,因?yàn)槲覀兠看味家M(jìn)行PPT的講解,我們還鍛煉了算法論文的寫作能力和講解能力。
通過這門課,我學(xué)到了很多東西,不枉費(fèi)我選擇了這門課程。
?
?
六、小組分工
第一次實(shí)習(xí):
| 成員 | 報(bào)告中的任務(wù) | 成員 | 報(bào)告中的任務(wù) |
| 韓學(xué)武 | 整理文檔 | ? | ? |
| 方正 | 比較程序優(yōu)劣 | 彭亞妹 | 制作PPT |
| 肖大軍 | 講解PPT | 梅旭 | 修改程序 |
| 劉宇 | 對(duì)算法效率測(cè)試 | 陳俊樺 | 對(duì)算法效率測(cè)試 |
| 楊耀鵬 | 修改程序 | 張鐘文 | 修改程序 |
| 向勝男 | 整理文檔 | 王艷琴 | 制作PPT |
第二次實(shí)習(xí)
| 成員 | 報(bào)告中的任務(wù) | 成員 | 報(bào)告中的任務(wù) |
| 韓學(xué)武 | 修改程序 | ? | ? |
| 方正 | 修改程序 | 彭亞妹 | 修改程序 |
| 肖大軍 | 匯報(bào) | 梅旭 | 制作PPT |
| 劉宇 | 修改程序 | 陳俊樺 | 修改程序 |
| 楊耀鵬 | 寫文檔 | 張鐘文 | 寫文檔 |
| 向勝男 | 制作PPT | 王艷琴 | 細(xì)化臺(tái)上匯報(bào) |
?
第三次實(shí)習(xí)
| 成員 | 報(bào)告中的任務(wù) | 成員 | 報(bào)告中的任務(wù) |
| 韓學(xué)武 | 寫文檔 | ? | ? |
| 方正 | 了解關(guān)于課外的積分方法 | 彭亞妹 | 細(xì)化臺(tái)上細(xì)節(jié) |
| 肖大軍 | 上臺(tái)展示 | 梅旭 | 了解關(guān)于課外的積分方法 |
| 劉宇 | 制作PPT | 陳俊樺 | 制作PPT |
| 楊耀鵬 | 修改程序 | 張鐘文 | 修改程序 |
| 向勝男 | 寫文檔 | 王艷琴 | 分析其他組的代碼特點(diǎn) |
?
第四次實(shí)習(xí)
| 成員 | 報(bào)告中的任務(wù) | 成員 | 報(bào)告中的任務(wù) |
| 韓學(xué)武 | 修改程序 | ? | ? |
| 方正 | 寫word文檔 | 彭亞妹 | 寫word文檔 |
| 肖大軍 | 制作PPT | 梅旭 | 修改程序 |
| 劉宇 | 修改程序 | 陳俊樺 | 修改代碼 |
| 楊耀鵬 | 細(xì)化臺(tái)上工作 | 張鐘文 | 制作PPT |
| 向勝男 | 算法描述 | 王艷琴 | 程序測(cè)試 |
?
總報(bào)告
| 成員 | 報(bào)告中任務(wù) | 頁數(shù) | 成員 | 報(bào)告中任務(wù) | 頁數(shù) |
| 韓學(xué)武 | 撰寫主要內(nèi)容、目錄、小組感想、總結(jié)、最后整理工作 | 1~2、4、46~47、51~54 | ? | ? | ? |
| 方正 | 撰寫前言 | 3 | 彭亞妹 | 撰寫計(jì)算方法概要 | 5~6 |
| 肖大軍 | 撰寫解方程部分 | 6~12 | 梅旭 | 撰寫解方程部分 | 6~12 |
| 劉宇 | 撰寫求解方程組部分 | 12~23 | 陳俊樺 | 撰寫求解方程組部分 | 12~23 |
| 楊耀鵬 | 撰寫求解積分部分 | 23~39 | 張鐘文 | 撰寫求解積分部分 | 23~39 |
| 向勝男 | 撰寫求解微分部分 | 39~46 | 王艷琴 | 撰寫求解微分部分 | 39~46 |
?
注:我們每次實(shí)習(xí)都會(huì)寫好報(bào)告和PPT所以最后報(bào)告各個(gè)實(shí)習(xí)內(nèi)容的撰寫相對(duì)比較容易
七、總結(jié)
通過這次與眾不同的計(jì)算方法課程的學(xué)習(xí),我們?cè)诖碎g都收獲了很多。從我們小組的角度將從以下幾點(diǎn)談?wù)搶?duì)這個(gè)學(xué)期計(jì)算方法學(xué)習(xí)做一個(gè)總結(jié)。
?1、首先從學(xué)習(xí)收獲的角度。從組內(nèi)人們的交流過程中我們可以得到幾點(diǎn)。首先,大家對(duì)計(jì)算有了一個(gè)新的理解。以前大家學(xué)習(xí)高數(shù)的時(shí)候整天研究做題,但是對(duì)高數(shù)中的積分微分等方法的原理沒有一個(gè)基礎(chǔ)的理解。但是這次,我們組的成員能深刻的理解到計(jì)算的基本原理,這樣對(duì)知識(shí)的掌握有一個(gè)新的高度。其次,除了計(jì)算原理理解之外,大家在計(jì)算方法的學(xué)習(xí)和編程實(shí)現(xiàn)中也漸漸的明白了一個(gè)理論的公式計(jì)算(如同高數(shù)中復(fù)雜的公式,高難度的運(yùn)算)如何轉(zhuǎn)化成程序去實(shí)現(xiàn)。在這個(gè)過程中,大家明白了計(jì)算機(jī)運(yùn)行,或者說是設(shè)計(jì)一個(gè)算法的基礎(chǔ)是什么,簡(jiǎn)單的說是借用計(jì)算機(jī)告訴可重復(fù)的運(yùn)算來彌補(bǔ)其中其離散的缺點(diǎn)。這樣雖然不能帶到醉精確的數(shù)值但是可以得到一個(gè)你需要的數(shù)值。在這個(gè)過程中我們從教材上,從課堂上去體會(huì)是怎么把一個(gè)問題去離散化,如何去用迭代等方式去逼近一個(gè)問題等等。通過學(xué)習(xí)我們基本上認(rèn)識(shí)到了怎么將一個(gè)現(xiàn)實(shí)的問題去用編程思想去考慮。這不僅僅體現(xiàn)在我們隊(duì)算法的理解上面,更是我們對(duì)編程的一次新的理解。
2、其次從授課方式角度。曾老師改變以前的授課和考核方式,以小組的方式經(jīng)行考核,這樣對(duì)我們來說也是一個(gè)挑戰(zhàn)。但是從最終大家的結(jié)果來看收獲頗豐。第一、讓大家對(duì)教材的知識(shí)有了一個(gè)全新的認(rèn)識(shí)。采用階段性的小組匯報(bào),這樣讓大家有時(shí)間經(jīng)行討論,在大家寫程序的時(shí)候?qū)滩牡闹R(shí)有了一遍了解,在給大家講解的時(shí)候有了一個(gè)更深的了解,然后到最后的報(bào)告總結(jié),當(dāng)大家能用自己的話把課本上的很多東西寫出來的時(shí)候,或許大家不僅僅是看了教材上的內(nèi)容,還會(huì)參考很多課外的資料,我想這個(gè)時(shí)候他們的理解會(huì)是非常深刻的。
第二、培養(yǎng)了大家的團(tuán)隊(duì)合作能力,在這學(xué)期的計(jì)算方法的學(xué)習(xí)中,我們組從寫程序到最后的報(bào)告總結(jié)始終貫徹著團(tuán)隊(duì)的精神,在寫程序初期,我們組織兩人一組,相互的補(bǔ)充相互的學(xué)習(xí),使得周二的討論效率更高,在討論好大家之后,大家的分工明確在完成自己的工作得到同時(shí)主動(dòng)幫助其他人完成任務(wù)。于此同時(shí)大家相互的交換工作相互的知道讓每個(gè)人有了很快的成長(zhǎng)。大家在團(tuán)隊(duì)中清楚了自己的角色,如何把一個(gè)比較大的工程分解到每個(gè)人身上,再怎么整合起來成為一個(gè)需要的產(chǎn)品。這不僅僅在這次的學(xué)習(xí)中很重要,也漸漸的明白了團(tuán)隊(duì)的工作。第三、大家熱情高漲,收獲效率更上一層樓,像其他的組一樣,開始的時(shí)候我們組也是存在部分 同學(xué)基礎(chǔ)比較差編程能力相對(duì)來說比較弱,我們?cè)诎凑绽蠋煹氖谡n方式的基礎(chǔ)上,在小組內(nèi)實(shí)行兩人一組等一系列的活動(dòng)安排,調(diào)動(dòng)大家的熱情,漸漸的大家開始積極的展示自己的代碼,對(duì)討論的后的安排工作大家開始搶著做,一度出現(xiàn)了預(yù)約下一次任務(wù)的場(chǎng)景。雖然大家做任務(wù)的水平參差不齊,但是還是本著大家自愿保留大家成果的原則經(jīng)行每一次的小組匯報(bào)。這樣可能每次報(bào)告不是最好的,但是極大的調(diào)動(dòng)了大家的積極性,這樣大家的收獲肯定是最高的。
轉(zhuǎn)載于:https://www.cnblogs.com/XDJjy/archive/2013/06/05/3119467.html
總結(jié)
- 上一篇: 公司旅游--金华武义二日游
- 下一篇: android开机优化-framewor