姓名:***
學號:***
任課教師:***
實驗一第1章.線性方程組的數值實驗第一題
一、問題
對從2到9的每乙個n值,解n階方程組 。在這裡和如下定義
,其中解釋發生的現象。
2、實驗原理
gauss消去法:
設矩陣,向量,把方程組寫成
(1)順序消去過程
假設,令
做運算將變換為
=,其中
這樣就得到與等價的方程組.其中第一行與第一行相同,而其第一列對角線以下元素已經消為0。
假設有≠0,k=1,2,…,n-1,則經n-1步消元後得到
[|]=
對應等價方程組=。
由於上述初等變換係數矩陣行列式的值不變,有,所以。
(2)回代過程
解=從最後乙個方程開始,用逐次向後代入的方法,這稱為「回代過程」,計算公式是:
,如上述過程,由順序消去過程和回代過程合起來解方程組ax=b的方法,就是gauss消去法。
三、實驗步驟
1、 定義題目中的函式p(x);
2、 按照題目要求初始化係數矩陣;
3、 實現gauss消去法順序消元過程;
4、 實現gauss消去法回代過程;
5、 輸出不同的n值的情況下得到的線性方程組的解向量;
6、在求出乙個解後,設,令,輸出向量 ,可以觀察從2到9的每乙個n值,用gauss消去法解方程的誤差。
四、資料流向圖
五.模組關係圖
六.符號引用表
7.源程式**
#include
#include
#include
using namespace std;
#include
#define n 9 // 矩陣的最大階數
double p(double x, int n定義p(x)
double z1 = 14+n*(12+3*n);
double z2 = -7+(n*n)*z1;
double z3 = 2+x*x*z2;
double z4 = x*x/24*z3;
return z4;
}double a[n+1][n+1係數矩陣a
double b[n+1常數b
double c[n+1][n+1解x
double d[n+1];
double x[n+1];
double y[n+1];
void matrix(int n對於不同的值,初始化係數矩陣
}}void gauss(int n高斯消去法
}}void reback(int n回代求解x
cout<<"當n="< cout< for(i=1;i<=n;i++)
cout<<<}
void wucha(int n誤差 y陣列用於存放解的誤差
; for(i=1;i<=n;i++)
y[i]-=d[i];
}cout<<"當n="< cout< for(i=1;i<=n;i++)
cout<<<}
void main()
system("pause");
}八.程式執行截圖
九.實驗結果分析
由所得的結果可以看出,自5階之後,解向量變化較大,甚至符號也會發
生變化。具體值更是變化甚大,可是找不到規律。
從實驗原理中我們可以看到gauss消去法中消去和回代過程能夠實現的條件是≠0(k=1,2,…,n).但這不是容易預先檢驗的條件。該程式具有侷限性,不能充分反映n從2到9時發生變化的現象。
在本題目中我們也只能確定k=1時條件成立,但經變換後的情況就不得而知了。我們也可以實現列主元或者全主元消去法。
實驗二. 第三章非線性方程求解數值實驗第三題
1.問題
選取乙個函式,證明數值驗證迭代公式
n=0, 1, ...
在單根處是立方收斂的,但在多重根處則是線性收斂的。
2.實驗原理
(1)為了求解方程的根。設已有乙個近似值,如果存在且連續,由展開式得
其中在和之間。因為,如果,可得
如果把上式右端含的項略去,剩下的兩項就作為新的乙個近似值,記為,即
這就是,又稱。
(2) 設序列收斂到, 記誤差。
若存在實數及非零實數,使 , 則稱為階收斂,
為漸進誤差常數。
(3) 對於一般的方程,如果,,且有,其中為正整數,函式滿足,則稱是的
重零點。
(4).迭代公式
我們選取 ,
3.資料流向圖
4.模組關係圖
改變x(0)的值
5.符號引用表
6.源程式**
#include
#include
#define n 15n為最大迭代次數
using namespace std;
double f0(double x定義函式y=x*x*x*x-10*x*x+25,在主函式中對其進行迭代,根號5是其二重根
double f1(double x)
double f2(double x)
double f(double x)
long double g0(long double x定義函式y=sin(x),在主函式中對其進行迭代,3.141592653是其單重根
long double g1(long double x)
long double g2(long double x)
long double g(long double x)
void newtondiedai(long double a,long double b,long double a[n+1],long double b[n+1],long double c[n+1],long double d[n+1]) //迭代過程
}void main()
{ long double a[n+1],b[n+1],c[n+1],d[n+1分別存放兩個函式各次的迭代值、迭代誤差
cout<<"接下來對 f(x)=x*x*x*x-10*x*x+25 進行迭代"< 數學與計算科學學院 實驗報告 實驗專案名稱迭代法求線性方程組 所屬課程名稱數值方法a 實驗型別驗證型 實驗日期2011.11.03 班級學號 姓名成績 附錄1 源程式 附錄2 實驗報告填寫說明 1 實驗專案名稱 要求與實驗教學大綱一致。2 實驗目的 目的要明確,要抓住重點,符合實驗教學大綱要求。3 ... 實驗一題目一 已知函式表如下 試用三次lagrange插值多項式求x 0.5635時的函式值。解 lagrange插值法公式 程式框圖如下 本題中n 4 分析設計思想 設計思路如上面的流程圖所示,用我們學過的c語言程式設計實現。程式清單 include include include float l... 數值分析 課程設計實驗報告模板 常微分方程資料值解 用龍格 庫塔法分析lorenz方程的特性 一 考慮著名的lorenz方程 其中s,r,b為變化區域內有一定限制的實引數,該方程形式簡單,表面上看並無驚人之處,但由該方程揭示出的許多現象,促使 混沌 成為數學研究的嶄新領域,在實際應用中產生了巨大的影...數值分析上機報告
數值分析實驗報告
數值分析實驗報告