科学仿真实验五正文

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

1 引言

当今很多科学与工程计算问题大都可以化为线性代数方程组的形式,所以有效的求解线性方程组在科学和工程计算中是非常重要的。虽然线性代数方程的求解方法和数值计算软件包均很成熟,但随着并行计算机的发展,问题的求解速度和解题规模都大大提高,因而使数值计算方法和相应的数学软件包都产生了变化,。本文讨论使用不列主元、列主元和Guass消去法解线性方程组的一般子程序,并用C语言算法描述,用Visual c++6.0编译,用消去法求解具体的线性方程组的解并成功运行程序求解方程。

2 实验目的和要求

在自然科学和工程技术中很多问题的解决常常归结为解线性代数方程组,例如电学中的网络问题,船体数学放样中建立三次样条函数问题,用最小二乘法求实验数据的曲线拟合问题,解非线性方程组问题,用差分法或者有限元方法结肠微分方程、偏微分方程边值问题等都导致求解线性方程组,而这些方程组的系数矩阵大致分为两种,一种是低阶稠密矩阵,另一种是大型稀疏矩阵。

关于线性方程组的数值解法一般有两类:

直接法:就是经过有限步算术运算,可求得方程组的精确解的方法(若计算过程中没有舍入误差),但实际计算中由于舍入误差的存在和影响,这种方法也只能求的线性方程组的近似接,本文所阐述这类算法中最基本的搞死小区及某些变形,这类方法是解低阶稠密矩阵方程组极其某些大型系数方程组的有效方法。

迭代法:就是用某种极限过程去逐步逼近线性方程组精确解的方法。迭代法具有需要计算机的贮存单元较少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点,但存在收敛性用收敛速度问题,迭代法是解大型稀疏矩阵方程组的重要方法。

3 算法原理与流程图

3.1 实验内容:

先用你所熟悉的计算机语言将不选主元、列主元和完全主元Gauss消去法编写成通用的子程序,然后用你编写的程序求解下面的方程组(考虑n从50到60)

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--10111111117641641641641641612321 n n n x x x x x x ; 对上述方程组还可以采用哪些方法求解?选择其中一些方法编程上机求解上述方程组,说明最适合的是什么方法;将计算结果进行比较分析,谈谈你对这些方法的看法。

3.2 实验环境:

Visual C++6.0

四 消去法解线性方程组算法设计

4.1列主元Guass 消去法

4.1.1基本原理

列主元消去法就是高斯消去法,主要思想是在系数矩阵A 的第一列选绝对值最大的为主元,如1(1,2n)i a i =……,当然10i a ≠,将增广矩阵第一行与第i 行对调,之后构造Frobcius 矩阵L1,第二步,在第二列22(2)a 及其以下选主元,如2(2)k a ,则将增广矩阵的第k 行与第一行对调,之后构造Frobcius 矩阵L2,直至进行n-1步后完成消元。得到上三角方程组,再进行回代过程。

设方程组为Ax=b ,系数矩阵A 为非奇异矩阵,A 的增广矩阵为

[]11121121222212,n n n n nn n a a a b a a a b a b a a a b ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭

…………………… 第一步(k=1):首先在A 的第一行选取绝对值最大的元素n a ,作为第一步的主元素:11101max

i n a i a ≤≤=≠,然后再交换A 与b 的第一行元素,再进行消元计算。

设列主元消去法已完成第一步与第k-1步,交换两行,消元计算得到与原方程组等价的方程组()()A k x B K =

[]1112111212221,1,1,0

00,[(),()]0

0000

000k n n k n n kk kn kn k k k n k n nk nn nn a a a a b a a a b A B A k B k a a b a a b a a b +++⎛⎫ ⎪ ⎪ ⎪ ⎪→= ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭

…………………………………………………… 第k 步计算如下:

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

(1)按列选主元,确定t 满足10max

tk i n a ik a ≤≤=≠。

(2)如果t k ≠,交换[],A b 的第t 行和第k 行元素。

(3)消元计算。

()()/,(1,n)k k ik ik ik kk a m a a i k ←==+……

(1)()()(1)()(),(,1,),(1,,)

k k k ij ij ik kj k k k ij ij ik kj a a m a i j k b b m b i k n ++⎧←-=+⎪⎨←-=+⎪⎩……,n …… 消元乘数ik m 满足:()()/1,(1,,)k k ik ik kk m a a i k n =≤=+……

(4)回代求解:()()()()()1/,(1,2,1)()/n n n n nn n k k k k k kj j kk

j k x b a k n n x b a x a =+⎧=⎪=--⎨=-⎪⎩

∑……, 4.1.2算法说明

首先将线性方程组做成增广矩阵,对增广矩阵进行行变换。对元素aii ,在第i 列中,第i 行及以下的元素选取绝对值最大的元素,将该元素最大的行与第i 行交换,然后采用高斯消元法将新得到的aii 消去第i 行以下的元素。一次进行直到ann 。从而得到上三角矩阵。再对得到的上三角矩阵进行回代操作,即可以得到方程组的解。

按照解题的思路,整个程序大概由以下几个部分组成:输入方程组;判断线性方程组是否合法;交换行的矩函数(change );比较系数大小的函数(mymax);菜单的选择(message);开始计算;退出程序等。除了以上主要部分外,程序还用到了if.和switch 选择语句,对程序的进一步简化起到重要作用,使源程序显的更加简洁明了。

相关文档
最新文档