当前位置:文档之家› UL分解与高斯消元法实验报告

UL分解与高斯消元法实验报告

UL分解与高斯消元法实验报告
UL分解与高斯消元法实验报告

数值方法实验报告

课程名称:LU分解法与高斯消元法

学院:数学与财经学院

专业:信息与计算科学(金融软件)年级:2011级

姓名:郑荐

学号:201102334023

指导教师:李梦

实验一

【实验名称】

实现LU算法,并利用该算法求解线性方程组

【实验目的】

了解如何用LU三角分解法解线性方程组,利用LU三角分解法解线性方程组

【实验原理】

设无行交换变换的高斯消去法可求解一般线性方程组AX=B,则矩阵A可分解为一个下三角矩阵L和一个上三角矩阵U乘积:

A=LU

而且L的对角线元素为1,U的对角线元素非零。得到L和U后,可通过如下步骤得到X:

1.利用向前替换法对方程组L Y=B求解Y。

2.利用回带法对方程组UX=Y求解X。

【实验步骤】

1.输入矩阵A

2.LU分解A,得到L矩阵与U矩阵的值[L U]=LU_1(A)

3.输入矩阵B,利用向前回带法求出Y值Y=upsub(L,B)

4.利用回带发求出X值[X]=backsub(U,Y)

【实验程序】

1.LU分解

代码:

function [L U]=LU_1(A)

n=length(A(1,:));

L=eye(n);

U=zeros(n);

for j=1:n

U(1,j)=A(1,j);

end

for i=2:n

L(i,1)=A(i,1)/U(1,1);

end

for k=2:n

for j=k:n

U(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);

end

for i=k+1:n

L(i,k)=(A(i,k)-L(i,1:k-1)*U(1:k-1,k))/U(k,k);

end

end

结果:

2.向前回带法

代码:

%向前代入法

function Y=upsub(A,B)

n=length(B);

Y=zeros(n,1);

Y(1)=B(1)/A(1,1);

for k=2:n

Y(k)=(B(k)-A(k,1:k-1)*Y(1:k-1))/A(k,k);

end

结果:

3.回带法

代码:

%回代法

function [X]=backsub(A,B)

n=length(B);

X=zeros(n,1);

X(n)=B(n)/A(n,n);

for k=n-1:(-1):1

X(k)=(B(k)-A(k,k+1:n)*X(k+1:n))/A(k,k);

end

结果:

【实验分析】

LU分解法比较简便迅速,当解多个系数矩阵为A的线性方程做时,LU分解法就显得特别优越,只要对系数矩阵做一次LU分解,以后只要解三角形方程即可。也可以根据系数矩阵的形状来设计算法。

实验二

【实验名称】

高斯消元法解线性方程组 【实验目的】

了解如何用高斯消元法解线性方程组,利用高斯消元法解线性方程组 【实验原理】 消元过程:

设0)

0(11≠a ,令乘数)0(11)0(11/a a m i i -=,做(消去第i 个方程组的i x )操作1i m ×第1个

方程+第i 个方程(i=2,3,.....n )

则第i 个方程变为1)

1(2)1(2

...i n in i b x a x a =++ 这样消去第2,3,。。。,n 个方程的变元i x 后。原线性方程组变为:

??

??

?

????=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)

0(11)0(11... . . ... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。

回代过程:

在最后的一方程中解出n x ,得:)

1()1(/--=n nn n n n a b x

再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解: 其通项为3,...1-n 2,-n k /)()

1(1

)1()

1(=-

=-+=--∑k kk n

k j j k kj k k

k a x a

b

x

【实验步骤】

1、输入A 和b

2、判断是否有解 B=[A b] if RA

3、if RA=RB=n 有唯一解 对 k=1:n-1 做A(k,k)=0,break for i=k+1:n L(i,k)=A(i,k)/A(k,k) A(i,k)=A(i,j)-L(i,k)*A(i,j) end

end

4、 elseif RA=RB

5、后向代入法求解

【实验程序】

回带法程序:

%回代法

function [X]=backsub(A,B)

n=length(B);

X=zeros(n,1);

X(n)=B(n)/A(n,n);

for k=n-1:(-1):1

X(k)=(B(k)-A(k,k+1:n)*X(k+1:n))/A(k,k);

end

高斯消元法程序:

function[RA,RB,n]=gaus(A,b)

B=[A b];

n=length(b);

RA=rank(A);

RB=rank(B);

rank_dif=RB-RA;

if rank_dif>0

disp('RA~RB,此方程无解');

return;

end

if RA==RB

if RA==n

disp('RA=RB=n,次方程组有唯一解');

X=zeros(n,1);

for p=1:n-1

for k=p+1:n

m=B(k,p)/B(p,p);

B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);

