计算方法实验指导书.docx

上传人:b****1 文档编号:2618641 上传时间:2023-05-04 格式:DOCX 页数:11 大小:97.84KB
下载 相关 举报
计算方法实验指导书.docx_第1页
第1页 / 共11页
计算方法实验指导书.docx_第2页
第2页 / 共11页
计算方法实验指导书.docx_第3页
第3页 / 共11页
计算方法实验指导书.docx_第4页
第4页 / 共11页
计算方法实验指导书.docx_第5页
第5页 / 共11页
计算方法实验指导书.docx_第6页
第6页 / 共11页
计算方法实验指导书.docx_第7页
第7页 / 共11页
计算方法实验指导书.docx_第8页
第8页 / 共11页
计算方法实验指导书.docx_第9页
第9页 / 共11页
计算方法实验指导书.docx_第10页
第10页 / 共11页
计算方法实验指导书.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算方法实验指导书.docx

《计算方法实验指导书.docx》由会员分享,可在线阅读,更多相关《计算方法实验指导书.docx(11页珍藏版)》请在冰点文库上搜索。

计算方法实验指导书.docx

计算方法实验指导书

 

《计算方法》实验指导书

 

自动化学院

自动化实验室

实验一全选主元高斯消去法求解线性方程组

一、实验目的:

用全选主元高斯消去法求解n阶线性方程组

其中

二、实验方法说明:

用全选主元高斯消去法分两步进行。

第一步:

消去过程

对于k从0开始,一直到n-2作以下三步:

从系数矩阵A的第k行、第k列开始的子阵中选取绝对值最大的元素,并将它交换到主元素的位置上。

归一化。

消去。

第二步:

回代过程

三、实验内容

已知4阶方程组的系数矩阵为

求该方程组的解。

实验二一般实矩阵的QR分解

一、实验目的:

用Gram-Schmidt正交化方法对n阶方阵A进行QR分解,其中:

二、实验方法说明:

若:

=

=

,…,

=

是n维空间中n个线性无关的相量,则有:

这时矩阵A可以分解为正交矩阵Q和上三角矩阵R的乘积。

其中:

三、实验内容

用Gram-Schmidt正交化方法对

进行QR分解。

参考程序:

1、全选主元高斯消去法求解线性方程组:

#include"stdlib.h"

#include"stdio.h"

#include"math.h"

intcagaus(a,b,n,x)

intn;

doublea[],b[],x[];

{int*js,l,k,i,j,is,p,q;

doubled,t;

js=malloc(n*sizeof(int));

l=1;

for(k=0;k<=n-2;k++)

{d=0.0;

for(i=k;i<=n-1;i++)

for(j=k;j<=n-1;j++)

{t=fabs(a[i*n+j]);

if(t>d){d=t;js[k]=j;is=i;}

}

if(d+1.0==1.0)l=0;

else

{if(js[k]!

=k)

for(i=0;i<=n-1;i++)

{p=i*n+k;q=i*n+js[k];

t=a[p];a[p]=a[q];a[q]=t;

}

if(is!

=k)

{for(j=k;j<=n-1;j++)

{p=k*n+j;q=is*n+j;

t=a[p];a[p]=a[q];a[q]=t;

}

t=b[k];b[k]=b[is];b[is]=t;

}

}

if(l==0)

{free(js);printf("fail\n");

return(0);

}

d=a[k*n+k];

for(j=k+1;j<=n-1;j++)

{p=k*n+j;a[p]=a[p]/d;}

b[k]=b[k]/d;

for(i=k+1;i<=n-1;i++)

{for(j=k+1;j<=n-1;j++)

{p=i*n+j;

a[p]=a[p]-a[i*n+k]*a[k*n+j];

}

b[i]=b[i]-a[i*n+k]*b[k];

}

}

d=a[(n-1)*n+n-1];

if(fabs(d)+1.0==1.0)

{free(js);printf("fail\n");

return(0);

}

x[n-1]=b[n-1]/d;

for(i=n-2;i>=0;i--)

{t=0.0;

for(j=i+1;j<=n-1;j++)

t=t+a[i*n+j]*x[j];

x[i]=b[i]-t;

}

js[n-1]=n-1;

for(k=n-1;k>=0;k--)

if(js[k]!

=k)

{t=x[k];x[k]=x[js[k]];x[js[k]]=t;}

free(js);

return

(1);

}

main()

{inti;

doublea[4][4]={{0.2368,0.2471,0.2568,1.2671},

{0.1968,0.2071,1.2168,0.2271},

{0.1581,1.1675,0.1768,0.1871},

{1.1161,0.1254,0.1397,0.1490}};

doublex[4],b[4]={1.8471,1.7471,1.6471,1.5471};

i=cagaus(a,b,4,x);

if(i!

=0)

for(i=0;i<=3;i++)

printf("x(%d)=%e\n",i,x[i]);

}

参数说明:

a----双精度实型二维数组,体积为

存放方程组的系数矩阵,在本函数中要被破坏。

b-----双精度实型一维数组,体积为

存放方程组右端的常数向量,在本函数中要被破坏。

n----整型变量。

方程的阶数。

x----双精度实型一维数组,体积为

返回方程组的解向量。

2、用Gram-Schmidt正交化法进行QR分解

#include"stdio.h"

#include"math.h"

voidschmidt(a,b,abj,n)

doublea[],b[],abj[];

intn;

{

inti,j,k;

double*bpm,*bp;

bp=malloc((n*n)*sizeof(double));

bpm=malloc(n*sizeof(double));

for(i=0;i<=n-1;i++)

{

for(j=0;j<=n-1;j++)

{bp[i*n+j]=a[n*i+j];

abj[i*n+j]=0.0;

}

bpm[i]=0.0;

}

for(i=0;i<=n-1;i++)

{bpm[0]=bpm[0]+bp[i*n]*bp[i*n];}

for(i=0;i<=n-1;i++)

{b[i*n]=bp[i*n]/sqrt(bpm[0]);}

for(i=1;i<=n-1;i++)

{

for(j=0;j<=i-1;j++)

{

for(k=0;k<=n-1;k++)

{abj[j*n+i]=a[k*n+i]*b[k*n+j]+abj[j*n+i];}

for(k=0;k<=n-1;k++)

{bp[k*n+i]=bp[k*n+i]-b[k*n+j]*abj[j*n+i];}

}

for(j=0;j<=n-1;j++)

{bpm[i]=bpm[i]+bp[j*n+i]*bp[j*n+i];}

for(j=0;j<=n-1;j++)

{b[j*n+i]=bp[j*n+i]/sqrt(bpm[i]);}

}

for(i=0;i<=n-1;i++)

{abj[i*n+i]=sqrt(bpm[i]);}

return;

}

main()

{inti,j,k;

doublea[3][3]={{0,1,1},{1,1,0},{1,0,1}},b[3][3],abj[3][3];

schmidt(a,b,abj,3);

printf("MatQis:

\n");

for(i=0;i<=2;i++)

{for(j=0;j<=2;j++)

{printf("%e",b[i][j]);}

printf("\n");

}

printf("\n");

printf("MatRis:

\n");

for(i=0;i<=2;i++)

{for(j=0;j<=2;j++)

{printf("%e",abj[i][j]);}

printf("\n");

}

}

参数说明:

a----双精度实型二维数组,体积为

存放A矩阵。

b----双精度实型二维数组,体积为

返回Q矩阵。

abj----双精度实型二维数组,体积为

返回R矩阵。

n----A的阶数。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2