《線性方程組地直接解法實驗報告材料》由會員分享,可在線閱讀,更多相關(guān)《線性方程組地直接解法實驗報告材料(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word
本科實驗報告
課程名稱:數(shù)值計算方法B
實驗項目:線性方程組的直接解法
最小二乘擬合多項式
實驗地點:ZSA401
專業(yè)班級:學(xué)號:201000
學(xué)生:
指導(dǎo)教師:志
2012年4月13日
線性方程組的直接解法
一、實驗?zāi)康暮鸵?
實驗?zāi)康模汉侠砝肎auss消元法、LU分解法或追趕法求解方程組。
實驗要求:利用高斯消元法,LU分解法或追趕法進展編程,求解題中所給的方程組。
二、實驗容和原理
實驗容:合理利用Gauss消元法、LU分解法或追趕法
2、求解如下方程組:
①
②
③〔n=5,10,100,…〕
實驗原理:這個實驗我選用的是高斯消元法。高斯消元法:先按照
Lik=aik^(k-1)/akk^(k-1) ,
aij^(k)=aij^(k-1)-likakj^(k-1)
[其中k=1,2,…,n-1;i=k+1,k+2,…,n;j=k+1,k+2,…,n+1]
將方程組變?yōu)樯先蔷仃?,再?jīng)過回代,即可求解出方程組的解。
三.計算公式
通過消元、再回代的求解方法稱為高斯消元法。特點是始終消去主對角線
下方的元素。
四、操作方法與實驗步驟
#include "Stdio.h"
#defi
3、ne N 3
main()
{
double a[N][N+1],b[N];
int i,j,k,x=0;
for(i=0;i=0;j--)
{
a[i+1][j]=a[i+1][j]-a[x][j]*a[i+1][x]/a[x][x];
}
}
x++;
}
4、
for(i=0;i
5、
}
五、實驗數(shù)據(jù)記錄和處理
實驗結(jié)果:
六、實驗結(jié)果與分析
大體來說,實現(xiàn)了課程設(shè)計的算法要求與功能,有很多還不能很好的處理的問題,需要我們在改良中不斷完善。做本次實驗中有些地方有困難,就是獲得數(shù)組中各元素的值,要用到for循環(huán)來輸入各個元素的值。還有就是將方程組化為上三角矩陣,也要用到好幾個for循環(huán),比擬容易出錯。
七、討論、心得
做實驗要求我們把根底學(xué)扎實,上機實驗讓我又重新鞏固了C語言知識。
我的實驗是線性方程組的直接解法,剛開始調(diào)試代碼的時候有時候就是很小的錯誤導(dǎo)致整個程序不能運行,需要我們一步一步慢慢來,經(jīng)過無數(shù)次的檢查程序錯誤的原因,以
6、與在教師的幫助下,完成了這次實驗。
最小二乘擬合多項式
一、實驗容
給定數(shù)據(jù)點〔xi ,yi〕,用最小二乘法擬合數(shù)據(jù)的多項式,并求平方誤差。
xi
0
yi
1
二、 計算公式
y=a0+a1x
三、 結(jié)構(gòu)程序設(shè)計
//最小二乘法擬合
//本程序包含兩個函數(shù),主函數(shù)與Gauss消元函數(shù)
#include
#include
#define N 10
#define M 20
double A[N][N+1];
7、
void Gauss_eliminate(int n,double* answer){
int k,i,j,sum;
/*消元重構(gòu)矩陣使之成為上三角矩陣*/
for(k=1;k
8、r(j=1;j=1;i--){
sum=0;
for(j=i+1;j<=n;j++) sum+=A[i][j]*answer[j];
answer[i]=(A[i][n+1]-sum)/A[i][i];
}
}
void main(){
int k;
printf("請輸入擬合次數(shù):\n");
scanf("%d",&k);
9、 int n=k+1;
int m,i,j;
double sum[M];
double x[M],y[M];
printf("請輸入散點的個數(shù):");
scanf("%d",&m);
printf("請創(chuàng)建數(shù)組x:\n");
for(i=0;i
10、++) sum[i]=0; //初始化
for(i=0;i<2*k+1;i++)
for(j=0;j
11、 for(j=i+1,count=1;j<=n;j++){
A[i][j]=sum[2*(i-1)+count];
count++;
}
}
for(i=2;i<=n;i++) //通過對稱建立下三角
for(j=1;j
12、\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n+1;j++)
printf("%lf\t",A[i][j]);
printf("\n");
}
double answer[N];
Gauss_eliminate(n,answer);
/*輸出解*/
for(i=1;i<=n;i++)
printf("a[%d]=%lf\t",i-1,answer[i])
13、;
getchar();
getchar();
}
四、 實驗結(jié)果與討論、心得
討論、心得:
剛開始調(diào)試代碼的時候有時候就是很小的錯誤導(dǎo)致整個程序不能運行,需要我們一步一步慢慢來,經(jīng)過無數(shù)次的檢查程序錯誤的原因,以與在教師的幫助下,完成了這次實驗。
這段時間的實驗課提高了我的分析問題,解決問題的能力,特別提高了對一個程序的整體操作能力,對程序的細(xì)微之處有了明顯的提高認(rèn)識的地方,追求最實用的程序,彌補學(xué)習(xí)上的不足,同時認(rèn)識到還應(yīng)深入理解課本上的知識,學(xué)過的東西要知道理論與實踐相結(jié)合,增加動手能力。
8 / 8