用高斯列主元消元法解线性方程组
用列主元高斯消元法求线性代数方程组的解
课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。
这种解线性方程组的基本方法就是这里要介绍的高斯消去法。
数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。
高斯消元法可以用在电脑中来解决数千条等式及未知数。
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。
用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。
根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。
采用上述高斯消元算法对山东电网220kV 以上的变电站进行拓扑结构分析,结果表明了运用该高斯消元法进行网络拓扑分析的正确性和有效性。
用列主元素法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
然后换行使之变到主元位子上,在进行消元计算。
设)()(k k b X A ,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元,并用MATLAB 软件进行求解。
目录摘要....................................................................................... 错误!未定义书签。
第1章绪论 ......................................................................... 错误!未定义书签。
第2章高斯消元法的算法描述 (2)2.1高斯消元法的原理概述 (2)c231730658" 2.1.1高斯消元法的消元过程 (2)c231730658" 2.1.2高斯消元法的回带过程 (3)c231730658" 2.1.3高斯消元法的复杂度分析 (4)c231730658" 2.2列主高斯消元法原理简介 (5)c231730658" 2.2.1列主高斯消元法的消元过程 (6)c231730658" 2.2.2列主高斯消元法的回带过程 (6)c231730658" 2.2.3列主高斯消元法的算法描述 (6)c231730662"第3章高斯消元法的物理应用 (9)3.1c231730663"电网模型的描述 (9)c231730658" 3.2电网模型的问题分析 (9)c231730658"3.3求解计算 (11)c231730693"参考文献 (13)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
Gauss列主元素消去法实验
Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤; 2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。
通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。
【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。
2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。
要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。
3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。
要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。
4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x(2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。
【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。
实验讲评:实验成绩:评阅教师:200 年 月 日Lab06.Gauss 列主元素消去法实验第一题:1、算法描述:Ⅰ、Gauss 消去法由书上定理5可知 设Ax=b ,其中A ∈R^(n(1)如果()0(1,2,....,1)k kka k n ≠=-,则可通过高斯消去法将Ax=b 约化为等价的 角形线性方程组,且计算公式为:① 消元计算(k=1,2,….,n-1)()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.k k ik ik kk k k k ij ij ik kj k k k iiik k m a a i k n a a m a i j k n b b m b i k n ++==+=-=+=-=+② 回带公式()()()()()1/,()/,1,...,2,1.n n n n nn ni i i i iii j ii j i x b a x ba x a i n =+==-=-∑(2)如果A 为非奇异矩阵,则可通过高斯消去法将方程组Ax=b 约化方程组为上三角矩阵以上消元和回代过程总的乘除法次数为332333nn nn +-≈,加减法次数为32353263nnn n+-≈以上过程就叫高斯消去法。
数值分析计算方法实验报告
end;
end;
X=x;
disp('迭代结果:');
X
format short;
输出结果:
因为不收敛,故出现上述情况。
4.超松弛迭代法:
%SOR法求解实验1
%w=1.45
%方程组系数矩阵
clc;
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
b=[10,5,-2,7]'
b=[10,5,-2,7]'
[m,n]=size(A);
if m~=n
error('矩阵A的行数和列数必须相同');
return;
end
if m~=size(b)
error('b的大小必须和A的行数或A的列数相同');
return;
end
if rank(A)~=rank([A,b])
error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');
3.实验环境及实验文件存档名
写出实验环境及实验文件存档名
4.实验结果及分析
输出计算结果,结果分析和小结等。
解:1.高斯列主元消去法:
%用高斯列主元消去法解实验1
%高斯列主元消元法求解线性方程组Ax=b
%A为输入矩阵系数,b为方程组右端系数
%方程组的解保存在x变量中
format long;
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
return;
end
c=n+1;
A(:,c)=b;
for k=1:n-1
数值计算方法复习题
fuxiti例1证明方程1-x-sin x=0在区间[0,1]内有一个根,使用二分法求误差不超过0.5×10-4的根要迭代多少次?证明令f(x)=1-x-sin x,∵f(0)=1>0,f(1)=-sin1<0∴f(x)=1-x-sin x=0在[0,1]有根.又f'(x)=1-c os x>0(x∈[0.1]),故f(x)=0在区间[0,1]内有唯一实根.给定误差限ε=0.5×10-4,有只要取n=14.例4选择填空题1. 设函数f(x)在区间[a,b]上连续,若满足,则方程f(x)=0在区间[a,b]一定有实根.答案:f(a)f(b)<0解答:因为f(x)在区间[a,b]上连续,在两端点函数值异号,由连续函数的介值定理,必存在c,使得f(c)=0,故f(x)=0一定有根.2. 用简单迭代法求方程f(x)=0的实根,把方程(x)=0表成x=ϕ(x),则f(x)=0的根是( )(A)y=x与y=ϕ(x)的交点(B) y=x与y=ϕ(x)交点的横坐标(C) y=x与x轴的交点的横坐标(D) y=ϕ(x)与x轴交点的横坐标答案:(B)解答:把f(x)=0表成x=ϕ(x), 满足x=ϕ(x)的x是方程的解,它正是y=x与y=ϕ(x)的交点的横坐标.3.为求方程x3―x2―1=0在区间[1.3,1.6]内的一个根,把方程改写成下列形式,并建立相应的迭代公式,迭代公式不收敛的是( )(A)(B)(C)(D)答案:(A)解答:在(A)中故迭代发散.在(B)中,故迭代收敛.在(C)中,,故迭代收敛.在(D)中,类似证明,迭代收敛.例3填空选择题:1. 用高斯列主元消去法解线性方程组作第1次消元后的第2,3个方程分别为。
解答1. 选a21=2为主元,作行互换,第1个方程变为:2x1+2x2+3x3=3,消元得到是应填写的内容。
一、解答下列问题:1) 数值计算中,最基础的五个误差概念(术语)是 , , , , .2) 分别用 2.718281, 2.718282 作数e 的近似值 ,它们的有效位数分别有位, 位; 又取73.13≈ (三位有效数字),则≤-73.13 .3)为减少乘除法运算次数,应将算式32)1(7)1(51318---+-+=x x x y 改写成4)为减少舍入误差的影响,应将算式 9910- 改写成 5)递推公式 ⎪⎩⎪⎨⎧=-==-,2,1,110210n y y y n n如果取41.120≈=y 作计算,则计算到10y 时,误差有这个计算公式数值稳定不稳定 ?1) 绝对误差 , 相对误差 , 有效数字 , 截断误差 , 舍入误差 。
列主元高斯消去法和列主元三角分解法解线性方程
计算方法实验报告1课题名称用列主元高斯消去法和列主元三角分解法解线性方程目的和意义高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法;用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵上三角矩阵、单位矩阵等,而三角形方程组则可以直接回带求解 用高斯消去法解线性方程组b Ax =其中A ∈Rn ×n 的计算量为:乘除法运算步骤为32(1)(1)(21)(1)(1)262233n n n n n n n n n n nMD n ----+=+++=+-,加减运算步骤为(1)(21)(1)(1)(1)(25)6226n n n n n n n n n n AS -----+=++=;相比之下,传统的克莱姆法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19510⨯次乘法,而用高斯消去法只需要3060次乘除法;在高斯消去法运算的过程中,如果出现absAi,i 等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确; 2、列主元三角分解法高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU,并求解Ly=b 的过程;回带过程就是求解上三角方程组Ux=y;所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度计算公式1、 列主元高斯消去法设有线性方程组Ax=b,其中设A 为非奇异矩阵;方程组的增广矩阵为第1步k=1:首先在A 的第一列中选取绝对值最大的元素1l a ,作为第一步的主元素:111211212222112[,]n n n l n nn n a a a a b a a a b a a a b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦a b然后交换A,b 的第1行与第l 行元素,再进行消元计算;设列主元素消去法已经完成第1步到第k -1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组 Akx=bk第k 步计算如下:对于k=1,2,…,n -11按列选主元:即确定t 使 2如果t ≠k,则交换A,b 第t 行与第k 行元素; 3消元计算消元乘数mik 满足:4回代求解2、 列主元三角分解法 对方程组的增广矩阵 经过k -1步分解后,可变成如下形式:111max 0l i i n a a ≤≤=≠(1)(1)(1)(1)(1)1112111(2)(2)(2)(2)22222()(()1)()()()()()1,1()(,)()[,][,] k k k k nk k nk n k k k k k kk kn k k k k n k k k n nn a a a a b a a a b a a b a b b a a a +++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥→=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦A b A b ()()max 0k k tk ik k i na a ≤≤=≠,(1,,)ik ik ik kka a m i k n a ←=-=+, (,1,,), (1,,)ij ij ik kji i ik k a a m a i j k n b b m b i k n ←+=+⎧⎨←+=+⎩⎪⎪⎩⎪⎪⎨⎧--=-←←∑+=)1,,2,1(,)(1n n i a x a b x a b x ii n i j j ij i i nnn n [,]A A b =11121,11111222,122221,11,1,1,211,11,2121,112,112,1k k k k k k k j n k k j n k k k i i i k n n kk kj kn k ik ij in i nknjk k k j k n n nnk k n a a a b A a u u u u u u y l l l l l l ll l l l u u u u u y u u u u y a a b a a b l a -------------⎡→⎣⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎦第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kkm u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mk m s a l u i k k n -==-=+∑,于是有kk u =ks ;如果 ,则将矩阵的第t 行与第k 行元素互换,将i,j 位置的新元素仍记为jjl 或jja ,然后再做第k 步分解,这时列主元高斯消去法程序流程图max t ik i n s s ≤≤= ()/ 1,2,,)1 (1,2,,),kk k k t iki k ik u s s s l s s i k k n l i k k n ===++≤=++即交换前的,(且列主元高斯消去法Matlab主程序function x=gauss1A,b,c %列主元法高斯消去法解线性方程Ax=bif lengthA~=lengthb %判断输入的方程组是否有误disp'输入方程有误'return;enddisp'原方程为AX=b:' %显示方程组Abdisp'------------------------'n=lengthA;for k=1:n-1 %找列主元p,q=maxabsAk:n,k; %找出第k列中的最大值,其下标为p,qq=q+k-1; %q在Ak:n,k中的行号转换为在A中的行号if absp<cdisp'列元素太小,detA≈0';break;elseif q>ktemp1=Ak,:; %列主元所在行不是当前行,将当前行与列主Ak,:=Aq,:; 元所在行交换包括bAq,:=temp1;temp2=bk,:;bk,:=bq,:;bq,:=temp2;end%消元for i=k+1:nmi,k=Ai,k/Ak,k; %Ak,k将Ai,k消为0所乘系数Ai,k:n=Ai,k:n-mi,kAk,k:n; %第i行消元处理bi=bi-mi,kbk; %b消元处理endenddisp'消元后所得到的上三角阵是'A %显示消元后的系数矩阵bn=bn/An,n; %回代求解for i=n-1:-1:1bi=bi-sumAi,i+1:nbi+1:n/Ai,i;endclear x;disp'AX=b的解x是' x=b;调用函数解题列主元三角分解法程序流程图列主元三角分解法Matlab主程序①自己编的程序:function x=PLUA,b,eps %定义函数列主元三角分解法函数if lengthA~=lengthb %判断输入的方程组是否有误disp'输入方程有误'return;enddisp'原方程为AX=b:' %显示方程组Abdisp'------------------------'n=lengthA;A=A b; %将A与b合并,得到增广矩阵for r=1:nif r==1for i=1:nc d=maxabsA:,1; %选取最大列向量,并做行交换if c<=eps %最大值小于e,主元太小,程序结束break;elseendd=d+1-1;p=A1,:;A1,:=Ad,:;Ad,:=p;A1,i=A1,i;endA1,2:n=A1,2:n;A2:n,1=A2:n,1/A1,1; %求u1,ielseur,r=Ar,r-Ar,1:r-1A1:r-1,r; %按照方程求取ur,iif absur,r<=eps %如果ur,r小于e,则交换行p=Ar,:;Ar,:=Ar+1,:;Ar+1,:=p;elseendfor i=r:nAr,i=Ar,i-Ar,1:r-1A1:r-1,i; %根据公式求解,并把结果存在矩阵A中endfor i=r+1:nAi,r=Ai,r-Ai,1:r-1A1:r-1,r/Ar,r; %根据公式求解,并把结果存在矩阵A中endendendy1=A1,n+1;for i=2:nh=0;for k=1:i-1h=h+Ai,kyk;endyi=Ai,n+1-h; %根据公式求解yiendxn=yn/An,n;for i=n-1:-1:1h=0;for k=i+1:nh=h+Ai,kxk;endxi=yi-h/Ai,i; %根据公式求解xiendAdisp'AX=b的解x是'x=x'; %输出方程的解②可直接得到P,L,U并解出方程解的的程序查阅资料得子函数PLU1,其作用是将矩阵A分解成L乘以U的形式;PLU2为调用PLU1解题的程序,是自己编的Ⅰ.function l,u,p=PLU1A %定义子函数,其功能为列主元三角分解系数矩阵A m,n=sizeA; %判断系数矩阵是否为方阵if m~=nerror'矩阵不是方阵'returnendif detA==0 %判断系数矩阵能否被三角分解error'矩阵不能被三角分解'endu=A;p=eyem;l=eyem; %将系数矩阵三角分解,分别求出P,L,Ufor i=1:mfor j=i:mtj=uj,i;for k=1:i-1tj=tj-uj,kuk,i;endenda=i;b=absti;for j=i+1:mif b<abstjb=abstj;a=j;endendif a~=ifor j=1:mc=ui,j;ui,j=ua,j;ua,j=c;endfor j=1:mc=pi,j;pi,j=pa,j;pa,j=c;endc=ta;ta=ti;ti=c;endui,i=ti;for j=i+1:muj,i=tj/ti;endfor j=i+1:mfor k=1:i-1ui,j=ui,j-ui,kuk,j;endendendl=trilu,-1+eyem;u=triuu,0Ⅱ.function x=PLU2A,b %定义列主元三角分解法的函数l,u,p=PLU1A %调用PLU分解系数矩阵A m=lengthA; %由于A左乘p,故b也要左乘p v=b;for q=1:mbq=sumpq,1:mv1:m,1;endb1=b1 %求解方程Ly=b for i=2:1:mbi=bi-sumli,1:i-1b1:i-1;endbm=bm/um,m; %求解方程Ux=y for i=m-1:-1:1bi=bi-sumui,i+1:mbi+1:m/ui,i;endclear x;disp'AX=b的解x是' x=b;调用函数解题①②编程疑难这是第一次用matlab编程,对matlab的语句还不是非常熟悉,因此在编程过程中,出现了许多错误提示;并且此次编程的两种方法对矩阵的运算也比较复杂;问题主要集中在循环控制中,循环次数多了一次或者缺少了一次,导致数据错误,一些基本的编程语句在语法上也会由于生疏而产生许多问题,但是语句的错误由于系统会提示,比较容易进行修改,数据计算过程中的一些逻辑错误,比如循环变量的控制,这些系统不会提示错误,需要我们细心去发现错误,不断修正,调试;。
高斯列主元消元法解线性方程组
高斯列主元消元法解线性方程组一、题目:用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)二、原理及步骤分析设nn ij R a A ⨯∈=][)1(,nn Rb 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 ni k kk i a a k ≤≤=并将第k 行元与第k i 行元互换。
数值计算方法复习题
fuxiti例1证明方程1-x-sin x=0在区间[0,1]内有一个根,使用二分法求误差不超过0.5×10-4的根要迭代多少次?证明令f(x)=1-x-sin x,∵f(0)=1>0,f(1)=-sin1<0∴f(x)=1-x-sin x=0在[0,1]有根.又f'(x)=1-c os x>0(x∈[0.1]),故f(x)=0在区间[0,1]内有唯一实根.给定误差限ε=0.5×10-4,有只要取n=14.例4选择填空题1. 设函数f(x)在区间[a,b]上连续,若满足,则方程f(x)=0在区间[a,b]一定有实根.答案:f(a)f(b)<0解答:因为f(x)在区间[a,b]上连续,在两端点函数值异号,由连续函数的介值定理,必存在c,使得f(c)=0,故f(x)=0一定有根.2. 用简单迭代法求方程f(x)=0的实根,把方程(x)=0表成x=ϕ(x),则f(x)=0的根是( )(A)y=x与y=ϕ(x)的交点(B) y=x与y=ϕ(x)交点的横坐标(C) y=x与x轴的交点的横坐标(D) y=ϕ(x)与x轴交点的横坐标答案:(B)解答:把f(x)=0表成x=ϕ(x), 满足x=ϕ(x)的x是方程的解,它正是y=x与y=ϕ(x)的交点的横坐标.3.为求方程x3―x2―1=0在区间[1.3,1.6]内的一个根,把方程改写成下列形式,并建立相应的迭代公式,迭代公式不收敛的是( )(A)(B)(C)(D)答案:(A)解答:在(A)中故迭代发散.在(B)中,故迭代收敛.在(C)中,,故迭代收敛.在(D)中,类似证明,迭代收敛.例3填空选择题:1. 用高斯列主元消去法解线性方程组作第1次消元后的第2,3个方程分别为。
解答1. 选a21=2为主元,作行互换,第1个方程变为:2x1+2x2+3x3=3,消元得到是应填写的内容。
一、解答下列问题:1) 数值计算中,最基础的五个误差概念(术语)是 , , , , .2) 分别用 2.718281, 2.718282 作数e 的近似值 ,它们的有效位数分别有位, 位; 又取73.13≈ (三位有效数字),则≤-73.13 .3)为减少乘除法运算次数,应将算式32)1(7)1(51318---+-+=x x x y 改写成4)为减少舍入误差的影响,应将算式 9910- 改写成 5)递推公式 ⎪⎩⎪⎨⎧=-==-,2,1,110210n y y y n n如果取41.120≈=y 作计算,则计算到10y 时,误差有这个计算公式数值稳定不稳定 ?1) 绝对误差 , 相对误差 , 有效数字 , 截断误差 , 舍入误差 。
用高斯列主元消元法解线性方程分析解析
沈阳航空工业学院课程设计学号2008040201105班级84020103姓名李荣飞指导教师尹航2009年9月11日沈阳航空工业学院课程设计任务书电子信息工程学院电子信息工程专业84020103班学号2008040201105一、课程设计题目:用高斯列主元消元法解线性方程二、课程设计工作自2009年9月6日起至2009年9月11日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,拥有以下功能:请用高斯列主元消元法解以下方程组:2x12x25x3 53x14x27x3 6x13x23x3 5四、课程设计要求:程序质量:贯彻构造化程序设计思想。
用户界面友善,功能明确,操作方便;能够加以其余功能或修饰。
用户界面中的菜单起码应包含“输入数据”、“开始计算”、“退出”3项。
代码应适合缩进,并给出必需的说明,以加强程序的可读性。
课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容以下:封面课程设计任务书目录需求剖析(剖析题目的要求)程序流程图(整体流程图和主要功能模块流程图)中心技术的实现说明及相应程序段个人总结参照资料源程序及适合的说明指导教师:________学生署名:________目录一、需求剖析1二、程序流程图2三、中心技术的实现说明及相应程序段8四、个人总结11五、参照文件11六、源程序 (11)沈阳航院设计用纸一、需求剖析经过对程序设计题目的剖析可知,整个程序的设计实现大概分为三个模块,分别是:输入方程组,计算方程组,持续运算/退出。
计算方程组模块对应三个函数,其函数名和功能以下:一、互换行的距函数(huanhang):主要实现线性代数高斯列主元消元法求解线性方程组中的初等行变换。
二、比较系数大小的函数(bijiao):实现比较系数大小的算法。
三、实现菜单项选择择的函数(caidan):使用户界面友善,操作方便。
除上边介绍的功能以外,程序还拥有“持续运算/退出”功能,能够在程序的一次运转中间循环履行全部的功能,并依据需要,停止程序的履行。
Gauss消元法解解线性方程组
摘要本文叙述了Gauss 顺序消元法解线性方程的算法思想以及其求解过程,同时简要叙述了Gauss 主元素消元法以及Gauss 全主元消元法。
紧接着给出了Gauss Seidel -迭代法的算法思想,本文给出了这三个消元方法以及一个迭代法的算法流程图,由于全主元消元法是前两个算法的基础上改进而来,故本文采用第三种方法进行编程计算,前两种方法不再重复编程,然后给出一个实例的计算结果,运行时间,在文章最后分析该实例的计算结果,针对同一实例,又采用Gauss Seidel -方法编程实现,然后对结果进行分析和对比。
最后给出了本人在编程时遇到的一些问题和解决办法。
关键词:Gauss 顺序消元法 Gauss 主元素消元法 Gauss 全主元消元法一、算法的简要描述1.1Gauss 顺序消元法Gauss 消元法在中学里已经学习过,其方法实质,就是运用初等变换,将线性方程组Ax b =转化为同解的上三角矩阵方程组1Ux L b -=(1.1.1)其中,U 为上三角矩阵,L 为下三角矩阵。
然后对式(1.1.1)进行回代求解,即得方程组的解。
手算的过程是非常清楚的,现在需回答的是计算机求解,如何实现上述计算过程。
设线性方程组为1111221331121122223322112233n n n n n n n nn n na x a x a x a xb a x a x a x a x b a x a x a x a x b +++⋅⋅⋅+=⎧⎪+++⋅⋅⋅+=⎪⎨⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⎪⎪+++⋅⋅⋅+=⎩ 写成矩阵形式为1112111212222221222m m m n n a a a x b aa a xb a a a x b ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦(1.1.2)设线性方程组如上式所示,记(1)A A =,(1)b b =,与是增广矩阵具有形式(1)(1)[][]A b A b =,此时方程组为(1)(1)A x b =。
作业一 高斯消元法和列主元消元法
用高斯消元法和列主元消去法求解线性代数方程组(X*是方程组的精确解)1 高斯消去法1.1 基本思想及计算过程高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。
为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。
⎪⎩⎪⎨⎧=++II =++I =++III)(323034)(5253)(6432321321321x x x x x x x x x 把方程(I )乘(23-)后加到方程(II )上去,把方程(I )乘(24-)后加到方程(III )上去,即可消去方程(II )、(III )中的x 1,得同解方程组⎪⎩⎪⎨⎧=+-II -=-I =++III)(20223)(445.0)(64323232321x x x x x x x将方程(II )乘(5.03)后加于方程(III ),得同解方程组: ⎪⎩⎪⎨⎧-=-II -=-I =++III)(42)(445.0)(6432332321x x x x x x由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。
下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。
⎪⎪⎩⎪⎪⎨⎧=++++=++++=+++++++1,3322111,223232221211,11313212111n n n nn n n n n n n n n n a x a x a x a x a a x a x a x a x a a x a x a x a x a(1-1)如果a 11 ≠ 0,将第一个方程中x 1的系数化为1,得)1(1,1)1(12)1(121+=+++n n n a x a x a x其中)0(11)0()1(1aa aijj=, j = 1, …, n + 1(记ij ij a a =)0(,i = 1, 2, …, n ; j = 1, 2, …, n + 1)从其它n –1个方程中消x 1,使它变成如下形式⎪⎪⎩⎪⎪⎨⎧=++=++=++++++)1(1,)1(2)1(2)1(1,2)1(22)1(22)1(1,1)1(12)1(121n n n nn n n n n n n n a x a x a a x a x a a x a x a x(1-2)其中n i a m a aij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。
Gauss消去法和列主元消去法
max=abs(C(s,s));big=0;
if det(C(s:n,s:n))==0
disp('此方程无解');
answer=0;
break;
end
for i=s:n
if max<abs(C(i,s))
max=abs(C(i,s));
k=i;
big=1;
else continue
for i=n:(-1):1
X(i,1)=C(i,n+1);
for j=(i+1):n
X(i,1)=X(i,1)-E(i,j)*X(j,1);
end
X(i,1)=X(i,1)/E(i,i);
ห้องสมุดไป่ตู้end
disp('此方程的解为:')
X
end
5、实验结果
请输入未知数系数矩阵A:
A=[2,-1,3;4,2,5;1,2,0]
3、实验原理
高斯列主元消去法
4、实验内容
clc;clear;format short
disp('请输入未知数系数矩阵A:');
A=input('A=');
disp('请输入常数项列向量B:');
B=input('B=');
C=[A,B];
[m,n]=size(A);
s=1;answer=1;P=zeros(1,n);L=zeros(n);I=eye(n);
y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;
break;
作业一 高斯消元法和列主元消元法
用高斯消元法和列主元消去法求解线性代数方程组(X*是方程组的精确解)1 高斯消去法1.1 基本思想及计算过程高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。
为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。
⎪⎩⎪⎨⎧=++II =++I =++III)(323034)(5253)(6432321321321x x x x x x x x x 把方程(I )乘(23-)后加到方程(II )上去,把方程(I )乘(24-)后加到方程(III )上去,即可消去方程(II )、(III )中的x 1,得同解方程组⎪⎩⎪⎨⎧=+-II -=-I =++III)(20223)(445.0)(64323232321x x x x x x x将方程(II )乘(5.03)后加于方程(III ),得同解方程组: ⎪⎩⎪⎨⎧-=-II -=-I =++III)(42)(445.0)(6432332321x x x x x x由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。
下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。
⎪⎪⎩⎪⎪⎨⎧=++++=++++=+++++++1,3322111,223232221211,11313212111n n n nn n n n n n n n n n a x a x a x a x a a x a x a x a x a a x a x a x a x a(1-1)如果a 11 ≠ 0,将第一个方程中x 1的系数化为1,得)1(1,1)1(12)1(121+=+++n n n a x a x a x其中)0(11)0()1(1aa aijj=, j = 1, …, n + 1(记ij ij a a =)0(,i = 1, 2, …, n ; j = 1, 2, …, n + 1)从其它n –1个方程中消x 1,使它变成如下形式⎪⎪⎩⎪⎪⎨⎧=++=++=++++++)1(1,)1(2)1(2)1(1,2)1(22)1(22)1(1,1)1(12)1(121n n n nn n n n n n n n a x a x a a x a x a a x a x a x(1-2)其中n i a m a aij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。
高斯列主元消去法优缺点
高斯列主元消去法优缺点
高斯列主元消去法是解线性方程组的一种常用方法。
它的优点是
可以有效地求解大规模线性方程组,计算精度高,稳定性强,并且可
以通过程序自动化计算。
此外,高斯列主元消去法的求解过程简单明了,易于理解和掌握,对于初学者也比较友好。
不过,高斯列主元消去法也存在一些缺点。
首先,在解决某些具
有特殊形式的线性方程组时,可能需要进行额外的操作,如部分主元
消去、对角线支配等,导致计算难度和复杂度增加。
其次,高斯列主
元消去法在求解稀疏矩阵时,可能会出现计算复杂度较高的情况,甚
至无法求解。
此外,高斯列主元消去法还可能面临误差传播和舍入误差等问题,导致求解结果略有偏差。
综合考虑,高斯列主元消去法在解决一般的
线性方程组问题时,是一种可靠、实用的方法。
但在某些特殊情况下,可能需要选择其他更适合的方法来求解。
解线性方程组的列主元素高斯消去法和lu分解法
数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、算法描述:本次试验采用的是高斯列主元消去法和LU分解法求解线性方程组的解。
其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件: 当A可逆时,列主元Gauss(高斯)消去法一定能进行到底。
优点: 具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。
列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。
注意:省去换列的步骤,每次仅选一列中最大的元。
矩阵的三角分解法是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 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组3.01 6.03 1.99 x1 11) 1.27 4.16 1.23 x2 10.987 4.81 9.34 x3 110 7 0 1 x1 83 2.099999 6 2 x2 5.9000012) 5 1 5 1x3 52 1 0 2 x4 1a、用你熟悉的算法语言编写程序用列主元高斯消去法和LU分解求解上述两个方程组,输出Ax=b 中矩阵 A 及向量b, A=LU 分解的L 及U,detA 及解向量x.b、将方程组(1)中系数 3.01 改为 3.00 ,0.987 改为0.990 ,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。
计算方法实验报告_列主元高斯消去法
row_first=A[i][i]; for(int j=0;j<n+1;j++)
计算方法实验报告
{ A[i][j]=A[i][j]/row_first;
} }
for(int k=n-1;k>0;k--) {
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
A_B[i][j]=A[i][j]; } A_B[i][N]=B[i][0]; } return A_B; }
3
//输出矩阵 A 的 row x col 个元素 void Show_Matrix(double **A,int row,int col) {
for(int i=0;i<N;i++)
{
int row=Choose_Colum_Main_Element(N,A_B,i);
if(Main_Element<=e) goto A_0;
Exchange(A_B,N+1,row,i);
Elimination(N,A_B,i);
cout<<"选取列主元后第"<<i+1<<"次消元:"<<endl;
double factor; for(int i=start+1;i<n;i++) {
factor=A[i][start]/A[start][start]; for(int j=start;j<n+1;j++) {
高斯消元法和列主元消元法
用第二列的3、4行除以 k22得
- 25 - 5 = 11 = k 32 90 18 11
k
42
=
3 1 9 1
2 1 = 0 1
16 45
第三行减去第二行乘以 k 3 2 , 第四行减去第二行乘以k 4 2 。
由以上可得:
骣 1 5 ç11 ç ç 32 ç 0 19 ç ç 11 11 ç ç ç ç 1870 ç0 0 ç ç 198 ç ç ç ç 0 0 - 1727 ç ç 桫 495 - 4 25 11 1133 198 8195 495 13 ÷ ÷ ÷ 147 ÷ ÷ ÷ 11 ÷ ÷ ÷ ÷ 3003 ÷ ÷ ÷ ÷ 198 ÷ ÷ ÷ 6468 ÷ ÷ ÷ ÷ 495 ÷
- 4 25 11 1133 198 3421705518 183278700
÷ ÷ ÷ ÷ 147 ÷ ÷ ÷ 11 ÷ ÷ ÷ ÷ 3003 ÷ ÷ ÷ ÷ 198 ÷ ÷ 3421705518 ÷ ÷ ÷ ÷ 183278700 ÷
13
回代过程可得:
X 4 = 1; X 3 = 1; X 2 = 1; X 1 = 1;
1 k 41 = 11
第二行减去第一行乘以 k 21 , 第三行减去第一行乘以 第四行减去第一行乘以
k k
31
,
。
41
由此上可得:
骣 1 ç11 ç ç 90 ç0 ç ç 11 ç ç ç ç ç 0 - 25 ç ç 11 ç ç ç 32 ç0 ç ç 桫 11 5 - 4 13 ÷ ÷ ÷ 32 25 147 ÷ ÷ ÷ 11 11 11 ÷ ÷ ÷ ÷ 95 56 126 ÷ ÷ ÷ ÷ 11 11 11 ÷ ÷ ÷ - 27 191 196 ÷ ÷ ÷ ÷ 11 11 11
解线性方程组实验
实验报告专用纸实验项目名称解线性方程组的直接法课程名称数值方法教师评语及成绩:实验成绩:教师签字:(请按照实验报告的有关要求书写。
一般必须包括:1、实验目的;2、实验内容;3、实验步骤与方法;4、实验数据与程序清单;5、出现的问题与解决方法;6、实验结果、结果分析与体会等内容)1、实验目的(1)掌握Gauss消元法及Gauss列主元消去法,能用这两种方法求解线性方程组;(2)掌握平方根法与追赶法;(3)掌握相应数值算法的程序编写;(4)理解方程组的性态、条件数及误差分析。
2、实验内容1.应用高斯消元法和高斯列主元素法解线性方程组Ax=b。
2.解线性方程组Ax=b的LU分解法。
用熟悉的算法语言编写程序,用高斯消去法和高斯列主元消去法求解方程组,输出Ax=b 中矩阵A、b、解向量x及detA。
3、实验步骤和方法(1)要求上机实验前先编写出程序代码;(2)编辑录入程序;(3)调试程序并记录调试过程中出现的问题及修改程序的过程;(4)经反复调试后,运行程序并验证程序运行是否正确;(5)记录运行时的输入和输出;(6)对程序的运行结果进行分析;(7)根据实验情况和结果撰写并提交实验报告。
4、实验原理(1)实验结果图1Gauss消元法图2Gauss消元法近似为0(2)结果分析在Gauss消元法中,可以看到3的值是一个非常接近于0的数,如果将消元后的系数矩阵打印出来,可以看到消元后的系数矩阵并不是一个真正的上三角矩阵,下三角部分有几处是绝对值极小的值,这是由于计算机的浮点计算造成的,浮点在计算机中本身就不是一个精确的数,在消元的过程中,一些浮点运算有误差,最后得到的是近似值而不是0。
消元法实验报告7
西京学院数学软件实验任务书《数值分析》实验报告实验一一、实验目的与要求课程名称数学软件实验 班级 *** 学号 *** 姓名 ***实验课题线性方程组高斯消去法,高斯列主元消去法,高斯全主元消去法实验目的 熟悉线性代数方程组高斯消去法,高斯列主元消去法,高斯全主元消去法实验要求 运用Matlab/C/C++/Java/Maple/Mathematica 等其中一种语言完成实验内容线性方程组高斯消去法线性方程组高斯列主元消去法线性方程组高斯全主元消去法成绩教师1.掌握高斯列主元消去法解线性方程组的基本思路;2.了解一些计算机的算法,会以某种汇编语言实现算法结果(本实验主要用matlab编程)二、实验内容1.编写用高斯列主元消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.(1)12312312321322323x x xx x xx x x+-=⎧⎪-++=⎨⎪-+=⎩(2)1231231232423536x x xx x xx 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)>0disp('因为Ra不等于Rb,所以此方程组无解.')returnendif Ra==Rbif Ra==ndisp('因为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:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); endendb=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('因为Ra=Rb<n,所以此方程组有无穷多解.') endend%调用格式% clear;% A=[1 2 3;4 5 6;7 8 9 ];% b=[21;22;23];% [Ra,Rb,n,X] =GaussXQLineMain(A,b)三、实验过程方程组(1)过程>> clear;A=[1 2 -1;-3 1 2;3 -2 1 ];b=[1;2;3];[Ra,Rb,n,X] =GaussXQLineMain(A,b) 因为Ra=Rb=n,所以此方程组有唯一解.Ra =3Rb =3n =3X =1.00001.00002.0000方程组(2)过程clear;A=[2 -1 1;-1 -2 3;1 3 1 ];b=[4;5;6];[Ra,Rb,n,X] =GaussXQLineMain(A,b) 因为Ra=Rb=n,所以此方程组有唯一解.Ra =3Rb =3n =3X =1.11110.77782.5556在MATLAB中利用逆矩阵法检验结果:(1) 在command windows中直接运行命令:A=[2 -1 1;-1 -2 3;1 3 1 ];b=[4;5;6];X=A\b结果X =1.00001.00002.0000(2) 在command windows中直接运行命令:A=[2 -1 1;-1 -2 3;1 3 1 ];b=[4;5;6];X=A\b结果X =1.11110.77782.5556四、实验总结此实验主要是熟悉高斯列主元消元法的思想,加深对matlab语言程序编写的练习,在实验过程中函数编写实现不了,最后参考matlab算法通过完成实验,学会了matlab函数的调用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%f",&A[i][j]);
}
for(k=1;k<=n-1;k++)
{
ark=mymax(k);
if(ark==0)/*判断线性方程组是否合法*/
{
printf("\n\n此方程组无解!");message();
}
else if(f!=k)
change(f,k);
按照解题的思路,整个程序大概由以下几个部分组成:输入方程组;判断线性方程组是否合法;交换行的矩函数(change);比较系数大小的函数(mymax);菜单的选择(message);开始计算;退出程序等。除了以上主要部分外,程序还用到了if.和switch选择语句,对程序的进一步简化起到重要作用,使源程序显的更加简洁明了。
三、课程设计要求
1.程序质量:
贯彻结构化的程序设计思想。
用户界面友好,功能明确,操作方便。
用户界面中的菜单至少应包括“输入数据”、“开始计算”、“退出”3项。
代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。
int r,k,i,j;
char celect;
printf("\n\n用Gauss列主元消元法解线性方程组");
printf("\n\n1.开始解方程组请按Enter.");
printf("\n\n2.退出程式请按Esc.");
celect=getch();
if(celect==Esc)
exit(0);
#define Esc 0x1b
#define Enter 0x0d
float A[number][number+1] ,ark;
int f,n;
change(int r,int k);
float mymax(int m);
message();
main()
{
float x[number];/*定义数组X[]用于储存方程组的解*/
}
message();
}
change(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];
六、参考文献
1 谭浩强.C程序设计.北京:清华大学出版社,2005
2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006
七、源程序
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define number 40/*宏定义(若线性方程组的维数大可以把number定义的值更大些)*/
1、此模块通过change()函数改变矩阵行的顺序,具体程序段如下:
change(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++)
二、需求分析
方法说明(以4阶为例):
第1步消元——在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b)做初等行变换使原方程组转化为如下形式:
第2步消元——在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:
{
float p1=0;
for(j=k+1;j<=n;j++)
{
p1=p1+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-p1)/A[k][k];
/*对线性方程组求解的运算(依次求的前面的、未知树的解)*/
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
第3步消元——在增广矩阵(A,b)中的第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:
按x4x3x2x1的顺序回代求解出方程组的解
附:下面三种变换称为初等行变换:
1对调两行;
2以数k≠0乘某一行中的所有元素;
3把某一行所有元素的k倍加到另一行对应的元素上去。
printf("\n\n请输入方程组维数:n=");
scanf("%d",&n);
printf(" \n\n现在输入方程组系数矩阵A和向量b:");
for(i=1;i<=n;i++)
{
printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i,i,n,i);
/*把线性方程的系数复于数组中*/
{
printf("\n\n继续运算按Enter ,退出程式按Esc!");
switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n\n不合法的输入!");message();}
}
}
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--)
A[k][i]=A[0][i];}
2、此模块通过mymax()函数实现矩阵行的升序排列,具体程序段如下:
float mymax(int m) /*比校系数大小的函数*/
{
int i;
floatp2=0;
for(i=m;i<=n;i++)
if(fabs(A[i][m])>p2)
{
P2=fabs(A[i][m]);
三、程序流程图
总体流程图(一)
变换行的函数流程图(二)
判断系数大小的流程图(三)
实现菜单选择的流程图(四)
程序运行结果如图:
(图一)
(图二)
若线性方程组为四维方程时:
(图三)
四、核心技术的实现方法及程序段
源程序主要由三个自定义函数和一个主函数组成,其中主函
数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数中交换行的距函数、比较系数大小的函数和实现菜单选择的函数是程序中较为核心的部分,下面分别进行说明:
四、指导教师和学生签字
指导教师:________学生签名:________
五、成绩:
六、教师评语:
一、程序设计题目1
二、需求分析(高斯列主元消元法)1
三、程序流程图3
四、核心技术的实现方法及程序段6
五、个人总结8
六、参考文献9
七、源程序9
一、程序设计题目
用C语言编写软件完成以下任务:
请用高斯列主元消元法解下列线性方程组:
沈阳航空工业学院
课程设计
班级:6402104班
学号:1139
姓名:郑松
指导教师:刘成
07年9月14日
课程设计任务书
院系:电子 专业:电子信息工程 班级:6402104
学号:
一、课程设计时间
2007年9月10日至2007年9月14日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
请用高斯列主元消元法解下列线性方程组:
}
float mymax(int m)/*比较系数大小的函数*/
{
int i;
float p2=0;
for(i=m;i<=n;i++)
if(fabs(A[i][m])>p2)
/*对数组中的元素进行取绝对值比较大小的运算*/
{
p2=fabs(A[i][m]);
f=i;
}
return p2;
}
message()/*菜单选择的函数*/
f=i;
}
returnp2;
}
3、模块通过message函数实现程序的重新运算,否则退出,错误则不执行,至此程序完毕,具体程序段如下:
message() /*实现菜单选择的函数*/
{
printf("\n\n继续运算按Enter ,退出程式按Esc!");
switch(getch())
{
case Enter: main();