实验二 线性方程组的数值解法

2019-01-27 13:17

实验二 线性方程组的数值解法 (一)利用矩阵LU分解求解线性方程组

2.1 实验目的

①掌握利用矩阵LU分解求解线性方程组的解的基本思路和步骤; ②培养编程与上机调试能力。 2.2 算法描述

2.2.1 矩阵LU分解求解线性方程组的基本思路

?LU, 则Ax?b若A

(LU)x?bLy?b (下三角方程组)Ux?y (上三角方程组)

这样就将一般的线性方程组化简为三角方程组,从而简化了线性方程组的求

解过程。

2.2.2 矩阵LU分解求解线性方程组的计算步骤 步骤1: 利用矩阵LU分解得到矩阵L和U 步骤2: 求解三角方程组 2.3 实验内容

用矩阵LU分解求解如下线性方程组:

?123??x1??1??223??x???2? ???2?????333????x3????3??2.4 程序源代码

void shuru (n,a)

int n;

float a[5][6]; {int i,j; float b;

printf(\ for (i=0;i<=n-1;i++) {for (j=0;j<=n;j++) {scanf(\ printf(\ a[i][j]=b; }

printf(\ } }

void LUfenjie(n,a)

int n;

float a[5][6]; {int i,j,k;

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

a[i][0]=a[i][0]/a[0][0]; for(j=1;j<=n;j++)

a[1][j]=a[1][j]-a[1][0]*a[0][j]; for (i=2;i<=n-1;i++) {for (j=1;j<=i-1;j++) {for (k=0;k<=j-1;k++)

a[i][j]=a[i][j]-a[1][k]*a[k][j]; a[i][j]=a[i][j]/a[j][j]; }

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

a[i][j]=a[i][j]-a[1][k]*a[k][j]; } }

void huidai(n,a) int n;

float a[5][6]; {int i,j;

a[n-1][n]=a[n-1][n]/a[n-1][n-1]; for(i=n-2;i>=0;i--)

{ for(j=n-1;j>=i+1;j--)

a[i][n]=a[i][n]-a[i][j]*a[j][n]; a[i][n]=a[i][n]/a[i][i]; } } main() {int i,n;

float a[5][6];

printf(\ scanf(\ printf(\ shuru(n,a); LUfenjie(n,a); huidai(n,a);

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

printf(\ printf(\ }

(二)高斯列主元消去法

2.1 实验目的

① 掌握高斯列主元消去法的基本思路和步骤; ② 培养编程与上机调试能力。 2.2 算法描述

2.2.1 高斯消去法基本思路。

设有方程组Ax?b,设A是可逆矩阵。高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵B??A?b?,将其中的A变换成一个上三角矩阵,然后求解这个三角形方程组。

2.2.2列主元高斯消去法计算步骤

将方程组用增广矩阵B??A?b???aij?n?(n?1)表示。

步骤1:消元过程,对k?1,2,?,n?1 (1) 选主元,找ik??k,k?1,?,n?使得

aik,k?maxaik

k?i?n(2) 如果aik,k?0,则矩阵A奇异,程序结束;否则执行(3)。

(3) 如果ik?k,则交换第k行与第ik行对应元素位置,akj?akij,

j?k,?,n?1。

(4) 消元,对i?k,?,n,计算lik?aik/akk,对j?k?1,?,n?1,计算

aij?aij?likakj.

步骤 2:回代过程:

(1) 若ann?0,则矩阵奇异,程序结束;否则执行(2)。

n??(2) xn?an,n?1/ann;对i?n?1,?,2,1,计算xi??ai,n?1??aijxj?/aii

j?i?1??2.3实验内容

2x1?x2?2x3?5解线性方程组 5x1?x2?x3?8

x1?3x2?4x3??42.4 程序源代码

#include #include\

void zhuyuan (k,n,a) int k,n;

float a[5][6];

{int t,i,j; float p,q;

p=fabs(a[k][k]); t=k;

for(i=k+1;i<=n;i++) if (fabs(a[i][k])>p) {p=fabs(a[i][k]>p); t=i; }

for(j=k;j<=n+1;j++) {q=a[k][j];

a[k][j]=a[t][j]; a[t][j]=q; } }

void shuru(n,a) int n;

float a[5][6]; {int i,j;

printf(\ for(i=0;i<=n+1;i++) {for(j=0;j<=n+1;j++)

{scanf(\ printf(\ }

printf(\ } }

void xiaoyuan (n,a) int n;

float a[5][6]; {int k,i,j;

for(k=0;k

a[i][j]=a[i][j]-a[i][k]*a[k][j]/a[k][k]; } }

void huidai(n,a,x) int n;

float a[5][6],x[5]; {int k,j;

x[n]=a[n][n+1]/a[n][n];

for (k=n+1;k>=0;k--) {x[k]=a[k][n+1]; for(j=k+1;j<=n;j++)

x[k]=x[k]-a[k][j]*x[j]; x[k]=x[k]/a[k][k];

} }

main() {int n,i;

float a[5][6],x[5]; printf(\ scanf(\ printf(\ n=n-1;

shuru(n,a); xiaoyuan(n,a); huidai(n,a,x); for(i=0;i<=n;i++)

printf(\ printf(\ }


实验二 线性方程组的数值解法.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:全球及中国玻璃餐具市场调查研究与发展趋势预测报告目录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: