合肥工業(yè)大學 計算機專業(yè) 計算方法實驗報告材料
《合肥工業(yè)大學 計算機專業(yè) 計算方法實驗報告材料》由會員分享,可在線閱讀,更多相關《合肥工業(yè)大學 計算機專業(yè) 計算方法實驗報告材料(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word 工業(yè)大學 計算機與信息學院 實驗報告 課 程:計算方法 專業(yè)班級: 學 號: 姓 名: 33 / 33 Java界面 其實都不難按照程序流程圖就可以完成了 實驗一插值與擬合 一、 實驗目的 (1) 明確插值多項式和分段插值多項式各自的優(yōu)缺點; (2) 編程實現(xiàn)三次樣條插值算法,分析實驗結(jié)果體會高次插值產(chǎn)生的龍格現(xiàn)象; (3) 理解最小二乘擬合,并編程實現(xiàn)線性擬合,掌握非線性擬合轉(zhuǎn)化為線性擬合的方法 (4) 運用常用的插值和擬合方法
2、解決實際問題。 二、 實驗容 (1)對于f(x)=1/(1+x*x)實現(xiàn)三次樣條插值 (2)實現(xiàn)最小二乘法的直線擬合 數(shù)據(jù)如下: 165 123 150 123 141 187 126 172 125 148 三、 根本原理〔計算公式〕 (1)三次樣條插值在每個節(jié)點上具有2階導數(shù)。 (2) 最小二乘法擬合直線為y=a+bx,而a,b有如下等式〔N為給出的數(shù)據(jù)點的總個數(shù)〕 ; 四、算法設計與實現(xiàn)〔流程圖,關鍵點〕 最小二乘法直線擬合:輸入數(shù)據(jù)后,按照公式計算a,b。用得到的擬合直線計算預測點的近似函數(shù)值。 五、輸入與輸出
3、(1)三次樣條插值
輸入:區(qū)間長度,n+1個數(shù)據(jù)點,預測點
輸出:預測點的近似函數(shù)值,準確值,與誤差
(2)最小二乘法直線擬合
輸入:n個數(shù)據(jù)點,預測點
輸出:預測點的近似函數(shù)值
六、結(jié)果討論和分析
代碼
三次樣條插值
#include
4、 double v0(double x){ return x*(x-1)*(x-1); } double v1(double x){ return x*x*(x-1); } double s3(double x,double y,double y1,double m,double m1,double h){ return u0(x)*y+u1(x)*y1+h*v0(x)*m+h*v1(x)*m1; } double f(double x){ return 1/(1+x*x); } int main(){ ifstream fin;
5、
fin.open("E:\\t.txt");
if(!fin){
cout<<"error opening input stream"< 6、N;i++){
fin>>x[i]>>y[i];
}
fin>>f0>>fn;
h[0]=x[1]-x[0];
for(i=1;i 7、){
B[i]=2;
C[i]=a[i];
}
for(i=2;i 8、cout<<"please:(輸入插值節(jié)點在"< 9、i],h[i-1]);
cout<<"插值節(jié)點為"<
#include 10、0;
for(i=0;i 11、uble sum=0;
for(i=0;i 12、 }
double x[n],y[n],a,b;
double x0,y0;
int i;
for(i=0;i 13、合直線為y="<>x0){
y0=a+b*x0;
cout<<"當x="< 14、點加速;
(3) 理解并掌握自適應算法和收斂加速算法的根本思想;
(4) 分析實驗結(jié)果體會各種方法的準確度,建立計算機求解定積分問題的感性認識
二、 實驗容
(1) 用龍貝格算法計算
(2) 用中點加速方法計算的一階導數(shù)
三、 根本原理〔計算公式〕
(1)龍貝格算法
梯形遞推公式
加權平均公式:
(2) 中點加速
中點公式: G(h)=(f(a+h)-f(a-h))/2/h
加權平均:G1(h)=4*G(h/2)/3-G(h)/3
G2(h)=16*G1(h/2)/15-G1(h)/15
G3(h)=64*G2(h/2)/63-G2(h)/63
四 15、、 算法設計與實現(xiàn)〔流程圖,關鍵點〕
中點加速梯形遞推算法流程圖
龍貝格算法流程圖
:輸入數(shù)據(jù)后根據(jù)公式計算導數(shù)值
五、輸入與輸出
(1) 用龍貝格算法計算
輸入:積分區(qū)間,誤差限
輸出:序列Tn,Sn,,Rn與積分結(jié)果
(2) 用中點加速方法計算的一階導數(shù)
輸入:求導節(jié)點,步長
輸出:求得的導數(shù)值,準確值
六、結(jié)果討論和分析
代碼
龍貝格算法
#include 16、 if(x==0)return 1;
return sin(x)/x;
}
int main(){
ifstream fin;
fin.open("E:\\t.txt");
if(!fin){
cout<<"error opening input stream"< 17、,r2;
double x,h,s;
fin>>a>>b>>e;
cout<<"積分區(qū)間為["<
18、o{
s=s+f(x);
x=x+h;
}while(x
19、c2< 20、"數(shù)值積分結(jié)果為"< 21、le x){
return exp(x);
}
double g(double x,double h){
return (f(x+h)-f(x-h))/2/h;
}
double g1(double x,double h){
return 4*g(x,h/2)/3-g(x,h)/3;
}
double g2(double x,double h){
return 16*g1(x,h/2)/15-g1(x,h)/15;
}
double g3(double x,d 22、ouble h){
return 64*g2(x,h/2)/63-g2(x,h)/63;
}
int main(){
ifstream fin;
fin.open("E:\\t.txt");
if(!fin){
cout<<"error opening input stream"< 23、>h)
cout<<"當x="<
24、結(jié)果體會初值對迭代的影響
二、 實驗容
用牛頓下山法解方程〔初值為0.6〕
三、 根本原理〔計算公式〕
求非線性方程組的解是科學計算常遇到的問題,有很多實際背景.各種算法層出不窮,其中迭代是主流算法。只有建立有效的迭代格式,迭代數(shù)列才可以收斂于所求的根。因此設計算法之前,對于一般迭代進展收斂性的判斷是至關重要的。牛頓法也叫切線法,是迭代算法中典型方法,只要初值選取適當,在單根附近,牛頓法收斂速度很快,初值對于牛頓迭代
至關重要。當初值選取不當可以采用牛頓下山算法進展糾正。
一般迭代:
牛頓公式:
牛頓下山公式:
下山因子
下山條件
四、算法設計與實現(xiàn)〔流程圖, 25、關鍵點〕
牛頓下山算法流程圖
五、輸入與輸出
輸入:初值,誤差限,迭代最大次數(shù),下山最大次數(shù)
輸出:近似根各步下山因子
六、結(jié)果討論和分析
代碼
牛頓下山法
#include 26、
int main(){
ifstream fin;
fin.open("E:\\t.txt" );
if(!fin){
cout << "Error opening input stream" << endl;
system("pause");
return 0;
}
double x0,x1,e,j,temp;
int N,M,k,i;
fin>>x0>>e>>M>>N;
cout<<"迭代初值為"< 27、e<<",最大下山次數(shù)為"< 28、
}while(fabs(f(x1))>=fabs(f(x0)));
if(i>=M){
cout<<"重新選擇x0"< 29、 x0=x1;
}
if(k>=N)cout<<"迭代失敗"< 30、爾迭代法求
(2) 列主元高斯消去法求
(3) LU分解法求解方程組
三、 根本原理〔計算公式〕
線性方程組大致分迭代法和直接法。只有收斂條件滿足時,才可以進展迭代。雅可比與高斯-塞德爾是最根本的兩類迭代方法,最大區(qū)別是迭代過程中是否引用新值進展剩下的計算。消元是最簡單的直接法,并且也十分有效的,列主元高斯消去法對求解一般的線性方程組都適用,同時可以用來求矩陣對應的行列式。約當消去實質(zhì)是經(jīng)過初等行變換將系數(shù)矩陣化為單位陣,主要用來求矩陣的逆。在使用直接法,要注意從空間、時間兩方面對算法進展優(yōu)化。
高斯-塞德爾迭代:
列主元高斯消去法:列主元
消元 回代
31、
四、算法設計與實現(xiàn)〔流程圖,關鍵點〕
列主元的高斯消去流程圖
G-S迭代算法流程圖
LU分解法:依次求得L、U、y和x
五、輸入與輸出
(1) 用高斯-塞德爾迭代法
輸入:系數(shù)矩陣A,最大迭代次數(shù)N,初始向量,誤差限e
輸出:解向量
(2) 列主元高斯消去法
輸入:系數(shù)矩陣A
輸出:解向量
(3) LU分解法
輸入:系數(shù)矩陣A
輸出:解向量
六、結(jié)果討論和分析
代碼
高斯塞德爾迭代
#include 32、include 33、<"*x"<< j<<"="<
34、,N;
fin>>e>>N;
for(i=1;i<=n;i++){
fin>>x[i];
y[i]=x[i];
}
cout<<"初始向量為:";
for(i=1;i 35、][j];
fin>>b[i];
}
show(a,b);
k=0;
while(true){
for(i=1;i<=n;i++){
temp=0;
for(j=1;j<=n;j++)
if(j!=i)temp=temp+a[i][j]*y[j];
y[i]=(b[i]-temp)/a[i][i];
}
max=fabs(y[1]-x[1]);
for(i=2;i<=n;i+ 36、+)
if(max 37、 k++;
for(i=1;i<=n;i++)x[i]=y[i];
}
}
fin.close();
system("pause");
return 0;
}
高斯消去
#include 38、dl;
for (i = 1; i <= n; i++) {
for (j = 1; j < n; j++)
if (a[i][j + 1] < 0)
cout<
39、"error opening input stream"< 40、show(a,b);
k=1;
do{
d=a[k][k];
l=k;
i=k+1;
do{
if(i>n)break;
if(fabs(a[i][k])>fabs(d)){
d=a[i][k];
41、 l=i;
}
if(i==n)break;
i++;
}while(true);
if(d==0){
cout<<"奇異"< 42、 system("pause");
fin.close();
return 0;
}
if(l!=k){
for(j=k;j<=n;j++){
t=a[l 43、][j];
a[l][j]=a[k][j];
a[k][j]=t;
}
t=b[k];
b[k]=b[l];
44、 b[l]=t;
}
for(j=k+1;j<=n;j++){
a[k][j]=a[k][j]/a[k][k];
}
b[k]=b[k]/a[k][k];
for(i=k+1;i<=n;i++){
45、 for(j=k+1;j<=n;j++){
a[i][j]=a[i][j]-a[i][k]*a[k][j];
}
}
for(i=k+1;i<=n;i++)b[i]=b[i]-a[i 46、][k]*b[k];
if(k==n)break;
k++;
}while(true);
for(i=n-1;i>=1;i--){
t=0;
for(j=i+1;j<=n;j++){
t=t+a[i][j]*b[j];
47、 }
b[i]=b[i]-t;
}
cout<<"列主元的高斯消去法求得原方程的解為:" ;
for(i=1;i<=n;i++)cout<<"x"<
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。