东北大学数值分析课题2实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告

东北大学

一、实验要求

1)建立矩阵求逆的算法公式

2)编制下三角部分消元,上三角部分消元和对角元单位化等子程序

3)应用结构程序设计编程出求n阶矩阵的逆矩阵的通用程序

二、实验目的与意义

1)通过该课题的实验,掌握求逆矩阵的程序设计方法

2)学会利用矩阵求逆运算求解线性方程组的方法,提高数值方法的运用和

编程的能力

三、实验环境

编译环境:Visual C++6.0。

编译语言:C++

四、实验过程与分析:

(1)求已知矩阵的逆:(以四阶为例)

#include

#include

#define N 4

int main()

{ float a[N][N];

float L[N][N],U[N][N],out[N][N], out1[N][N];

float r[N][N],u[N][N];

memset( a , 0 , sizeof(a));

memset( L , 0 , sizeof(L));

memset( U , 0 , sizeof(U));

memset( r , 0 , sizeof(r));

memset( u , 0 , sizeof(u));

int n=N;

int k,i,j;

int flag=1;

float s,t;

////////////////////input a matrix////

printf("\ninput A=");

for(i=0;i

for(j=0;j

scanf("%f",&a[i][j]);

//////////////////figure the input matrix//////////////////////////

printf("输入矩阵:\n");

for(i=0;i

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

printf("%lf ", a[i][j]);}

printf("\n");}

for(j=0;j

a[0][j]=a[0][j]; //计算U矩阵的第一行

for(i=1;i

a[i][0]=a[i][0]/a[0][0]; //计算L矩阵的第1列

for(k=1;k

for(j=k;j

s=0;

for (i=0;i

s=s+a[k][i]*a[i][j]; //累加

a[k][j]=a[k][j]-s; //计算U矩阵的其他元素}

for(i=k+1;i

t=0;

for(j=0;j

t=t+a[i][j]*a[j][k]; //累加

a[i][k]=(a[i][k]-t)/a[k][k]; //计算L矩阵的其他元素} }

for(i=0;i

for(j=0;j

if(i>j)

{ L[i][j]=a[i][j]; U[i][j]=0;}//如果i>j,说明行大于列,计算矩阵的下三角部分,得出L的值,U的//为0

else {

U[i][j]=a[i][j];

if(i==j) L[i][j]=1; //否则如果i

else L[i][j]=0; }

} if(U[1][1]*U[2][2]*U[3][3]*U[4][4]==0){

flag=0;

printf("\n逆矩阵不存在");}

if(flag==1){

/////////////////////求L和U矩阵的逆

for (i=0;i

{u[i][i]=1/U[i][i];//对角元素的值,直接取倒数

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

{s=0;

for (j=k+1;j<=i;j++)

s=s+U[k][j]*u[j][i];

u[k][i]=-s/U[k][k];//迭代计算,按列倒序依次得到每一个值,}}

for (i=0;i

{r[i][i]=1; //对角元素的值,直接取倒数,这里为1

for (k=i+1;k

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

r[k][i]=r[k][i]-L[k][j]*r[j][i]; //迭代计算,按列顺序依次得到每一个值}} /////////////////绘制矩阵LU分解后的L和U矩阵///////////////////////

printf("\nLU分解后L矩阵:");

for(i=0;i

{ printf("\n");

for(j=0;j

printf(" %lf",L[i][j]); }

printf("\nLU分解后U矩阵:");

for(i=0;i

{ printf("\n");

for(j=0;j

printf(" %lf",U[i][j]); }

printf("\n");

////////绘制L和U矩阵的逆矩阵

printf("\nL矩阵的逆矩阵:");

for(i=0;i

{ printf("\n");

for(j=0;j

printf(" %lf",r[i][j]); }

printf("\nU矩阵的逆矩阵:");

for(i=0;i

{ printf("\n");

for(j=0;j

printf(" %lf",u[i][j]); }

printf("\n");

//验证将L和U相乘,得到原矩阵

相关文档
最新文档