欢迎光临112期刊网!

数值分析与实验

日期:2023-01-24 阅读量:0 所属栏目:计算机应用


  论文关键词: 列主元高斯消去法 雅可比法 高斯-赛德尔迭代法 幂法

  论文摘要:本文通过实例对线性方程组数值解法和矩阵的特征值及特向量的计算进行了探讨。在对线性方程组数值解法的讨论下用到了列主元高斯消去法、雅可比法和高斯-赛德尔迭代法。正是高斯消去法在消元时存在一些必须的条件,才启发我们通过列主元高斯消去法来对线性方程组数值解法作进一步的研究,达到了很好的的效果。同时用雅可比法和高斯-赛德尔迭代法对相类似的问题的探讨来比较它们的优劣,使我们在分析问题时能更好的把握方法。在求矩阵按模最大的特征值及对应特征向量时,本文用到了幂法,可以使现实中很多复杂的计算简单。

  第一章:线性方程组数值解法

  实验目的

  熟悉求解线性方程组的有关理论和方法 ;会编制列主元消去法,雅可比及高斯-赛德尔迭代法的程序 ;通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。

  实验内容

  列主元高斯消去法求解线形方程组;

  雅可比法和高斯-赛德尔迭代法解方程组;

  1.1 题目:列主元高斯消去法求解线形方程组

  方程组为:

  1.1.1 列主元高斯消去法算法

  将方程用增广矩阵 表示

  1) 消元过程

  对k=1,2,….,n-1

  1 选主元,找 使得

  2 如果 则矩阵a奇异,程序结束;否则执行3

  3 如果 则交换第k行与第 行对应元素位置, j=k,…,n+1

  4 消元,对i=k+1,…,n计算 对j=k+1,…,n+1计算

  2) 回代过程

  1 若 则矩阵a奇异,程序结束;否则执行2

  2 ;对i=n-1,…2,1计算

#include

#include

void colpivot(float *c,int n,float x[])

{ int i,j,t,k;

float p;

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

{k=i;

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

if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))k=j;

if(k!=i)

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

{

p=*(c+i*(n+1)+j);

*(c+i*(n+1)+j)=*(c+k*(n+1)+j);

*(c+k*(n+1)+j)=p;

}

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

{

p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));

for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));

}

}

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

{

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

(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));

}

}


void main()

{

void colpivot(float*,int,float[]);

int i;

float x[4];

float c[4][5]={1,-1,2,-1,-8,2,-2,3,-3,-20,1,1,1,0,-2,1,-1,4,3,4,};

colpivot(c[0],4,x);

for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);

}

  1.1.3 输出结果

  

  1.1.4结果分析

  从输出结果可以得到 =-6.999999,=3.000000,

   =2.000000,=2.000000

  从结果和过程可以知道这种方法一般能保证舍入误差不扩散,这个方法基本上是稳定的。


  1.2 题目 雅可比法解方程组

  方程组为:

  1.2.1 雅可比迭代法算法

  设方程组ax=b的系数矩阵的对角线元素(i=1,2,…,n),m为迭代次数容许的最大值 为容许误差。

  1 取初始向量 令k=0.

  2 对i=1,2,…,n计算

  3 如果则输出结果;否则执行4

  4 如果则不收敛,终止程序;否则,转2


  1.2.2 程 序

#include

#include

#define eps 1e-6

#define max 100

void jacobi(float *a,int n,float x[])