end

end

X=backsub(B(1:n,1:n),B(1:n,n+1));

X

else

disp('RA=RB

end

end

结果:

【实验分析】

高斯消元法代码更为复杂。LU分解的方法,求解方程组的方法使得得出的结果更加精确。高斯消元法能更快判断出是由有解。LU分解法在LU分解前矩阵A 不知道能否可以分解。

【实验心得】

本次试验涉及到了用高斯消元法,LU分解法两种方法。需要对这些方法的原理都要掌握才能写出程序,由于理论知识的欠缺,我花了很大一部分时间在看懂实

验的原理上,看懂了实验原理之后就开始根据原理编写程序,程序中还是出现了很多的低级错误导致调试很久才能运行。通过这次试验使我深刻的体会到理论知识的重要性,没有理论知识的支撑是写不出程序来的。写程序时还会犯很多低级的错误,以后一定要加强理论知识的学习,减少编程时低级错误的产生。

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

实验一 列主元消去法 【实验内容】 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();

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (3.1) 其中系数a ij ,常数b j 都是已知数,x i 是未知量(也称为未知数)。当右端常数项b 1, b 2, …, b m 不全为0时,称方程组(3.1)为非齐次线性方程组;当b 1=b 2= … =b m = 0时,即 a x a x a x a x a x a x a x a x a x n n n n m m mn n 111122121122221122000 +++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (3.2) 称为齐次线性方程组。 由n 个数k 1, k 2, …, k n 组成的一个有序数组(k 1, k 2, …, k n ),如果将它们依次代入方程组(3.1)中的x 1, x 2, …, x n 后,(3.1)中的每个方程都变成恒等式,则称这个有序数组(k 1, k 2, …, k n )为方程组(3.1)的一个解。显然由x 1=0, x 2=0, …, x n =0组成的有序数组(0, 0, …, 0)是齐次线性方程组(3.2)的一个解,称之为齐次线性方程组(3.2)的零解,而当齐次线性方程组的未知量取值不全为零时,称之为非零解。 (利用矩阵来讨论线性方程组的解的情况或求线性方程组的解是很方便的。因此,我们先给出线性方程组的矩阵表示形式。) 非齐次线性方程组(3.1)的矩阵表示形式为: AX = B 其中 A = ????????????mn m m n n a a a a a a a a a ΛΛΛΛΛΛΛ212222111211,X = ????????????n x x x M 21, B = ????? ???????n b b b M 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

高斯消去法算法实验报告

算法设计与分析基础 实验报告 应用数学学院 二零一六年六月

实验高斯消去法算法 一、实验性质设计 二、实验学时14学时 三、实验目的 1、掌握高斯消去法的方法和原理。 2、掌握java语言实现该算法的一般流程。 四、实验内容 1、数组的输入。 2、高斯消去法的算法流程。 4、运行结果的输出。 五、实验报告 Ⅰ、算法原理 通过一系列的初等变换,交换方程组中两个方程的位置,把一个方程替换为它的非零倍,把一个方程替换为它和另一个方程倍数之间的和 或者差。 Ⅱ、Java算法代码: import java.util.Scanner; publicclass Gaosi { publicstaticvoid main(String[] args) { Gao ga = new Gao(); ga.set(); ga.yunSuan(); } } class Gao {

double A[][], B[], X[], ss, sum; int n, k, j, t; void set() { System.out.println("请输入方程组中方程的个数:"); Scanner sc = new Scanner(System.in); n = sc.nextInt(); A = newdouble[n][n]; B = newdouble[n]; X = newdouble[n]; System.out.println("请输入各方程的系数:"); Scanner sd = new Scanner(System.in); for (int i = 0; i

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

高斯列主元消元法解线性方程组 一、题目:用Gauss 列主元消去法解线性方程组Ax b =,其中, A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803?? ? ? ? ? ? ? ? ??? 0.230 -52.322 54.000 240.236 29.304 -117.818b ?? ? ? ?= ? ? ? ? ??? T X=(0.907099 -1.961798 3.293738 -4.500708 3.029344 -5.255068) 二、原理及步骤分析 设 n n ij R a A ?∈=][)1(,n n R b b b b ∈=],,,[)1()2(2)1(1 。若约化主元素 ),,2,1(0)(n k a k kk =≠,则通过高斯消元法将方程b AX =约化为三角形方程组求解。 如果在消元过程中发现某个约化主元0) (=k kk a , 则第K 次消元就无法进行。此外,即 使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。 为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。相应过程为: (1)选主元:在子块的第一列中选择一个元) (k k i k a 使) (max k ik n i k k k i a a k ≤≤= 并将第k 行元与第k i 行元互换。 (2)消元计算:对k=1,2,……n-1依次计算 ()()()?? ?? ?????++=-=++=-=++==++n k k i b m b b n k k j i a m a a n k k i a a m k k ik k i k i k kj ik k ij k ij k kk k ik k ik ,,2,1,,2,1,,,2,1) ()()1() ()()1()() ()( (3)回代求解

消元法实验报告4

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

《数值分析》实验报告 实验一 一、实验目的与要求 1.掌握高斯列主元消去法解线性方程组的基本思路; 2.了解一些计算机的算法,会以某种汇编语言实现算法结果(本实验主要用matlab编程) 二、实验内容 1.编写用高斯列主元消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. (1) 123 123 123 221 1 221 x x x x x x x x x +-= ? ? ++= ? ?++= ? (2) 123 123 123 21 1 21 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 if Ra==n disp('因为Ra=Rb=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 %找出列中最大的元素并指出他的位置

[Y,j]=max(abs(B(p:n,p))); C=B(p,:); B(p,:)= B(j+p-1,:); B(j+p-1,:)=C; for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else disp('因为Ra=Rb> clear; A=[1 2 -2;1 1 1;2 2 1 ]; b=[1;1;1]; [Ra,Rb,n,X] =GaussXQLineMain(A,b) 因为Ra=Rb=n,所以此方程组有唯一解. Ra = 3 Rb = 3 n = 3 X = -3.0000 3.0000 1.0000 方程组(2)过程

列主元消去法

实验一 列主元消去法 【实验内容】1. 掌握列主元消去法的基本思路和迭代步骤 2. 并能够利用列主元的高斯消去法解任意阶数的线性方程组; 【实验方法与步骤】列主元消去法编写程序 1.列主元消去法基本思路 设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 2.列主元高斯消去法算法描述 将方程组用增广矩阵[]()(1)|ij n n B A b a ?+==表示。 步骤1:消元过程,对1,2,,1k n =- (1) 选主元,找{},1,,k i k k n ∈+ 使得 ,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 =+ ; (4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算 .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 =- ,计算 ,11/n i i n ij j ii j i x a a x a +=+??=- ??? ∑ 习题3第一题程序如下

#include #include #define N 3 int I; float max_value(float a[N][N+1],int n,int k) { float max; int i; max=a[k][k]; for(i=k+1;i

Gauss列主元消去法程序设计

《Gauss列主元消去法》实验报告 实验名称:Gauss列主元消去法程序设计???成绩:_________ 专业班级:数学与应用数学1202班?姓名:王晓阳???学号: 实?验?日?期:?2014?年11月10日 实验报告日期:?2014年?11月10日 一.实验目的 1. 学习Gauss消去法的基本思路和迭代步骤. 2. 学会运用matlab编写高斯消去法和列主元消去法程序,求解线性方程组. 3. 当绝对值较小时,采用高斯列主元消去法? 4. 培养编程与上机调试能力. 二、实验内容 用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax二b 化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解 1. 求解一般线性方程组的高斯消去法? (1) 消元过程: 设a kk k-0 ,第i个方程减去第k个方程的m ik Tk k倍,("k 1^1, n),得到 A k1x=b k1.

经过n-1次消元,可把方程组A1^b1化为上三角方程组A n x=b n. ⑵回代过程: 以解如下线性方程组为例测试结果 2. 列主元消去法 由高斯消去法可知,在消元过程中可能出现a kk k =0的情况,这是消去法将无法进行, 即使主元素a kk k-0但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A是菲奇异的. (1)消元过程: 对于k =1,2,川,n -1,进行如下步骤: 1) 按列选主元,记 2) 交换增广阵A的p,k两行的元素 A(k,j)=A(p,j) ( j=k,…,n +1) 3) 交换常数项b的p,k两行的元素。 b(k)=b(p) 4) 计算消元 (2) 回代过程 (3) 以解如下线性方程组为例测试结果 三、实验环境 MATLAB R2014a 四、实验步骤

实验三高斯列主元消去法

实验三 高斯列主元消去法 一、实验目的: 1、掌握高斯消去法的基本思路和迭代步骤。 2、 培养编程与上机调试能力。 二、高斯列主元消去法的基本思路与计算步骤: 设有方程组Ax b =,设A 是可逆矩阵。高斯消去法的基本思想就是僵局真的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 列主元高斯消去法计算步骤: 将方程组用增广矩阵[]()(1)ij n n B A b a ?+== 表示。 步骤1:消元过程,对1,2,,1k n =- (1) 选主元,找{},1,,k i k k n ∈+ 使得 ,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 =+ 。 (4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算 . 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 =- ,计算,11/n i i n ij j ii j i x a a x a +=+??=- ???∑ 三:程序流程图

四:程序清单: function X=uptrbk(A,b) % A是一个n阶矩阵。 % b是一个n维向量。 % X是线性方程组AX=b的解。 [N N]=size(A); X=zeros(1,N+1); Aug=[A b]; for p=1:N-1 [Y,j]=max(abs(Aug(p:N,p)));%返回向量的最大值存入y,最大值的序号存入j。 C=Aug(p,:); Aug(p,:)=Aug(j+p-1,:); Aug(j+p-1,:)=C; if Aug(p,p)==0 'A是奇异阵,方程无惟一解' break end for k=p+1:N m=Aug(k,p)/Aug(p,p); Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1); end end % 这里用到程序函数backsub来进行回代。 X=backsub(Aug(1:N,1:N),Aug(1:N,N+1)); function X=backsub(A,b) % A是一个n阶上三角非奇异阵。 % b是一个n维向量。 % X是线性方程组AX=b的解。 n=length(b);%取b向量的个数。 X=zeros(n,1); X(n)=b(n)/A(n,n); for k=n-1:-1:1 X(k)=(b(k)-A(k,k+1:n)*X(k+1:n))/A(k,k); End 五、测试数据与结果: 测试数据:(第8章习题三第2题)求解线性方程组: 解:建立一个主程序gs.m clc clear A=[1,2,3;5,4,10;3,-0.1,1]; b=[1;0;2];

计算方法实验三线性方程组解法列主元高斯消去法

实验报告 学院:电子信息工程 实验课程:计算方法 学生姓名: 学号: 专业班级:通信工程

实验三线性方程组解法 1 目的与要求 (1)进一步理解和掌握求线性方程组数值解的有关方法和理论。(2)完成利用列主元高斯消去法、雅可比迭代法及高斯-赛德尔迭代法求线性方程组数值解的程序设计。本次实验只需完成列主元高斯消去法的程序设计。 (3)比较三种算法的不同特点。 2 实验内容 通过编制程序,分别用列主元高斯消去法、雅可比迭代法及高斯-赛德尔迭代法计算如下方程组的解。 设初始值为要求满足前后两次迭代结果的差向量的 1 范数小于 3 实验原理 1)列主元高斯消去法 列主元高斯消去法就是在顺序高斯消去法的基础上,每步消元之前都要进行选主元操作,即在第k 步消元前,在第k 列的元素 中选取绝对值最大的元素,设为

,然后交换第 k 行和第 p 行,继续进行消去过程,直到获得上三角方程组,然后通过回代得到方程的根。 4 程序设计 (1)流程图 列主元高斯消去程序流程图 (2)程序代码 #include #include void main() { float a[3][4],x,s; int i,j,m,k; printf("please input coeffient martix array:\n");

for(i=0;i<3;i++) //输入增广矩阵// { for(j=0;j<4;j++) { scanf("%f",&a[i][j]); } } printf("\n"); printf("Output the input matrix"); printf("\n"); for(i=0;i<3;i++) //输出输入的矩阵// { for(j=0;j<4;j++) { printf("%8.4f",a[i][j]); } printf("\n"); } printf("\n"); for(k=0;k<=2;k++) //在不同列中选主元// { m=k;

高斯消元法讲解

#include "Stdio.h" #include "Conio.h" /*L是矩阵的行减1,从程序上看是最外层循环的次数 N 对应矩阵的行数,M对应矩阵的列数 可以通过改变L、N、M来控制矩的阶数 */ #define L 3 #define N 4 #define M 5 void gauss(double a[N][M],double x[N]) {int i,j,l,n,m,k=0; double temp[N]; /*第一个do-while是将增广矩阵消成上三角形式*/ do{n=0; for(l=k;l=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1]; for(m=0,i=k;i>=0;i--,m++) for(j=k;j=0) ; /*下一个for是解方程组*/ for(i=0;i

完整版高斯消元法MATLAB实现

《数值分析》实验报告 一、实验目的与要求 1.掌握高斯消去法的基本思路和迭代步骤; 2.培养编程与上机调试能力。 二、实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 21x?8x?32x?2.137x?3.712x?4.623?1.347x???312312??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312 2.编写用列主元高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 2x?8x?3x?212.137?4.6231.347?x?3.712x?x??321321??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312三.MATLAB计算源程序 AX?b MATLAB1. 程序用高斯消元法解线性方程组的b;输入的量:系数矩阵和常系数向量A RA,RB, n方程组中未知量的个数的秩输出的量:系数矩阵和增广矩阵BA.及其解的信息和有关方程组解X gaus(A,b) function [RA,RB,n,X]=B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('RA~=RB.') ,所以此方程组无解请注意:因为return end if RA==RB if RA==n disp('RA=RB=n.') ,所以此方程组有唯一解请注意:因为X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);

Gauss列主元消去法

贵州师范大学数学与计算机科学学院学生实验报告 课程名称: 数值分析 班级: 数本(一)班 实验日期: 年 月 日 学 号: 090704020098(81) 姓名: 吴胜 指导教师: 杨一都 实验成绩: 一、实验名称 实验五:线性方程组的数值解法 二、实验目的及要求 1. 让学生掌握用列主元gauss 消去法、超松弛迭代法求解线性方程组. 2. 培养Matlab 编程与上机调试能力. 三、实验环境 每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0). 四、实验内容 1. 编制逐次超松弛迭代(SOR 迭代)函数(子程序),并用于求解方程组 ????? ??=-++=+-+=++-=+++-1 4141 4144321 432143214321x x x x x x x x x x x x x x x x 取初始向量T x )1,1,1,1()0(=,迭代控制条件为 5 )1()(10 2 1||||--?≤ -k k x x 请绘制出迭代次数与松弛因子关系的函数曲线,给出最佳松弛因子.SOR 迭代 的收敛速度是否一定比Gauss-Seidel 迭代快? 2. 编制列主元 Gauss 消去法函数(子程序),并用于解 ??? ??=++-=-+-=+-6 15318153312321 321321x x x x x x x x x 要求输出方程组的解和消元后的增广矩阵. 注:题2必须写实验报告 五、算法描述及实验步骤 Gauss 消去法: 功能 解方程组b Ax = . 输入 n ,n n ij a A ?=)(,T n b b b b ),,,(21 =. 输出 方程组的解T n x x x x ),,,(21 =或失败信息.

高斯列主元消去法

数值分析大作业 --――(高斯列主元消去法求解线性方程组) 课程名称:数值分析 授课老师:宋国乡 指导导师:丁振国 学生:王伟伟 学号:0425121523 日期:2004/11/20

高斯列主元消去法解线性方程组 一:问题的提出 我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。实际运算的时候因为只能有限小数去计算,因此只能得到近似值。在实际运算的时候,我们很多时候也常用高斯消去法。但是高斯消去法在计算机中运算的时候常会碰到两个问题。 1.一旦遇到某个主元等于0,消元过程便无法进行下去。 2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。 为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。 二、算法的基本思想 大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。高斯消元法的目的就是把一般线性方程组简化成上三角方程组。于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程

“线性方程组高斯消去法”实验报告(内含matlab程序)

实验一实验报告 一、实验名称:线性方程组高斯消去法。 二、实验目的:进一步熟悉理解Guass 消元法解法思路,提高matlab 编程能力。 三、实验要求:已知线性方程矩阵,利用软件求解线性方程组的解。 四、实验原理: 消元过程: 设0)0(11≠a ,令乘数)0(11 )0(11/a a m i i -=,做(消去第i 个方程组的i x )操作1i m ×第1个方程+第i 个方程(i=2,3,.....n ) 则第i 个方程变为1)1(2)1(2...i n in i b x a x a =++ 这样消去第2,3,。。。,n 个方程的变元i x 后。原线性方程组变 为: ???? ?????=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . . ... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。 回代过程: 在最后的一方程中解出n x ,得:)1()1(/--=n nn n n n a b x

再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解: 其通项为3,...1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk n k j j k kj k k k a x a b x 五、实验内容: A=[1 1 1;0 4 -1;2 -2 1];%?μêy???ó b=[6 5 1]'%3£êy?? num=length(b) for k=1:num-1 for i=k+1:num if A(k,k)~=0 l=A(i,k)/A(k,k); A(i,:)=A(i,:)-A(k,:).*l; b(i)=b(i)-b(k)*l; end end end A b %??′ú?óx x(num)=b(num)/A(num,num); for i=num-1:-1:1 sum=0; for j=i+1:num sum=sum+A(i,j)*x(j); end x(i)=(b(i)-sum)/A(i,i); end x 六、实验结果:

LU分解高斯消元列主元高斯消元matlab代码

数学实验作业 一、矩阵LU分解: function [L,U,p]=lutx(A) [n,n]=size(A); p=(1:n)'; for k=1:n-1 [r,m]=max(abs(A(k:n,k))); m=m+k-1; if (A(m,k)~=0) if (m~=k) A([k m],:)=A([m k],:); p([k m])=p([m k]); end i=k+1:n; A(i,k)=A(i,k)/A(k,k); j=k+1:n; A(i,j)=A(i,j)-A(i,k)*A(k,j); end end L=tril(A,-1)+eye(n,n) U=triu(A) p end 高斯消元法求解方程: n=3; a=[1 2 3 ;4 5 6 ;7 8 9 ]; b=[17 18 19]; l=eye(n); y=1; for i=1:(n-1) for j=1:(n-i) if a(j+(i-1)*n+y)~=0 l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j) for k=1:(n-i+1) a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j)*l(j+(i-1)*n+y) end b(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y); end end y=y+1;

end sum=0; for j=1:n sum=sum+x(j)+a(k,j); end sum=0; for j=1:n x(j)=0; end for k=n:-1:1 for j=1:n sum=sum+x(j)*a(k,j) end x(k)=(b(k)-sum)/a(k,k) sum=0; end 列主元高斯消元法代码: n=3; a=[1 2 3 ;4 5 6 ;7 8 9 ]; b=[17 18 19]; l=eye(n); p=eye(n); ma=0 for i=1:(n-1) for j=i:n if a(j,i)>ma; ma=a(j,i) end end for k=i:n if a(k,i)==ma m=k; end end for j=1:n a1=a(m,j); a(m,j)=a(i,j);

UL分解与高斯消元法实验报告

数值方法实验报告 课程名称:LU分解法与高斯消元法 学院:数学与财经学院 专业:信息与计算科学(金融软件)年级:2011级 姓名:郑荐 学号:201102334023 指导教师:李梦

实验一 【实验名称】 实现LU算法,并利用该算法求解线性方程组 【实验目的】 了解如何用LU三角分解法解线性方程组,利用LU三角分解法解线性方程组 【实验原理】 设无行交换变换的高斯消去法可求解一般线性方程组AX=B,则矩阵A可分解为一个下三角矩阵L和一个上三角矩阵U乘积: A=LU 而且L的对角线元素为1,U的对角线元素非零。得到L和U后,可通过如下步骤得到X: 1.利用向前替换法对方程组L Y=B求解Y。 2.利用回带法对方程组UX=Y求解X。 【实验步骤】 1.输入矩阵A 2.LU分解A,得到L矩阵与U矩阵的值[L U]=LU_1(A) 3.输入矩阵B,利用向前回带法求出Y值Y=upsub(L,B) 4.利用回带发求出X值[X]=backsub(U,Y) 【实验程序】 1.LU分解 代码: function [L U]=LU_1(A) n=length(A(1,:)); L=eye(n); U=zeros(n); for j=1:n U(1,j)=A(1,j); end for i=2:n L(i,1)=A(i,1)/U(1,1); end for k=2:n for j=k:n U(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j); end for i=k+1:n L(i,k)=(A(i,k)-L(i,1:k-1)*U(1:k-1,k))/U(k,k); end end 结果:

数值分析实验二(列主元Gauss消去法)

《数值分析》实验报告 实验编号:实验二 课题名称:列主元Gauss消去法 一、算法介绍 1、输入矩阵的阶数n,方程组的增广矩阵A; 2、对k=0,1,…,n-2,循环:选取列中绝对值最大的元素,将主元所在的行的元素保存在 数组temp[n+1]中。若主元为零,则系数矩阵奇异,计算停止;否则,顺序进行。如果绝对值最大的元素就在矩阵的对角线上,则进行普通高斯消元法的第一大步,否则将方程组系数换行之后再进行普通高斯消元法的第一大步; 3、然后利用回代法求解线性方程组。 二、程序代码 #include #include #include using namespace std; int main() { int n=0,k=0,i=0,j=0,h=0,g=0,flag=0,i1,j1; double max=0,m=0; cout<<"***利用列主元Gauss消元法求解线性方程组***"<>n; double a[n][n+1]; double t[n+1]; double x[n]; memset(a,0,sizeof(a)); memset(x,0,sizeof(x)); cout<<"请输入方程组的增广矩阵:"<>a[i][j]; } } for(k=0;kmax) { max=fabs(a[i][k]); i1=i; j1=k; } } if(max==0)

高斯消元法简介

高斯消元法简介 一,教学目标 知识与技能:了解高斯消元法 过程与方法:直接演示说明,学习做简单练习 情感,态度和价值观:进一步体会解方程组的根本思想消元,通过高斯消元的学习增强学习数学的能力 二,重点与难点:高斯消元法 三,课型:新授课 四,教学过程: 1.在前面的几节课,已经用加减消元和代入消元法求解二元或者三元一次方程组,其基本的思想就是从已知的方程导出未知数较少的方程组,直到最后得到一个一元一次方程,这种做法可适用于一般的n 元线性方程组(线性方程组),但是由于未知数的增加,我们希望我们的消元是有规律的,以避免混乱,下面介绍高斯消元法 2.例1:解方程组 1234123412341234251027612632517315292763 x x x x x x x x x x x x x x x x ---=?? -++-=?? ---=??--++=-? 解:把第一个方程的2倍,-3倍,5倍分别加到第2,3,4个方程上,可以消去2,3,4个 方程的未知数1x 12342342342342510 522226 2 1 7213 x x x x x x x x x x x x x ---=?? +-=?? +-=??--+=-? 为了使以后少出现分数运算,交换第二,三个方程的位置 12342342342342510 2 1 522226 7213 x x x x x x x x x x x x x ---=?? +-=?? +-=??--+=-? 把第2个方程的-5倍,7倍分别加到第3,4个方程,可以消去第3,4个方程未知数2x 123423434342510 2 1 31221 6126 x x x x x x x x x x x ---=?? +-=?? --=??-=-? 整理一下方程,第3个方程的左右两边乘以13 - ,第4个方程左右两边乘以1 6 123423434342510 2 1 47 21 x x x x x x x x x x x ---=?? +-=?? +=-??-=-?

高斯消元法解线性方程组

高斯消元法解线性方程组 C++实验报告2015年6月 一、完成人 王婧婷张子承郗滢 二、问题描述 线性方程组问题是大学阶段经常研究的问题,为了进一步熟悉理解高斯消元法的解题思路并且掌握编程语言在数学方面的应用。且为解决线性方程组问题提供便利,要求给出线性方程组的矩阵,能够输出线性方程组的解。 三、解决方案设计 基本程序流程为: (1)输入矩阵 (2)运用初等行变换将其化为阶梯型矩阵 (3)调用一个函数:r()求其秩(有解时)及其无解情况 实验原理为: (1)系数矩阵及其增广矩阵经过初等行变换所得到的矩阵对应的方程与原方程同解 (2)化为阶梯型矩阵过程(输入增广矩阵后,运用初等行变换,使其a[i][i]以下全为零,若a[i][i]为零,运用行变换交换使其不为零) (3)输出阶梯型矩阵 (4)判断解情况并输出(解情况)

(5)输出解 四、模块及代码组织设计 其基本模块分为三大部分,7小部分。第一部分为输入矩阵阶段,用for语句实现。第二部分是对矩阵进行一系列的处理以求得线性方程组的解,先运用初等行变换化为阶梯型,并输出化简矩阵;然后以线性方程组的秩判断其是否有解(规定无解时秩为零)。第三部分是输出线性方程组的解情况及其解,如果无解即输出无解。 五、关键代码 (1)实现化为阶梯型的代码 实现此功能的代码是整个程序的重要内容,其需要进行的初等变换以实现校园的目的,使线性方程组得到简化。其实现如下: for( i=0; i<=n-1&&i

相关主题
文本预览
相关文档 最新文档