線性方程組數(shù)值解法.doc_第1頁(yè)
線性方程組數(shù)值解法.doc_第2頁(yè)
線性方程組數(shù)值解法.doc_第3頁(yè)
線性方程組數(shù)值解法.doc_第4頁(yè)
線性方程組數(shù)值解法.doc_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算方法實(shí)驗(yàn)題目:班級(jí):學(xué)號(hào):姓名:18計(jì)算方法與實(shí)習(xí)實(shí)驗(yàn)報(bào)告目錄計(jì)算方法實(shí)驗(yàn)11 實(shí)驗(yàn)?zāi)康?2 實(shí)驗(yàn)步驟32.1環(huán)境配置:32.2添加頭文件32.3主要模塊33 代碼43.1主程序部分43.2多項(xiàng)式方程部分43.3核心算法部分83.4數(shù)據(jù)結(jié)構(gòu)部分124運(yùn)行結(jié)果144.1列主元高斯消去法運(yùn)行結(jié)果144.2LU三角分解法運(yùn)行結(jié)果154.3雅克比迭代法運(yùn)行結(jié)果16邊界情況調(diào)試165總結(jié)18輸入輸出18列主元高斯消元法18雅克比迭代法186參考資料181 實(shí)驗(yàn)?zāi)康?. 通過(guò)編程加深對(duì)列主元高斯消去法、LU三角分解法和雅克比迭代法等求解多項(xiàng)式方程方法的理解2. 觀察上述三種方法的計(jì)算穩(wěn)定性和求解精度并比較各種方法利弊2 實(shí)驗(yàn)步驟2.1環(huán)境配置:VS2013,C+控制臺(tái)程序2.2添加頭文件#include stdio.h#include stdlib.h#include stdafx.h#include2.3主要模塊程序一共分成三層,最底層是數(shù)據(jù)結(jié)構(gòu)部分,負(fù)責(zé)存儲(chǔ)數(shù)據(jù),第二層是交互部分,即多項(xiàng)式方程部分,負(fù)責(zé)輸入輸出獲得數(shù)據(jù),最上層是核心的算法部分,負(fù)責(zé)處理已獲得的數(shù)據(jù)。具體功能如下:l 數(shù)據(jù)結(jié)構(gòu)部分?jǐn)?shù)據(jù)結(jié)構(gòu)部分是整個(gè)程序的最底層,負(fù)責(zé)存儲(chǔ)部分。因數(shù)組作為數(shù)據(jù)元素插入和刪除操作較少,而順序表空間利用率大且查看方便,故此程序選用二維順序表保存系數(shù)。數(shù)據(jù)結(jié)構(gòu)文件中寫(xiě)的是有關(guān)其的所有基本操作以供其他文件調(diào)用。l 多項(xiàng)式方程部分多項(xiàng)式方程部分是程序的第二層,內(nèi)容是有關(guān)方程組的所有函數(shù)、構(gòu)建方程、輸出方程等等,同時(shí)在此文件中獲得方程系數(shù)并儲(chǔ)存,同時(shí)此文件還負(fù)責(zé)顯示菜單部分。l 算法部分此文件負(fù)責(zé)核心算法,處于整個(gè)程序最上層部分,負(fù)責(zé)列主元高斯消去法、LU三角分解法和雅克比迭代法的具體實(shí)現(xiàn)過(guò)程。通過(guò)調(diào)用方程文件的函數(shù),將獲得的數(shù)據(jù)進(jìn)行處理運(yùn)算,可以得到結(jié)果返回給方程主函數(shù)和輸出的第二層。總結(jié):主函數(shù)負(fù)責(zé)獲取方程系數(shù)并顯示,算法和方程作為后臺(tái)程序,順序表作為存儲(chǔ)手段。3 代碼3.1主程序部分/ Solutionoflinearquations.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#include stdio.h#include stdlib.h#include stdafx.h#include squencelist.h#include equation.h#include algorithm.h#includeint _tmain(int argc, _TCHAR* argv)while (Exflag)GetEquation();ShowMenu();return 0;3.2多項(xiàng)式方程部分l 方程部分頭文件#ifndef _EQUATION_H#define _EQUATION_H#include stdio.h#include stdlib.h#include squencelist.hextern int Xnumbers;extern int Fnumber;extern int Exflag;extern datacoa *A;void GetEquation(void);void ShowMenu(void);void printfunction(datacoa *A);void printresx(datacoa *A);void Tip(void);#endifl 方程部分CPP文件#include stdafx.h#include equation.h#include math.h#include algorithm.h#include stdio.h#include stdlib.h#include#include using namespace std;/全局變量int Xnumbers = 0;int Fnumber = 0;int Exflag = 1;datacoa *A;/多項(xiàng)式函數(shù)系數(shù)/void GetEquation(void)int i, j,flag=1;float x;A = InitStruct();while (flag)cout 方程未知量和解總個(gè)數(shù): Xnumbers;cout 方程個(gè)數(shù): Fnumber;cout 輸入方程系數(shù),輸入00結(jié)束(如輸入 2 1 5 或者2 1 5 3 4 1 00 endl;cout 3 4 1 00 ): x;while (x != 00)for (i = 1; i = Fnumber; i+)for (j = 1; j x;j = 1;printfunction(A);if (Xnumbers = Fnumber+1)flag = 0;elsecout 方程可能無(wú)解 m = 0;A-n = 0;/顯示交互/void ShowMenu(void)int x;cout 選擇求解方程根的方法: endl;cout 1.列主元高斯消去法 endl;cout 2.三角分解法 endl;cout 3.迭代法 x;switch (x)case 1:ColumnGaussmethod(A);Tip();break;case 2:LUmethod(A);Tip();break;case 3:ISODATAmethod(A);Tip();break;default:break;/打印輸出函數(shù)/void printfunction(datacoa *A)int i,j;cout 矩陣= endl;for (i = 1; i m; i+)for (j = 1; j n; j+)cout setw(12)dataij;cout endl;/打印結(jié)果/void printresx(datacoa *A)int i;for (i = 1; i m; i+)cout X i = setw(12) dataiXnumbers+1;cout endl;/返回提示/void Tip(void)int flag;cout 輸入000退出,其余返回: flag;if (flag = 000)Exflag = 0;3.3核心算法部分l 算法部分頭文件#ifndef _ALGORITHM_H#define _ALGORITHM_H#include stdio.h#include stdlib.h#include stdafx.hint Judge(double x1, double x0, double e);void ColumnGaussmethod(datacoa *A);void LUmethod(datacoa *A);void ISODATAmethod(datacoa *A);#endif l 算法部分CPP文件#include algorithm.h#include stdafx.h#include squencelist.h#include equation.h#define max 100/誤差判別/inline int Judge(double x1, double x0, double e)if (e = 0)return 0;if (x1 = 0)if (fabs(x0) e)return 1;else return 0;if (x0 = 0)if (fabs(x1) e)return 1;else return 0;if (fabs(x1 - x0) e)return 1;else return 0;/列主元高斯消元法/void ColumnGaussmethod(datacoa *A)cout /列主元高斯消元法/ endl;int i, j, i2, flagc, k, j2;float temp, res;for (i = 1; i Fnumber; i+)flagc = i;for (i2 = i + 1; i2 datai2i)(fabs(A-dataflagci)flagc = i2;if (flagc != i)for (k = i; k dataik;A-dataik = A-dataflagck;A-dataflagck = temp;for (i2 = i + 1; i2 datai2i/A-dataii;for (j2 = i; j2 datai2j2 = A-datai2j2 - temp*A-dataij2;for (i = Fnumber; i = 1; i-)for (j = Fnumber; j = i + 1; j-)A-dataiXnumbers = A-dataiXnumbers - A-dataij*A-datajXnumbers + 1;res = A-dataiXnumbers / A-dataii;Insert(A, res, i, Xnumbers+1);printresx(A);/直接三角分解法/void LUmethod(datacoa *A)datacoa *L, *U;int i, j, k,q;float temp=0.0;L = InitStruct();U = InitStruct();for (i = 1; i = Fnumber; i+)for (j = 1; j = Xnumbers; j+)Insert(L, 0, i, j);Insert(U, 0, i, j);for (j = 1; j data1j, 1, j);for (i = 2; i datai1 / A-data11, i, 1);for (k = 2; k = Fnumber; k+)for (j = k; j = Xnumbers; j+)for (q = 1; q datakq * U-dataqj;Insert(U, A-datakj - temp, k, j);temp = 0;for (i = k + 1; i = Fnumber; i+)for (q = 1; q dataiq * U-dataqk;temp = A-dataik - temp;Insert(L, temp / U-datakk, i, k);temp = 0;Insert(U, U-dataFnumberXnumbers / U-dataFnumberXnumbers - 1, Fnumber, Xnumbers + 1);for (k = Fnumber - 1; k = 1; k-)for (q = k + 1; q datakq * U-dataqXnumbers + 1;temp = U-datakXnumbers - temp;Insert(U, temp / U-datakk, k, Xnumbers + 1);temp = 0;printresx(U);/迭代法/void ISODATAmethod(datacoa *A)int i=1, j, k=0;float x0 = 0, x1 = 1, temp = 0;for (i = 1; i = Fnumber; i+)Insert(A, 0, i, Xnumbers + 1);while (1)for (i = 1; i = Fnumber; i+)for (j = 1; j dataij * A-datajXnumbers + 1;temp = A-dataiXnumbers - temp;temp = temp / A-dataii;Insert(A, A-dataiXnumbers + 1, i, Xnumbers + 2);Insert(A, temp, i, Xnumbers + 1);temp = 0;k+;for (i = 1; i dataiXnumbers + 1 - A-dataiXnumbers + 2);if (temp max)break;temp = 0;DeleteLie(A, Xnumbers + 2);printfunction(A);cout endl;printresx(A);cout k endl;3.4數(shù)據(jù)結(jié)構(gòu)部分l 數(shù)據(jù)結(jié)構(gòu)頭文件#ifndef _SQUENCELIST_H#define _SQUENCELIST_H#include stdio.h#include stdlib.h#include stdafx.h#includeusing namespace std;#define maxsize 1024/*sequenlist*/typedef float datatype;typedef structdatatype datamaxsizemaxsize;int m, n;datacoa;datacoa *InitStruct();int Length(datacoa*);int Insert(datacoa*, datatype, int ,int);void DeleteLie(datacoa*L, int j);void DeleteLine(datacoa*L, int i);#endifl 數(shù)據(jù)結(jié)構(gòu)CPP文件#include stdafx.h#include squencelist.h/數(shù)據(jù)結(jié)構(gòu)部分/sequenlist/datacoa *InitStruct()datacoa*L = (datacoa*)malloc(sizeof(datacoa);L-m = 0;L-n = 0;return L;/datacoa*L = new datacoa;int Length(datacoa*L)return L-m*L-n;int Insert(datacoa*L, datatype x, int i,int j)int k;if (L-m = maxsize - 1) | (L-n = maxsize - 1)cout 表已滿(mǎn) n; k = j; k-)L-dataik + 1 = L-dataik;L-dat

溫馨提示

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

評(píng)論

0/150

提交評(píng)論