数值分析列主元消去法的实验报告

合集下载

数值分析实验作业-gauss消去法的数值稳定性分析说课讲解

数值分析实验作业-gauss消去法的数值稳定性分析说课讲解

数值分析实验作业-g a u s s消去法的数值

稳定性分析

实验3.1 Gauss 消去法的数值稳定性试验

实验目的:

观察和理解Gauss 消元过程中出现小主元(即)

(k kk

a 很小)时引起的方

程组解的数值不稳定性。 实验内容:

求解方程组b Ax =,其中

(1)⎥⎥⎥

⎥⎥⎦

⎤⎢⎢

⎢⎢

⎡⨯=11212592.1121

-130.6-291.51314.59103.015-1A ,⎥

⎥⎥⎥⎦⎤

⎢⎢⎢

⎢⎣⎡=2178.4617.591b ; (2)

⎥⎥⎥⎥⎦⎤⎢

⎢⎢

⎢⎣⎡----=2010

151526990999999999.2310710

2A ,

⎥⎥⎥⎥⎦

⎢⎢⎢⎢⎣⎡=15

019000000000.582b .

实验要求:

(1) 计算矩阵的条件数,判断系数矩阵是良态的还是病态的。

(2) 用Gauss 列主元消去法求得L 和U 及解向量4

21,R x x ∈.

(3) 用不选主元的Gauss 消去法求得L ~和U ~及解向量421~,~R x x ∈.

(4) 观察小主元并分析其对计算结果的影响. 程序如下:计算矩阵条件数及Gauss 列主元消去法: format longeng

A1=[0.3e-15 59.14 3 1;5.291 -6.130 -1 2;11.2 9 5 2;1 2 1 1];

b1=[59.17;46.78;1;2]; n=4;

k2=cond(A1) %k2为矩阵的条件数;

for k=1:n-1

a=max(abs(A1(k:n,k))); [p,k]=find(A1==a); B=A1(k,:);c=b1(k);

东南大学数值分析上机报告完整版

东南大学数值分析上机报告完整版

数值分析上机实验报告

目录

1.chapter1舍入误差及有效数 (1)

2.chapter2Newton迭代法 (3)

3.chapter3线性代数方程组数值解法-列主元Gauss消去法 (7)

4.chapter3线性代数方程组数值解法-逐次超松弛迭代法 (8)

5.chapter4多项式插值与函数最佳逼近 (10)

1.chapter1舍入误差及有效数

1.1题目

设S N =∑1

j 2−1

N j=2

,其精确值为

)1

1

123(21+--N N 。 (1)编制按从大到小的顺序11

13112122

2-+⋯⋯+-+-=N S N ,计算S N 的通用程序。 (2)编制按从小到大的顺序1

21

1)1(1112

22-+⋯⋯+--+-=

N N S N ,计算S N 的通用程序。 (3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。(编制程序时用单精度)

(4)通过本次上机题,你明白了什么? 1.2编写相应的matlab 程序 clear;

N=input('please input N:'); AValue=((3/2-1/N-1/(N+1))/2); sn1=single(0); sn2=single(0); for i=2:N

sn1=sn1+1/(i*i-1); %从大到小相加的通用程序% end

ep1=abs(sn1-AValue); for j=N:-1:2

sn2=sn2+1/(j*j-1); %从小到大相加的通用程序% end

ep2=abs(sn2-AValue);

fprintf('精确值为:%f\n',AValue);

哈工大数值分析上机实验报告可编辑

哈工大数值分析上机实验报告可编辑
Emax=;0
此时;由于 不是很小;机器误差就不是很大;由Emax可以看出不选主元的计算结果精度还可以;因此此时可以考虑不选主元以减少计算量..
当 时;不选主元和选主元的计算结果如下
Emax=;0
此时由Emax可以看出不选主元的计算精度就不好了;误差开始增大..
当 时;不选主元和选主元的计算结果如下
实验报告一
题目:非线性方程求解
摘要:非线性方程的解析解通常很难给出;因此线性方程的数值解法就尤为重要..本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法..
前言:目的和意义
掌握二分法与Newton法的基本原理和应用..
数学原理:
对于一个非线性方程的数值解法很多..在此介绍两种最常见的方法:二分法和Newton法..
前言:目的和意义
1.深刻认识多项式插值的缺点..
2.明确插值的不收敛性怎样克服..
3.明确精度与节点和插值方法的关系..
数学原理:
在给定n+1个节点和相应的函数值以后构造n次的Lagrange插值多项式;实验结果表明见后面的图这种多项式并不是随着次数的升高对函数的逼近越来越好;这种现象就是Rung现象..
三次样条插值:
给定区间a; b一个分划
⊿:a=x0<x1<…<xN=b
若函数Sx满足下列条件:

数值分析列主元高斯消去法

数值分析列主元高斯消去法

实验四:列组元消去法

一、目的

1)熟悉列主元高斯消元法解线性方程组的算法

2)掌握列主元高斯消去法的编程