{

int i,j,k=0;

float epsilon,s;

float *y= new float [n];

for(i=0;i

while(1)

{

epsilon=0;

k++;

for(i=0;i

{

s=0;

for(j=0;j

{

if(j==i)continue;

s+=*(a+i*(n+1)+j)*x[j];

}

y[i]=(*(a+i*(n+1)+n)-s)/(*(a+i*(n+1)+i));

epsilon+=fabs(y[i]-x[i]);

}

for(i=0;i

if(epsilon

{printf("die dai ci shu wei:%d\n",k);return;}

if(k>=max)

{printf("die dai fa san");return;}

}

delete y;

}

void main()

{s

int i;

float a[4][5]={10,-1,2,0,-11,0,8,-1,3,-11,2,-1,10,0,6,-1,3,-1,11,25};

float x[4];

jacobi(a[0],4,x);

for(i=0;i<4;i++)printf("x[%d]=%f\n",i,x[i]);

}

  1.2.3 输出结果

  
  1.2.4 结果分析

  迭代次数增加时,精度越高。从输出结果可以看出此方程组的迭代次数为17,迭代结果越来越接近精确解了,于是

    =-1.467391, =-2.358696, =0.657609, =2.842391

  1.3 题目 高斯-赛德尔迭代法解方程组

  方程组为:

  1.3.1 高斯-赛德尔迭代法算法

  设方程组ax=b的系数矩阵的对角线元素(i=1,2,…,n),m为迭代次数容许的最大值 为容许误差。

  1 取初始向量令k=0.

  2 对i=1,2,…,n计算

  3 如果则输出结束;否则执行4

  4 如果则不收敛,终止程序;否则,转2

  1.3.2 程 序

#include

#include

#define n 600

void main()

{

int i;

float x[4];

float c[4][5]={10,-1,2,0,-11,0,8,-1,3,-11,2,-1,10,0,6,-1,3,-1,11,25};

void gaussseidel(float *,int,float[]);

gaussseidel(c[0],4,x);

for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);

}

void gaussseidel(float *a,int n,float x[])

{

int i,j,k=1;

float d,dx,eps;

for(i=0;i

while(1)

{eps=0;

for(i=0;i

{

d=0;

for(j=0;j

{

if(j==i)continue;

d+=*(a+i*(n+1)+j)*x[j];

}

dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));

eps+=fabs(dx-x[i]);

x[i]=dx;

}

if(eps<1e-6)

{printf("迭代次数是:%d\n",k);return;}

if(k>n)

{

printf("迭代发散n\n");

return;

}

  k++;}}

  1.3.3 输出结果

  

  1.3.4 结果分析

  从输出结果可以看出此方程组的迭代次数为7,此时能得到精确结果是

   =-1.377632, =-1.281579, =0.747368, =-107374176

  从结果和原有知识可以知道其系数矩阵是严格对角占优的。所以此迭代解法有很好的收敛性。

  1.4 方法比较

  雅可比法和高斯-赛德尔迭代法解方程组两种方法的比较 。

  由于此题的系数矩阵是严格对角占优的,所以雅克比迭代法和高斯-赛德尔迭代法都是收敛的,这两种迭代法没迭代一步均是作一次矩阵和向量的乘法,但前者需要2组工作单元分别存放,而后者只需要1组工作单元。对于同一个线性方程组,这两种方法可能同时收敛,也可能同时发散,也可能其一收敛,而另一发散。但当两者皆收敛时,一般来说高斯-赛德尔迭代法比雅克比迭代法收敛快。实际中更多的是使用逐次超松弛迭代法。

  第二章 矩阵的特征值及特征向量的计算

  实验目的

  在数学和物理中,很多问题都需要计算矩阵的特征值及特征向量,它们是线性代数中的一个重要课题,而在实际问题中,这样的计算是很复杂的,有的要求矩阵按模最大特征值及相应的特征向量,有些则要求全部特征值及特征向量,根据不同的要求计算方法大体上可分为2种类型。本实验用的是幂法求矩阵按模最大的特征值及对应特征向量,要求领会求矩阵特征值及特征向量的幂法的方法,并要求会编制幂法的计算程序,来计算有关问题。

  实验内容

  利用幂法求矩阵按模最大的特征值及对应特征向量。

  2.1 幂法求矩阵按模最大的特征值及对应特征向量

   用幂法求矩阵按模最大的特征值及其相应的特征向量,使

  2.1.1 幂法算法

  幂法是求矩阵主特征值的一种迭代方法。设有n个线性无关的特征向量,而相应的特征值满足,则对任意非零初始向量按下述公式构造向量序列:

  

  其中表示中最大的分量,并且有

  用幂法计算实对称矩阵的特征值时,可用rayleigh商作加速。设的rayleigh商为

  当时,将比更快趋于

  2.1.2 程 序

  
  2.1.3 输出结果

  

  2.1.4结果分析

  主特征值为:98.521690;相应的特征向量为

  幂法是求矩阵主特征值的一种有效方法,特别当矩阵为大型稀疏(即矩阵元素中0元素较多)时,更显得如此。但由于特征值的分布无法事先预测,因此不能控制收敛速度,往往需要利用某些加速技巧。所以计算时我们要根据需要选择计算方法来计算矩阵的特征值及特征向量。

  参考文献

  [1] 袁尉平,孙志忠等.计算实习方法.南京:东南大学出版社.2005

  [2] 李庆扬,王能超等.数值分析.北京:清华大学出版社. 2001

  [3] 谭浩强.c程序设计.北京:清华大学出版社.1999

  [4] 孙志忠.计算方法与实习学习指导.南京:东南大学出社.2005

  [5] 孙志忠.计算方法典型例题分析.北京:科学出版社.2005

  [6] 曹志浩.张玉德等.矩阵计算与方程求根.北京:人民教育出版社.1979

本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/245128.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学