- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析高斯顺序消去法、列主元消去法LU分解法
数值分析实验报告(1)
学院:信息学院
班级:计算机0903班
姓名:王明强
学号课题一
A.问题提出
给定下列几个不同类型的线性方程组,请用适当的方法求解
线性方程组1、设线性方程组
=
x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )
2、设对称正定阵系数阵线方程组
=
x = ( 1, -1, 0, 2, 1, -1, 0, 2 )
3、三对角形线性方程组
=
x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )
B.(1)对上述三个方程组分别用Gauss顺序消去法与Gauss列主元消去法;平方根 与改进平方根法;追赶法求解(选择其一)
编写算法通用程序
在应用Gauss消去时,尽可能利用相应程序输出系数矩阵的三角分解式
C.
通过该课题的程序编制,掌握模块化结构程序设计方法
掌握求解各类线性方程组的直接方法,了解各种方法的特点
体会高斯消去法选主元的必要性
实验步骤:(高斯消去法,列主元,LU)
1顺序高斯消去法2.LU分解法3.列主元高斯消去法(如下图)
高斯消去法运行结果如下
对方程的系数矩阵进行LU分解并求出方程组的解
(3)列主元高斯消去法
实验体会总结:
利用gauss消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。
源程序如下:
#include iostream.h
#include math.h
#includewindows.h
#define MAX 20
int N;
double a[10][11]; //增广矩阵
void init()
{
int i,j;
int a1[10][11]=
{4,2,-3,-1,2,1,0,0,0,0,5,
8,6,-5,-3,6,5,0,1,0,0,12,
4,2,-2,-1,3,2,-1,0,3,1,3,
0,-2,1,5,-1,3,-1,1,9,4,2,
-4,2,6,-1,6,7,-3,3,2,3,3,
8,6,-8,5,7,17,2,6,-3,5,46,
0,2,-1,3,-4,2,5,3,0,1,13,
16,10,-11,-9,17,34,2,-1,2,2,38,
4,6,2,-7,13,9,2,0,12,4,19,
0,0,-1,8,-3,-24,-8,6,3,-1,-21};
N=10;
for(i=0;iN;i++)
{
for(j=0;j=N;j++)
a[i][j]=a1[i][j];
}
}
void GS(int N)
{
double x[20]; //存储解向量
double m; // 中间变量
int i, j, k;
//消元过程
for(k=0;kN-1;k++){ // kN-1 ?
if(a[k][k]==0) {
cout 求解失败!;
break;
}
for(i=k+1;iN;i++){
m = a[i][k] / a[k][k];
a[i][k] = 0;
for(j=k+1;j=N;j++) // j=N?
a[i][j] = a[i][j] - a[k][j] * m;
}
}
// 回代过程
x[N-1] = a[N-1][N] / a[N-1][N-1];
for(k=N-2;k=0;k--){
for(j=k+1;jN;j++){
a[k][N] = a[k][N] - a[k][j] * x[j];
}
x[k] = a[k][N] / a[k][k];
}
// 输出结果
for(k=0;kN;k++)
cout x[k]=x[k]endl;
}
void LU(int N)
{
int i,j,k;double x[20];
//****** 开始LU分解 *************
for(k=0;kN-1;k++)
{
if(a[k][k]==0)
{
cout 主元素为零! endl;
break;
}
for(i=k+1;iN;i++)
{
a[i][k] = a[i][k] / a[k][k]; // 矩阵A的严格下三角部分存储L矩阵的严格下三角部分
for(j=k+1;jN;j++)
{
a[i][j] = a[i
文档评论(0)