二、实验原理

列主元素消去法是为控制舍入误差而提出来的一种算法,在Gauss消去法的消元过程中,若出现a=0,则消元无法进行,即使其不为0,但很小,把它作为除数,就会导致其他元素量级的巨大增长和舍入误差的扩散,最后使计算结果不可靠.使用列主元素消去法计算,基本上能控制舍入误差的影响,并且选主元素比较方便.

三、运行结果

四、代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace高斯

{

class Program

{

static double[] Gause(double[,] a, int n)

{

int i, j, k;

int rank, columm;

double temp, l, s, mx;

double[] x = new double[n];

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

{

mx = Math.Abs(a[i, i]);

rank = i;

columm = i;

for (j = i + 1; j <= n - 1; j++) //选主元

if (Math.Abs(a[j, i]) > mx)

{

mx = Math.Abs(a[j, i]);

rank = j;

columm = i;

}

for (k = 0; k <= n; k++) //主元行变换

数值分析实验报告

数值分析实验报告

数值分析实验报告

篇一:数值分析实验报告(一)(完整)

数值分析实验报告

1

2

3

4

5

篇二:数值分析实验报告

数值分析实验报告

课题一:解线性方程组的直接方法

1.实验目的:

1、通过该课题的实验,体会模块化结构程序设计方法的优点;

2、运用所学的计算方法,解决各类线性方程组的直接算法;

3、提高分析和解决问题的能力,做到学以致用;

4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

2.实验过程:

实验代码:

#include "stdio.h"

#include "math.h"

#includeiostream

using namespace std;

//Gauss法

void lzy(double **a,double *b,int n) {

int i,j,k;

double l,x[10],temp;

for(k=0;kn-1;k++)

{

for(j=k,i=k;jn;j++)

{

if(j==k)

temp=fabs(a[j][k]);

else if(tempfabs(a[j][k]))

{

temp=fabs(a[j][k]);

i=j;

}

}

if(temp==0)

{

cout"无解\n; return;

}

else

{

for(j=k;jn;j++)

{

temp=a[k][j];

a[k][j]=a[i][j];

a[i][j]=temp;

}

temp=b[k];

b[k]=b[i];

b[i]=temp;

}

for(i=k+1;in;i++) {

l=a[i][k]/a[k][k];

清华大学数值分析实验报告

清华大学数值分析实验报告

数值分析实验报告

一、 实验3。1 题目:

考虑线性方程组b Ax =,n n R A ⨯∈,n R b ∈,编制一个能自动选取主元,又能手动选取主元的求解线性代数方程组的Gauss 消去过程。

(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢

⎢⎢⎣⎡=6816816816 A ,⎥⎥

⎥⎥

⎥⎦⎤

⎢⎢⎢⎢⎢⎢⎣⎡=1415157 b ,则方程有解()T x 1,,1,1*⋯=。取10=n 计算矩阵的条件数。分别用顺序Gauss 消元、列主元Gauss 消元和完全选主元Gauss 消元方法求解,结果如何?

(2)现选择程序中手动选取主元的功能,每步消去过程都选取模最小或按模尽可能小的元素作为主元进行消元,观察并记录计算结果,若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用.

(4)选取其他你感兴趣的问题或者随机生成的矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。

1. 算法介绍

首先,分析各种算法消去过程的计算公式, 顺序高斯消去法:

第k 步消去中,设增广矩阵B 中的元素()

0k kk a ≠(若等于零则可以判定系数矩

阵为奇异矩阵,停止计算),则对k 行以下各行计算()

()

,1,2,,k ik

ik k kk

a l i k k n a ==++,

分别用ik l -乘以增广矩阵B 的第k 行并加到第1,2,

,k k n ++行,

数值分析报告

数值分析报告

数值分析

实验报告

学院

专业

班级学号

姓名

实验一:

实验题目:

编写一个拉格朗日插值函数,对不多于9个点的插值节点都可以求出插值函数,任意给定输入x值都可以求出y值。

例如:(0,1),(1,1) ,(4,2) ,(9,3) ,(16,4) ,(25,5) ,(36,6) ,(49,7) ,(64,8),这实际上是一个平方根函数随意输入x在[0,64]上的值都可以输出一个y值。进一步可以在这区间上画出图像。

程序代码:

拉格朗日函数:

function yi = Lagrange(x,y,xx)

%Lagrange 插值多项式,其中,

%x为向量,全部的插值节点;

%y为向量,插值节点处得函数值;

%xi为标量,被估计函数自变量;

%yi为xi处的函数估计值。

n = length(x);m = length(y);

%输入的插值点与它的函数值应有相同的个数

if n ~=m

error('The lengths of X and Y must be equal!');

return;

end

p = zeros(1, n);

for k =1 : n

t = ones(1, n);

for j = 1 : n

if j ~=k

%输入的插值点必须互异

if abs(x(k)-x(j)) < eps

error('the DATA is error!');

return;

end

t(j) = (xx - x(j)) / (x(k) - x(j));

end

end

p(k) = prod(t);

end

yi = sum(y .* p);

测试数据:

>> x = [0 1 4 9 16 25 36 49 64]

数值分析实验报告--列主元高斯消去

数值分析实验报告--列主元高斯消去

2、用列主元高斯消去法解线性方程组b =Ax .

⑴ ⎥⎥⎥⎦

⎤⎢⎢⎢⎣⎡--34.981.4987.023.116.427.199.103.601.3⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡321x x x =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡111 ⑵ ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--34.981.4990.023.116.427.199.103.600.3⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡321x x x =⎥⎥⎥⎦⎤⎢

⎢⎢⎣⎡111 分别输出A b A det ,,,解向量x ,(1)中A 的条件数。分析比较(1)(2)的计

算结果。

程序1(列主元高斯消去解线性方程组):

#include

#include

#define n 3

void LZYGSXQ(double a[n][n],double b[n]){

double x[3],L,max,det=1;

int r,t,i,j,k;

for(k=0;k

{

{

max=fabs(a[k][k]);

r=k;

}

for(i=k+1;i

{

if(fabs(a[i][k])>max)

r=i;

for(t=k;t

{

L=a[k][t];

a[k][t]=a[r][t];

a[r][t]=L;

}

L=b[k];

b[k]=b[r];

b[r]=L;

det=-det;

}

for(i=k+1;i

{

L=a[i][k]/a[k][k];

for(j=k;j

a[i][j]=a[i][j]-L*a[k][j];

}

b[i]=b[i]-L*b[k];

}

det=a[k][k]*det;

}

det=a[k][k]*det;

printf("高斯消去后的方程系数\n"); //输出高斯消去后的系数矩阵

高斯消元法_实验报告

高斯消元法_实验报告

- - 华中科技大学

数值分析实验报告

系、年级研究生院2012级

**

**

类别硕士

2013年5月6日

实验6.1

实验要求:

根据教材实验6.1做出相应改编:分别使用Gauss 消元、列选主元。全选主元的方法求解线性方程组,分别比拟三种消元方法的结果和算法的区别,并说明主元的选取在Gauss 消元的中的作用。

问题提出:

Gauss 消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进展的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。一般来说书本上采用的列选主元的方法对其线性方程组进展求解的,则我们是否可以选择一种行列都选取主元消去的方法来减小相应的误差呢?全主元消元法和列主元消元法一样都是由高斯消元法演变而来。只不过选取主元的*围有所加大。全选主元相对于列选主元的更加复杂化了,因为在运算的过程中导致了元的位置发生了变化,这样我们就不得不追踪每个元的位置。本次实验就几个问题进展了matlab 实验分析,比拟几种计算方法的优劣性。

实验内容:

考虑线性方程组

编制一个程序:分别能进展Gauss 消去、列选主元Gauss 消去、全选主元Gauss 消去法进展解线性方程组。对三种算法所得到的结果进展比拟,分析三种计算方法的准确性。

具体内容:

〔1〕取矩阵⎥⎥⎥⎥⎥⎥⎦

⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。取n=10、n=20计算矩阵的条件数。分别编写利用matlab 编写运算程序,实现

数值分析实验一 列主元消去法

数值分析实验一  列主元消去法

数值分析实验一 列主元消去法

一、实验目的:

1)掌握列主元消去法的基本思想。

2)了解数值计算解线性方程组的实现范围、计算公式。 3)培养上机编程及调试的能力。 二、实验设备和实验环境

操作系统: Windows XP Professional 软件: MATLAB7.0或Visual C++ 6.0 三、实验内容及要求:

对于线性方程组 B Ax =,记方程组的系数矩阵为:

⎪⎪⎪⎪⎪⎭

⎝⎛=nn n n n n ααα

ααα

αααΑK M M M ΛΛ2122221

11211 , ⎪⎪⎪⎪

⎭⎫

⎝⎛=n b b b B M 21 , ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=n x x x x M 21 用高斯列主元消元法求解。并用高斯完全主元消去法和列主元消去法进行比较,同时得出高斯列主元消去法的优缺点。 四、算法描述: 1. 消元过程 对1,,1-=n k Λ (1)选主元: (a )按列选主元k p ,即确定r ,使得ik n

i k rk k a a p ≤≤=≡max

(b )若0=k p ,停止计算

(c )若k r ≠(进行交换) ),,1,(n k k j a a rj ik Λ+=↔

r k b b ↔ , det det ←

(2)对:,,1n k i Λ+= ik kk ik ik a a a m ⇒=/ i k ik i b b a b ⇒-

对:,,1n k j Λ+= ij kj ik ij a a a a ⇒-

(3)det .det kk a ← 2.回代过程

(a )若0=nn a ,输出失败信息,停止计算 (b )n nn n b a b ⇒/ det .det nn a ← (c )对1,,1Λ-=n i ∑+=⇒-

1、列主元消去法

1、列主元消去法

实验一列主元消去法

【实验内容】

1、理解高斯顺序消去法;

2、理解主元高斯消去法在求解精度上的优点;

3、完成列主元消去法的程序;

4、会用系统内置命令求解有唯一解的线性方程组;

【试验方法与步骤】

一、回答下面的问题

1、什么是线性方程组直接解法和迭代解法,各自的特点和使用问题类型是什么?

2、LU分解是直接解法还是迭代解法,L、U矩阵的特点是什么,应用在哪些问题中,请举例说明。

3、给出一个舍入误差严重影响计算结果精度的例子,试着能否从多个角度说明产生该问题的原因。

4、迭代解法的收敛性有什么意义,收敛条件用什么判定?

5、给出例子,并说明迭代收敛的速度。

二、完成下列计算,写出代码

1、用crame法则、用LU分解函数、逆矩阵函数分别完成P35例3.2.1

2、编写列主元消去法程序,完成P35例3.2.1和习题3第2题

3、用雅克比、高斯-塞德尔和SOR迭代完成习题3第13题,进行收敛速度的比较分析

【实验结果】

解:一、1:线性方程组的解法 解:一、

2:L

U 分解法 1) L

U 分解属

于直接解法

2) L 矩阵特点:一个对角线上的元素全为1的下三角矩阵(即单位下三角

矩阵)。

3) U 矩阵特点:上三角矩阵

4) 应用:LU 分解主要应用在数值分析中,用来解线性方程、求反矩阵或

计算行列式

解法 直接解法

迭代解法

定义

经过有限步算数运算,可求得方程组的精确解的方法

用某种极限过程逐步逼近线性方程组精确解的方法 特点

运算步骤有限、可得精确解

极限逼近思想

适用问 题类型 计算过程中没有舍入误差 向量值序列收敛于向量*x 即*)(lim x x k k =∞

解线性方程组的列主元素高斯消去法和LU分解法

解线性方程组的列主元素高斯消去法和LU分解法

解线性方程组的列主元素高斯消去法和LU分解法

数值试验报告分析

一、实验名称:解线性方程组的列主元素高斯消去法和LU分解法二、实

验目的及要求:

通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法

的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。

三、算法描述:

本次试验采用的是高斯列主元消去法和LU分解法求解线性方程组的解。

其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到

底的条件:当A可逆时,列主元Gau(高斯)消去法一定能进行到底。

优点:具有很好的数值稳定性;具有与顺序Gau消去法相同的计算量。列主元Gau(高斯)消去法的精度显著高于顺序Gau(高斯)消去法。注意:

省去换列的步骤,每次仅选一列中最大的元。

矩阵的三角分解法是A=LU,L是下三角阵,U是上三角阵,Doolittle分

解:L是单位下三

角阵,U是上三角阵;Crout分解:L是下三角阵,U是单位上三角阵。矩阵三角分解的条件是矩阵A有唯一的Doolittle分解的充要条件是A的

前n-1顺序主子式非零;矩阵A有唯一的Crout分解的充要条件是A的前

n-1顺序主子式非零。三角分解的实现是通过

(1)Doolittle分解的实现;(2)Doolittle分解的缺点:条件苛刻,

且不具有数值稳定性。(3)用Doolittle分解求解方程组:A某=bLU某

=bLY=bA=LUU某=Y;

四、实验内容:

解下列两个线性方程组

3.016.031.99某11

4.161.23某21(1)1.270.9874.819.34某1371032.099999(2)51211某1862某2

消元法实验报告7

消元法实验报告7

西京学院数学软件实验任务书

《数值分析》实验报告

实验一

一、实验目的与要求

课程名称

数学软件实验 班级 *** 学号 *** 姓名 ***

实验课题

线性方程组高斯消去法,高斯列主元消去法,高斯全

主元消去法

实验目的 熟悉线性代数方程组高斯消去法,高斯列主元消去法,

高斯全主元消去法

实验要求 运用Matlab/C/C++/Java/Maple/Mathematica 等其中

一种语言完成

实验内容

线性方程组高斯消去法

线性方程组高斯列主元消去法

线性方程组高斯全主元消去法

成绩

教师

1.掌握高斯列主元消去法解线性方程组的基本思路;

2.了解一些计算机的算法,会以某种汇编语言实现算法结果(本实验主要用matlab编程)

二、实验内容

1.编写用高斯列主元消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.

(1)

123

123

123

21

322

323

x x x

x x x

x x x

+-=

-++=

⎪-+=

(2)

123

123

123

24

235

36

x x x

x x x

x x x

-+=

--+=

⎪++=

2.列主元消元法及其matlab程序

function [Ra,Rb,n,X]=GaussXQLineMain(A,b)

%高斯列主元消元法,其中B为增广矩阵

B=[A b];

%读入b的长度

n=length(b);

%读出矩阵a,b秩

Ra=rank(A);

Rb=rank(B);

if (Rb-Ra)>0

disp('因为Ra不等于Rb,所以此方程组无解.')

return

end

if Ra==Rb

数值分析计算实习题列主元高斯消去法解线性方程组

数值分析计算实习题列主元高斯消去法解线性方程组

数值分析计算实习题

第5章解线性方程组的直接方法

列主元高斯消去法解线性方程组。

书上的计算实习题1、2、3都要求用列主元高斯消去法解线性方程组,所

以考虑写一个普适的程序来实现。

对于线性方程组Ax=b,程序允许用户从文件读入矩阵数据或直接在屏幕输入数据。

文件输入格式要求:

(1)第一行为一个整数n (2<=n<=100),表示矩阵阶数。

(2)第2〜n+1行为矩阵A各行列的值。

(3 )第n+2〜n+n+2行为矩阵b各行的值。

屏幕输入:按提示输入各个数据。

输出:A、b、det(A)、列主元高斯消去计算过程、解向量X。

【算法说明】

设有线性方程组Ax=b,其中设A为非奇异矩阵。方程组的增广矩阵为

[a,b] =

a n…

第1步(k=l):首先在A的第一列中选取绝对值最大的元素%,作为第一步的主元素:

如凜产如工0

然后交换(A, b)的第1行与第1行元素,再进行消元计算。

设列主元素消去法已经完成第1步到第k・l步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组A(k)x=b(k)

用姐…哦盘…於?

MB

■•■■

[A,b]T[A(?b (*)] =

…盅

•a"〉

唱”

■•

...卅

第k步计算如下:

对于k=l, 2, n-1 |時卜maxaf"

(1)按列选主元:即确定t使

(2)如果tHk,则交换[A, b]第t行与第k行元素。

(3)消元计算

a ik J叫=-bgk + X・・Ji)

a kk

% <-%+叫ciy (i,j = k + l,…川)

»〜乞+叫几 (j = k + l,…屮)

数值分析实验作业,gauss消去法的数值稳定性分析

数值分析实验作业,gauss消去法的数值稳定性分析

实验3.1 Gauss 消去法的数值稳定性试验

实验目的:

观察和理解Gauss 消元过程中出现小主元(即)

(k kk

a 很小)时引起的方

程组解的数值不稳定性。

实验内容:

求解方程组b Ax =,其中

(1)⎥⎥⎥

⎥⎥⎦

⎤⎢⎢

⎢⎢

⎡⨯=11212592.1121

-130.6-291.51314.59103.015-1A ,⎥

⎥⎥⎥⎦⎤

⎢⎢⎢

⎢⎣⎡=2178.4617.591b ; (2)

⎥⎥⎥⎥⎦⎤⎢

⎢⎢

⎢⎣⎡----=2010

151526990999999999.2310710

2A ,

⎥⎥⎥⎥⎦

⎢⎢⎢⎢⎣⎡=15

019000000000.582b .

实验要求:

(1) 计算矩阵的条件数,判断系数矩阵是良态的还是病态的。

(2) 用Gauss 列主元消去法求得L 和U 及解向量4

21,R x x ∈.

(3) 用不选主元的Gauss 消去法求得L ~

和U ~及解向量

421~,~R x x ∈.

(4) 观察小主元并分析其对计算结果的影响.

程序如下:计算矩阵条件数及Gauss 列主元消去法:

format longeng

A1=[0.3e-15 59.14 3 1;5.291 -6.130 -1 2;11.2 9 5 2;1 2 1 1]; b1=[59.17;46.78;1;2]; n=4;

k2=cond(A1) %k2为矩阵的条件数;

for k=1:n-1

a=max(abs(A1(k:n,k))); [p,k]=find(A1==a); B=A1(k,:);c=b1(k);

A1(k,:)=A1(p,:);b1(k)=b1(p); A1(p,:)=B;b1(p)=c; if A1(k,k)~=0

数值分析实验报告

数值分析实验报告

实验五 解线性方程组的直接方法

实验5.1 (主元的选取与算法的稳定性) 问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。

实验内容:考虑线性方程组

n n n R b R A b Ax ∈∈=⨯,,

编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。

实验要求:

(1)取矩阵⎥⎥

⎥⎥

⎥⎦

⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。

取n=10计算矩阵的条件数。让程序自动选取主元,结果如何?

(2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。

思考题一:(Vadermonde 矩阵)设

⎥⎥

⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥

⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑∑====n i i n n i i n

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

实验一 列主元消去法

【实验内容】

1.掌握列主元消去法的基本思路和迭代步骤

2.并能够利用列主元的高斯消去法解任意阶数的线性方程组;

3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。

【实验方法与步骤】

1.列主元消去法基本思路

设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。

2.列主元高斯消去法算法描述

将方程组用增广矩阵[]()(1)|ij n n B A b a ⨯+==表示。

步骤1:消元过程,对1,2,,1k n =-L

(1) 选主元,找{},1,,k i k k n ∈+L 使得

,max k i k ik k i n

a a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3);

(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,

,,1j k n =+L ;

(4) 消元,对,,i k n =L ,计算/,ik ik kk l a a =对1,,1j k n =++L ,计算

.ij ij ik kj a a l a =-

步骤 2:回代过程:

(1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2);

(2) ,1/;n n n nn x a a +=对1,,2,1i n =-L ,计算

,11/n i i n ij j ii j i x a a x a +=+⎛⎫=- ⎪⎝⎭

[实验程序]

#include

#include

#include

#include

#define NUMBER 20

#define Esc 0x1b

#define Enter 0x0d

using namespace std;

float A[NUMBER][NUMBER+1] ,ark;

int flag,n;

void exchange(int r,int k);

float max(int k);

void message();

void main()

{

float x[NUMBER];

int r,k,i,j;

char celect;

void clrscr();

printf("\n\nUse Gauss.");

printf("\n\n1.Jie please press Enter.");

printf("\n\n2.Exit press Esc.");

celect=getch();

if(celect==Esc)

exit(0);

printf("\n\n input n=");

scanf("%d",&n);

printf(" \n\nInput matrix A and B:");

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

{

printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);

for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); }

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

{

ark=max(k);

if(ark==0)

{

printf("\n\nIt’s wrong!");message();

}

else if(flag!=k)

exchange(flag,k);

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

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

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

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

for( k=n-1;k>=1;k--)

{

float me=0;

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

{

me=me+A[k][j]*x[j];

}

x[k]=(A[k][n+1]-me)/A[k][k];

}

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

{

printf(" \n\nx%d=%f",i,x[i]);

}

message();

}

void exchange(int r,int k)

{

int i;

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

A[0][i]=A[r][i];

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

A[r][i]=A[k][i];

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

A[k][i]=A[0][i];

}

float max(int k)

{

int i;

float temp=0;

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

if(fabs(A[i][k])>temp)

{

temp=fabs(A[i][k]);

相关文档
最新文档