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