




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、華北科技學院課程設計說明書華 北 科 技 學 院數(shù)值分析課程設計說明書班級: 計算B122 姓名: 韓雨 (201209014217) 設計題目: 非線性方程求根 設計時間: 2014.12.28 至 2015.01.04 指導教師: 張守成 評 語: _評閱成績: 評閱教師: 目 錄設計總說明1前 言2第1章 總體設計方案31.1 軟件結(jié)構(gòu)設計3第2章 算法分析及設計42.1二分法42.1.1二分法算法分析:42.1.2二分法算法設計:52.2迭代法52.2.1迭代法算法分析62.2.2迭代法算法設計72.3牛頓算法72.3.1牛頓算法分析82.3.2牛頓算法設計9第3章 軟件詳細設計103
2、.1主界面設計103.2功能設計103.2.1二分法的實現(xiàn)103.2.2迭代法的實現(xiàn)153.2.3牛頓法的實現(xiàn)183.2.4算法簡介功能設計23第4章 軟件測試244.1二分法的測試244.1.1 軟件計算244.2迭代法的測試254.2.1 軟件計算254.3牛頓法的測試264.3.1 軟件計算264.4測試結(jié)果26第5章 總結(jié)27參 考 文 獻28附 錄28-28-設計總說明非線性方程求根是對于特殊方程的一種求解工具,為解決生活中的一般現(xiàn)象而產(chǎn)生的。但求解中的數(shù)值計算非常的大,所以我們要使用計算機來編程實現(xiàn)。在此基礎上,前人們已經(jīng)對這樣的數(shù)學問題做了大量的研究,雖然取得了巨大的進步,但由于
3、當時的技術(shù)不發(fā)達,還要限制于人工的計算,這對及時性的大數(shù)據(jù)處理帶來了巨大的挑戰(zhàn)。到了21世紀,電子計算機的高速發(fā)展?jié)M足了這一方法用于現(xiàn)實解決問題。對次做出杰出貢獻的數(shù)學大師,如I.牛頓、L.歐拉、C.F.高斯等人在這個領(lǐng)域做出了各自的貢獻,并奠定了它的理論基礎。用數(shù)值積分的計算理論加以C+語言編寫程序來計算數(shù)值積分,不僅可以更好的掌握數(shù)值分析本身,還可以提高軟件開發(fā)的能力。把所學知識用于實際生活中是非常有必要的。好的數(shù)值分析軟件可以計算出給定函數(shù)的根,為解決現(xiàn)實問題提供了可能。因此,數(shù)值分析軟件的開發(fā)是非常實用及有必要的。關(guān)鍵詞: 二分法;迭代法;牛頓法;MFC 前 言本課程設計是在學習了數(shù)值
4、分析和C語言等有關(guān)課程后,通過實際的操作來熟悉數(shù)值分析和相關(guān)軟件的應用,培養(yǎng)獨立的完成對相關(guān)課題或者項目的分析能力、設計能力和調(diào)試能力。好的數(shù)值積分軟件可以方便的為我們求解出積分值。課程設計,著重培養(yǎng)的是學生的自學能力,以及獨立分析互聯(lián)網(wǎng)上和圖書館里的各種資料,用來豐富自己的知識并且提高對Matlab、VC+等軟件的實際操作能力。通過這次的課程設計,使我們對已經(jīng)學習過的數(shù)值分析課程的進一步的掌握,對知識進行最大程度的消化融匯。因此這次的課程設計對我們來說具有非常重要的作用:為以后學習工作做必要的準備和實踐,提高自身對數(shù)值分析的認識以及軟件開發(fā)的能力。第1章 總體設計方案1.1 軟件結(jié)構(gòu)設計二分
5、法求根發(fā)牛頓法求根法迭代法求根發(fā)非線性求根C版二分法C版牛頓法C版迭代法算法簡介主界面圖1.1.1 軟件功能結(jié)構(gòu)圖第2章 算法分析及設計2.1 二分法算法2.1.1二分法算法分析:給定精確度,用二分法求函數(shù)f(x)零點近似值的步驟如下:1 確定區(qū)間a,b,驗證f(a)·f(b)<0,給定精確度.2 求區(qū)間(a,b)的中點c. 3 計算f(c).(1) 若f(c)=0,則c就是函數(shù)的零點;(2) 若f(a)·f(c)<0,則令b=c;(3) 若f(c)·f(b)<0,則令a=c.(4) 判斷是否達到精確度:即若|a-b|<,則得到零點近似值a
6、(或b),否則重復2-4.2.1.2二分法算法設計:double CBinary:Bisection(double a,double b)UpdateData(true);m_display="二分次數(shù) 中點 函數(shù)值rn"double c,fc,fa=f(a),fb=f(b),fd=1000;int n=1;CString s;while(1)if(fa*fb>0) return 1000;c=(a+b)/2,fc=f(c);if(fabs(fc)<m_jing) break;else if(fa*fc<0) b=c;fb=fc;else a=c;fa=f
7、c;if(b-a<1e-6) break;s.Format("%6d",n);m_display+=s;s.Format("%lf",c);m_display=m_display+" "+s;if(fabs(fc)>0.1&&fd<fc) s.Format("%8.6f",fc*(1e-5);else s.Format("%8.6f",fc);m_display=m_display+" "+s+"rn"fd=fc;n+;f
8、c=f(c);s.Format("%6d",n);m_display+=s;s.Format("%lf",c);m_display=m_display+" "+s;/if(fabs(fc)>0.01) s.Format("%8.6f",fc*(1e-5);s.Format("%8.6f",fc);m_display=m_display+" "+s+"rn"m_cishu=n;UpdateData(false);return c;2.2迭代法2.2.1
9、迭代法算法分析對于給定的線性方程組x=Bx+f(這里的x、B、f同為矩陣,任意線性方程組都可以變換成此形式),用公式x(k+1)=Bx(k)+f(括號中為上標,代表迭代k次得到的x,初始時k=0)逐步帶入求近似解的方法稱為迭代法(或稱一階定常迭代法)。如果k趨向無窮大時limx(k)存在,記為x*,稱此迭代法收斂。顯然x*就是此方程組的解,否則稱為迭代法發(fā)散。2.2.2迭代法算法設計double CDiedai:f(double x)CString str,str1=str=m_gai;str.Format("%lf",x);str1.Replace("x&quo
10、t;,str); CCalculation calcu;calcu.m_bDegree=1;str=calcu.MainPro(str1);if(-1!=str.Find(" ")str.Delete(str.Find(" ");return atof(str);void CDiedai:OnOK() / TODO: Add extra validation hereUpdateData(true);double x1=m_chu,x2=x1+1;int count=0;CString s;m_diedai=""while(fabs(
11、x2-x1)>m_jing)x2=x1;x1=f(x1);m_diedai=m_diedai+"f("s.Format("%10.8f",x2);m_diedai=m_diedai+s+")="/if(fabs(x1/x2)>10&&fabs(x2)<0.01) x1*=1e-6;s.Format("%10.8f",x1);m_diedai=m_diedai+s+"rn"count+;if(count>10000|x1>1e6)m_diedai+=&
12、quot;迭代不收斂"break;m_count=count;s.Format("%8.6f",x1);m_jie=s;UpdateData(false);/CDialog:OnOK();BOOL CDiedai:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereUpdateData(true);m_jing=1e-6;UpdateData(false);return TRUE; 2.3牛頓法算法2.3.1牛頓算法分析設r是的根,選取作為r的初始近似值,過點做曲線的
13、切線L,L的方程為,求出L與x軸交點的橫坐標,稱x1為r的一次近似值。過點做曲線的切線,并求該切線與x軸交點的橫坐,稱為r的二次近似值。重復以上過程,得r的近似值序列,其中,稱為r的次近似值,上式稱為牛頓迭代公式。用牛頓迭代法解非線性方程,是把非線性方程線性化的一種近似方法。把在點的某鄰域內(nèi)展開成泰勒級數(shù),取其線性部分(即泰勒展開的前兩項),并令其等于0,即,以此作為非線性方程的近似方程,若,則其解為, 這樣,得到牛頓迭代法的一個迭代關(guān)系式:。2.3.2牛頓算法設計double CNiuton:f(double x)CString str,str1=str=m_shi;str.Format(&
14、quot;%lf",x);str1.Replace("x",str); CCalculation calcu;calcu.m_bDegree=1;str=calcu.MainPro(str1);if(-1!=str.Find(" ")str.Delete(str.Find(" ");return atof(str);double CNiuton:qiudao(double x)double dx=0.1,d1,d2;/CString s;/m_display=""d1=(f(x+dx)-f(x)/dx;w
15、hile(1)d2=d1;dx*=0.5;d1=(f(x+dx)-f(x)/dx;if(dx<1e-6) break;if(fabs(d2-d1)<1e-6) break;return d2;double CNiuton:Newton(double x0)UpdateData(true);double x1,d=1;int k=0,count=0;m_display=""CString s;while(fabs(d)>=m_jing)x1=x0-f(x0)/qiudao(x0);if(k+>1000) break;d=(fabs(x1)<1?x
16、1-x0:(x1-x0)/x1);x0=x1;s.Format("%d",k);m_display=m_display+"x("+s+")="s.Format("%f",x0);m_display=m_display+s+"rn"count+;m_count=count;UpdateData(false);return x1;void CNiuton:OnOK() / TODO: Add extra validation hereUpdateData(true);double jie;CStri
17、ng s;jie=Newton(m_x);s.Format("%8.6f",jie);m_jie=s;UpdateData(false);BOOL CNiuton:OnInitDialog() CDialog:OnInitDialog();UpdateData(true);m_jing=1e-6;UpdateData(false);return TRUE; 第3章 軟件詳細設計3.1主界面設計3.2功能設計3.2.1二分法的實現(xiàn)通過類向?qū)榭丶x值,從界面獲取上下界以及精度值,從而進行計算,將結(jié)果顯示在對應框。若輸入錯誤的數(shù)據(jù)將進行錯誤提示。圖3.2.1 二分法代碼:#in
18、clude "stdafx.h"#include "qiugen.h"#include "Binary.h"#include "math.h"#include "Calculation.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCBinary:CBinary(CWnd* pParent /*=NULL*/): CDialog(CBinary:IDD, pPare
19、nt)/AFX_DATA_INIT(CBinary)m_shi = _T("");m_shang = 0.0;m_xia = 0.0;m_jing = 0.0;m_cishu = 0;m_display = _T("");m_jie = _T("");void CBinary:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_shi);DDX_Text(pDX, IDC_EDIT2, m_shang);DDX
20、_Text(pDX, IDC_EDIT3, m_xia);DDX_Text(pDX, IDC_EDIT4, m_jing);DDX_Text(pDX, IDC_EDIT6, m_cishu);DDX_Text(pDX, IDC_EDIT7, m_display);DDX_Text(pDX, IDC_EDIT5, m_jie);BEGIN_MESSAGE_MAP(CBinary, CDialog)END_MESSAGE_MAP()double CBinary:Bisection(double a,double b)UpdateData(true);m_display="二分次數(shù) 中點
21、函數(shù)值rn"double c,fc,fa=f(a),fb=f(b),fd=1000;int n=1;CString s;while(1)if(fa*fb>0) return 1000;c=(a+b)/2,fc=f(c);if(fabs(fc)<m_jing) break;else if(fa*fc<0) b=c;fb=fc;else a=c;fa=fc;if(b-a<1e-6) break;s.Format("%6d",n);m_display+=s;s.Format("%lf",c);m_display=m_displ
22、ay+" "+s;if(fabs(fc)>0.1&&fd<fc) s.Format("%8.6f",fc*(1e-5);else s.Format("%8.6f",fc);m_display=m_display+" "+s+"rn"fd=fc;n+;fc=f(c);s.Format("%6d",n);m_display+=s;s.Format("%lf",c);m_display=m_display+" "+
23、s;s.Format("%8.6f",fc);m_display=m_display+" "+s+"rn"m_cishu=n;UpdateData(false);return c;double CBinary:f(double x)CString str,str1=str=m_shi;str.Format("%lf",x);str1.Replace("x",str); CCalculation calcu;calcu.m_bDegree=1;str=calcu.MainPro(str1);if(
24、-1!=str.Find(" ")str.Delete(str.Find(" ");return atof(str);void CBinary:OnOK() UpdateData(true);double jie;CString s;jie=Bisection(m_xia,m_shang);if(jie=1000)m_jie="Error"m_display="錯誤!rn在您指定的區(qū)間內(nèi)沒有根或者有多個根!rn請重新調(diào)整區(qū)間!"m_cishu=0;elses.Format("%8.6f",jie
25、);m_jie=s;UpdateData(false);BOOL CBinary:OnInitDialog() CDialog:OnInitDialog();UpdateData(true);m_jing=1e-6;UpdateData(false);return TRUE; 3.2.2迭代法的實現(xiàn)圖3.2.4 迭代法代碼:#include "stdafx.h"#include "qiugen.h"#include "Diedai.h"#include "math.h"#include "Calculat
26、ion.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCDiedai:CDiedai(CWnd* pParent /*=NULL*/): CDialog(CDiedai:IDD, pParent)/AFX_DATA_INIT(CDiedai)m_yuan = _T("");m_gai = _T("");m_chu = 0.0;m_jing = 0.0;m_diedai = _T("");m_co
27、unt = 0;m_jie = _T("");void CDiedai:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_yuan);DDX_Text(pDX, IDC_EDIT2, m_gai);DDX_Text(pDX, IDC_EDIT3, m_chu);DDX_Text(pDX, IDC_EDIT4, m_jing);DDX_Text(pDX, IDC_EDIT5, m_diedai);DDX_Text(pDX, IDC_EDIT6, m_
28、count);DDX_Text(pDX, IDC_EDIT7, m_jie);BEGIN_MESSAGE_MAP(CDiedai, CDialog)END_MESSAGE_MAP()double CDiedai:f(double x)CString str,str1=str=m_gai;str.Format("%lf",x);str1.Replace("x",str); CCalculation calcu;calcu.m_bDegree=1;str=calcu.MainPro(str1);if(-1!=str.Find(" ")st
29、r.Delete(str.Find(" ");return atof(str);void CDiedai:OnOK() UpdateData(true);double x1=m_chu,x2=x1+1;int count=0;CString s;m_diedai=""while(fabs(x2-x1)>m_jing)x2=x1;x1=f(x1);m_diedai=m_diedai+"f("s.Format("%10.8f",x2);m_diedai=m_diedai+s+")="s.For
30、mat("%10.8f",x1);m_diedai=m_diedai+s+"rn"count+;if(count>10000|x1>1e6)m_diedai+="迭代不收斂"break;m_count=count;s.Format("%8.6f",x1);m_jie=s;UpdateData(false);BOOL CDiedai:OnInitDialog() CDialog:OnInitDialog();UpdateData(true);m_jing=1e-6;UpdateData(false);re
31、turn TRUE; 3.2.3牛頓法的實現(xiàn)同樣,通過類向?qū)榭丶x值 。單機計算按鈕,即可將結(jié)果顯示在結(jié)果框。圖3.2.6 牛頓法代碼:#include "stdafx.h"#include "qiugen.h"#include "Niuton.h"#include "Calculation.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#e
32、ndifCNiuton:CNiuton(CWnd* pParent /*=NULL*/): CDialog(CNiuton:IDD, pParent)m_shi = _T("");m_x = 0.0;m_jing = 0.0;m_display = _T("");m_jie = _T("");m_count = 0;void CNiuton:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CNiuton)DDX_Text(pDX,
33、IDC_EDIT1, m_shi);DDX_Text(pDX, IDC_EDIT2, m_x);DDX_Text(pDX, IDC_EDIT3, m_jing);DDX_Text(pDX, IDC_EDIT5, m_display);DDX_Text(pDX, IDC_EDIT4, m_jie);DDX_Text(pDX, IDC_EDIT6, m_count);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CNiuton, CDialog)END_MESSAGE_MAP()/ CNiuton message handlersdouble CNiuton:f(double x)
34、CString str,str1=str=m_shi;str.Format("%lf",x);str1.Replace("x",str);CCalculation calcu;calcu.m_bDegree=1;str=calcu.MainPro(str1);if(-1!=str.Find(" ")str.Delete(str.Find(" ");return atof(str);double CNiuton:qiudao(double x)double dx=0.1,d1,d2;/CString s;/m_dis
35、play=""d1=(f(x+dx)-f(x)/dx;while(1)d2=d1;dx*=0.5;d1=(f(x+dx)-f(x)/dx;if(dx<1e-6) break;if(fabs(d2-d1)<1e-6) break;return d2;double CNiuton:Newton(double x0)UpdateData(true);double x1,d=1;int k=0,count=0;m_display=""CString s;while(fabs(d)>=m_jing)x1=x0-f(x0)/qiudao(x0);i
36、f(k+>1000) break;/MessageBox("aa");d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);/d=fabs(x1-x0);x0=x1;s.Format("%d",k);m_display=m_display+"x("+s+")="s.Format("%f",x0);m_display=m_display+s+"rn"count+;m_count=count;/if(count>1000) break;UpdateDa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生豬養(yǎng)殖與農(nóng)業(yè)產(chǎn)業(yè)扶貧合作協(xié)議
- 二零二五年度制造業(yè)工傷責任保險合同
- 2025年度男方道歉夫妻共同生活保證協(xié)議
- 2025年度飯店短期勞務合同-客房服務員職業(yè)健康與安全協(xié)議
- 二零二五年度物業(yè)公司員工勞動合同(含社區(qū)文化活動)
- 監(jiān)理技術(shù)服務合同
- 綠色數(shù)據(jù)中心建設運營合同
- 環(huán)境影響評估結(jié)果展示表
- 股份制企業(yè)股權(quán)分配與管理制度文書
- 財務與成本控制管理細則
- 2024年高考英語易錯題 閱讀理解:推理判斷題4大陷阱(教師版新高考專用)
- 醫(yī)院環(huán)境衛(wèi)生學監(jiān)測和院感控制課件
- 《力與形變》教學課件(一)
- 湖北省2024年村干部定向考試真題
- 部編版三年級語文下冊期中試卷及參考答案
- JT-T-1199.1-2018綠色交通設施評估技術(shù)要求第1部分:綠色公路
- 酒店能耗分析報告
- 桃花紅杏花紅混聲合唱簡譜
- DL-T995-2016繼電保護和電網(wǎng)安全自動裝置檢驗規(guī)程
- 2024年蘇州農(nóng)業(yè)職業(yè)技術(shù)學院單招職業(yè)適應性測試題庫含答案
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學院單招職業(yè)適應性測試題庫含答案
評論
0/150
提交評論