搜档网
当前位置:搜档网 › 高斯列主消元法求解方程 c语言程序报告

高斯列主消元法求解方程 c语言程序报告

高斯列主消元法求解方程  c语言程序报告
高斯列主消元法求解方程  c语言程序报告

HUNAN UNIVERSITY 程序设计训练报告

专业班级材料科学与工程四班

指导老师

院长 (系主任)

2012 年6 月30 日

目录

1 软件开发平台 (1)

2 软件功能说明 (1)

2.1 功能分析说明 (1)

2.2 功能说明图 (4)

3 软件设计详细内容 (5)

3.1 采用的主要数据结构类型 (5)

3.2 流程图 (5)

4 软件测试 (11)

4.1 软件测试用例 (11)

4.2 软件测试报告 (16)

5 总结和致谢 (16)

6 附录 (17)

6.1 源码 (17)

6.2 二人分工说明 (22)

6.3 参考文献 (22)

1软件开发平台

Visul C++ 6.0

2软件功能说明

用高斯列主消元法求解方程个数不超过15个的线性方程组

2.1 功能分析说明

线性方程组可以表示为以下形式:

通解于:

方程等价于AX=b

对其增广矩阵进行初等行换不改变方程组的解,从而将其化为简单形式来求解方程组。

|A|= (-1)21(j j t)3jn j a11j a22j…a njn

&calculate(intn,int m)功能:

quanpailie_A()功能: 计算一个全排列(-1)

21(j j t )

3jn j a 11j a 22j …a njn 的值

gauss_row_xiaoqu()功能: 将增广矩阵

通过交换两行的方法使得第一列中a 11绝对值最大

第二行各元素分别减去第一行对应元素的a 21/a 11倍,使得a 21化为零; 第三行各元素分别减去第一行对应元素的a 31/a 11倍,使得a 31化为零; 同理将a 31,a 41…a 1n 都化为零;

通过交换两行的方法使得第一列中a 22绝对值最大

第三行各元素分别减去第二行对应元素的a 32/a 22倍,使得a 32化为零; 第四行各元素分别减去第二行对应元素的a 42/a 22倍,使得a 42化为零; 同理将a 32,a 42…a 2n 都化为零;

以此类推,可将主对角线下的元素全化为零,变为上三角矩阵。 gauss_calculate ()功能

化为上三角矩阵之后,增广矩阵最后一行可以表示为

nn a x n =b

解得x n =n b /nn a 倒数第二行可以表示为 a 11--n n x 1-n +a n n 1-x n =b 1-n 解得x 1-n = (b 1-n - a n n 1-x n )/2

依次按照此法可以求出个未知量对应的值 gauss_row ()功能:

调用函数calculate_A(n ,m)计算行列式| A|的值,调用函数gauss_row_xiaoqu()将(A |b )化为上三角矩阵,调用函数gauss_calculate ()计算未知量的值。

若行列式不为零,输出“系数行列式不为零,有唯一解”,并输出解;若行列式为零,输出“系数行列式为零,无唯一解”。

exchange _han(m,n)功能:

交换a[][]与b[]即(A |b)中m行和n行对应元素的值。

exchange(m,i)功能:

交换A_y[m]与A_y[i]的值。

input()功能:

输入函数个数,若大于15,则提醒重新输入;

若小于15,则按照提示输入方程组对应得增广矩阵,并备份数据。

2.2 功能说明图

3软件设计详细内容3.1 采用的主要数据结构类型

#include

#include

#include

#include"bios.h"

一位数组

二维数组

3.2 流程图

主流程图:

函数calculate_A()流程图:

函数gauss_row_xiaoqu()流程图

函数exchange_hang()流程图:

函数gauss_calculate()流程图:

4软件测试

4.1软件测试用例

一.方程组有唯一解得情况:1.开始界面

2.输入方程个数

3.输入方程的增广矩阵

4.输出结果

二.方程组无唯一解得情况:1.开始界面

2.输入方程个数

3.输入方程的增广矩阵

4.输出结果

三.方程个数大于15的情况

1.开始界面

2.输入大于15的数,提示重新输入

4.2软件测试报告

5总结和致谢

在C程序的编写当中,发现很多很棘手的问题。线性方程组的求解是抽象的数学问题,其中涉及大量变量,因此采用了数组。在进行矩阵的初等行变换时,由于细节问题处理的不

够好,导致了多次编译不得通过,最后是反复修改,反复试验,再请同学指导的情况下才最终使得编译成功。后期主要完成对程序进行细节上的完善,和训练报告的写作。期间流程图的画法以及Word的使用也花费了大把精力。虽然过程需要一定的耐心和细心,最终在两人的合作下共同完成了报告,最终还是感觉受益很多。

6附录

6.1源码

#include

#include

#include

#include

//----------------------------------------------全局变量定义区

#define Number 15 //方程最大个数

double a[Number][Number], b[Number], copy_a[Number][Number], copy_b[Number]; //系数行列式

int A_y[Number]; //a[][]中随着横坐标增加列坐标的排列顺序,如a[0][0],a[1][2],a[2][1]...则A_y[]={0,2,1...};

int lenth, copy_lenth; //方程的个数

double a_sum; //计算行列式的值

char *x; //未知量a,b,c的载体

//----------------------------------------------函数声明区

void input(); //输入方程组

void print_menu(); //打印主菜单

void gauss_row(); //Gauss列主元解方程组

double quanpailie_A(); //根据列坐标的排列计算的值,如A_y[]={0,2,1},得sum=a[0][ A_y[0] ] * a[1][ A_y[1] ] * a[2][A_y[2] ]=a[0][0]*a[1][2]*a[2][1];

double &calculate_A(int n,int m);

void exchange(int m, int i); //交换A_y[m],A_y[i]

void exchange_hang(int m, int n); //分别交换a[][]和b[]中的m与n两行

void gauss_row_xiaoqu(); //Gauss列主元消去法

void gauss_calculate(); //根据Gauss消去法结果计算未知量的值

//主函数

void main()

{

input(); //输入方程

print_menu(); //打印主菜单

gauss_row();

}

//函数定义区

void print_menu()

{

system("cls");

cout << "------------方程系数和常数矩阵表示如下:\n";

for(int j = 0; j < lenth; j++)

cout << "系数" << j + 1 << " ";

cout << "\t常数";

cout << endl;

for(int i = 0; i < lenth; i++)

{

for(j = 0; j < lenth; j++)

cout << setw(8) << setiosflags(ios::left) << a[i][j];

cout << "\t" << b[i] << endl;

}

}

void input()

{

int i, j;

do

{ cout << "方程的个数:";

cin>>lenth;

if(lenth>15)

cout<<"It's too big."<

}while(lenth>15);

x = new char[lenth];

for(i = 0; i < lenth; i++)

x[i] = 'a' + i;

//输入方程矩阵

//提示如何输入

cout << "====================================================\n"; cout << "请在每个方程里输入" << lenth << "系数和一个常数:\n";

cout << "例:\n方程:a";

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

{

cout << "+" << i + 1 << x[i];

}

cout << "=10\n";

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

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

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

高斯列主元消元法解线性方程组 一、题目:用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)回代求解

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有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

消元法实验报告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)过程

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 四、实验步骤

代入消元法解方程组

备课人:班第小组姓名: 宜州市祥贝中学七年级数学科导学案 课题: 8.2.1 用代入法解二元一次方程组课型:新授课 一、学习目标 1.会用代入法解二元一次方程组。 2.灵活运用代入法的技巧. 二、自学导航 阅读课文P91—P93,完成下列问题: 1.篮球联赛中,每场比赛都要分出胜负,每队胜一场得2分.负一场得1分,某队为了争取较好的名次,想在全部10场比赛中得到16分,那么这个队胜负场数分别是多少? 如果只设一个末知数:胜x场,负(10-x)场,列方程为:,解得x= 。 在上节课中,我们可以设出两个未知数,列出二元一次方程组,设胜的场数是x,负的场数是y, x+y=10 ① 2x+y=16 ② 那么怎样求解二元一次方程组呢? 2.思考:上面的二元一次方程组和一元一次方程有什么关系? 可以发现,二元一次方程组中第1个方程x+y=10写成y=,将第2个方程2x+y=10的y换为10-x,这个方程就化为一元一次方程。 二元一次方程组中有两个未知数,如果消去其中一个未知数,将二元一次方程组转化为我们熟悉的,我们就可以先解出一个未知数,然后再设法求另一未知数.这种将未知数的个数由多化少、逐一解决的想法,叫做思想。 3.归纳:上面的解法,是把二元一次方程组中一个方程的用含 的式子表示出来,再代入,实现消元,进而求得这个二元一次方程组的解.这种方法叫做,简称。 例1 用代入法解方程组x-y=3 ① 3x-8y=14 ② 分析:方程①中x的系数是1,用含y的式子表示x,比较简单。 解:

三、合作探究 1.将方程5x-6y=12变形:若用含y 的式子表示x ,则x=______,当y=-2时,x=_______;若用含x 的式子表示y ,则y=______,当x=0时,y=________ 。 2.用代人法解方程组? ??=+-=7y 3x 23x y ①②,把____代人____,可以消去未知数______,方程变为: 3.若方程y=1-x 的解也是方程3x+2y=5的解,则x=____,y=____。 4.若? ??-=-=+???-==1by ax 7by ax 2y 1x 是方程组的解,则a=______,b=_______。 5.已知方程组???=-=-1y 7x 45y x 3的解也是方程组? ??==-5by -x 34y 2ax 的解,则a=_______,b=________ ,3a+2b=___________。 6.已知x=1和x=2都满足关于x 的方程x 2+px+q=0,则p=_____,q=________ 。 7.用代入法解下列方程组: ⑴???=+=5x y 3x ⑵???==+y 3x 2y 32x ⑶? ??=-=+8y 2x 57y x 3 四、巩固提升 1.方程组{1 y 2x 11y -x 2+==的解是( ) A.???==0y 0x B.???==37y x C.???==73y x D.? ??-===37y x 2.根据市场调查,某种消毒液的大瓶装(500g )和小瓶装(250g )两种产品的销售数量(按瓶计算)比为2:5.某厂每天生产这种消毒液22.5t ,这些消毒液应该分装大、小瓶两种产品各多少瓶?

消元法解线性方程组

消元法解线性方程组 学校:青海师范大学 院系:数学系 专业:数学与应用数学 班级:10B 指导教师:邓红梅 学号:20101611218 姓名:梅增旺

摘要:线性方程组在数学的各个分支,在自然科学,工程技术,生产实际中经常遇到,而且未知元的个数及方程的个数可达成百上千,因此它的理论是很重要的,其应用也很广泛。本篇将就解线性方程组在此做一浅谈,以消元法为主要方法。消元法是解一般线性方程组行之有效的方法,早在中学大家都已经有接触,消元法的基本思想是通消元变形把方程组化成容易求解的同解方程组进行求解。 关键字:线性方程组消元法求解 Abstract: linear equations in various branches of mathematics, natural science,engineering technology, often encountered in actual production, and the unknown element number and the number of equations can be hundreds, so itis important in the theory, its application is very extensive. This article on thesolution of linear equations based on a discussion, mainly by means ofelimination method. Elimination method is the general linear equations ofeffective early in high school, everyone has a contact, the basic idea ofelimination method is through the elimination of the equations of deformationinto easy to solve with the solution of equations. Keywords:elimination method for solving linear equations

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

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

实验三线性方程组解法 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);

MATLAB之GAUSS消元法解线性方程组

Matlab之Gauss消元法解线性方程组 1.Gauss消元法 function x=DelGauss(a,b) %Gauss消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k);%计算行列式 end det=det*a(n,n); for k=n:-1:1%回代求解 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);

end Example: >>A=[1.0170-0.00920.0095;-0.00920.99030.0136;0.00950.0136 0.9898]; >>b=[101]'; >>x=DelGauss(A,b) x= 0.9739 -0.0047 1.0010 2.列主元Gauss消去法: function x=detGauss(a,b) %Gauss列主元消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0;%选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return;

(完整版)解线性方程组的消元法及其应用

解线性方程组的消元法及其应用 (朱立平 曲小刚) ● 教学目标与要求 通过本节的学习,使学生熟练掌握一种求解方程组的比较简便且实用的方法—高斯消元法,并能够熟练应用消元法将矩阵化为阶梯形矩阵和求矩阵的逆矩阵. ● 教学重点与难点 教学重点:解线性方程组的高斯消元法,利用消元法求逆矩阵. 教学难点:高斯消元法,利用消元法求逆矩阵. ● 教学方法与建议 先向学生说明由于运算量的庞大,克莱姆法则在实际应用中是很麻烦的,然后通过解具体的方程组,让学生自己归纳出在解方程组的时候需要做的三种变换,从而引出解高阶方程组比较简便的一种方法—高斯消元法,其三种变换的实质就是对增广矩阵的初等行变换,最后介绍利用消元法可以将矩阵化为阶梯形矩阵以及求矩阵的逆。 ● 教学过程设计 1.问题的提出 由前面第二章的知识,我们知道当方程组的解唯一的时候,可以利用克莱姆法则求出方程组的解,但随着方程组阶数的增高,需要计算的行列式的阶数和个数也增多,从而运算量也越来越大,因此在实际求解中该方法是很麻烦的. 引例 解线性方程组 ??? ??=+-=+=++132724524321 21321x x x x x x x x )3()2()1( 解 (1)???→??)2()1(?????=+-=++=+13245247 232132121x x x x x x x x )3()2()1(????→?+-?+-?) 3()2()1()2()4()1(?????-=+-=+=+133524567232 3221x x x x x x )3()2()1(

????→?+-?)3()65 ()2(??????? =--=+=+76 724567233221x x x x x )3()2()1( 用回代的方法求出解即可. 问题:观察解此方程组的过程,我们总共作了三种变换:(1)交换方程次序,(2)以不等于零的数乘某个方程,(3)一个方程加上另一个方程的k 倍.那么对于高阶方程组来说,是否也可以考虑用此方法. 2.矩阵的初等变换 定义1 阶梯形矩阵是指每一非零行第一个非零元素前的零元素个数随行序数的增加而增加的矩阵. 定义2 下面的三种变换统称为矩阵的初等行变换: i. 互换矩阵的两行(例如第i 行与第j 行,记作j i r r ?), ii. 用数0≠k 乘矩阵的某行的所有元素(例如第i 行乘k ,记作i kr ), iii. 把矩阵某行的所有元素的k 倍加到另一行的对应元素上去(例如第j 行的k 倍加到第i 行上,记作j i kr r +). 同理可以定义矩阵的初等列变换. 定义 3 如果矩阵A 经过有限次初等变换变为矩阵B ,则称矩阵A 与B 等价,记作 A ~ B . 注:任意一个矩阵总可以经过初等变换化为阶梯形矩阵. 3. 高斯消元法 对于一般的n 阶线性方程组 ?????? ?=++=+++=+++n n nn n n n n n n b x a x a x a b x a x a x a b x a x a x a ΛΛΛΛΛΛΛΛΛΛΛΛΛΛΛ22112 22221211 1212111 )()2()1(n (3.1) 若系数行列式0det ≠A ,即方程组有唯一解,则其消元过程如下: 第一步,设方程(1)中1x 的系数01≠l a 将方程)(l 与(1)对调,使对调后的第一个方程1x 的系数不为零.作)1(11 1 a a i i - ),3,2(n i Λ=,得到同解方程组 ?? ? ????=++=++=+++)1()1(2)1(2) 1(2 )1(22)1(22)0(1)0(12)0(121)0(11n n nn n n n n n b x a x a b x a x a b x a x a x a ΛΛΛΛΛΛΛΛΛΛΛΛΛ (3.2) 第二步,设0) 1(22≠a ,保留第二个方程,消去它以下方程中的含2x 的项,得

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)进行回代求解,即得方程组的解。手算的过程是非常清楚的,现在需回答的是计算机求解,如何实现上述计算过程。 设线性方程组为 1111221331121122223322 112233n n n n n n n nn n n a x a x a x a x b a x a x a x a x b a x a x a x a x b +++???+=??+++???+=?? ????????????? ?+++???+=? 写成矩阵形式为 111211121222222122 2m m m n n a a a x b a a a x b 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 =。 第一次消元。设(1) 110a ≠, 为将第二个方程至第n 个方程的1x 系数(1)1i a 消成零,构造乘数 (1)1 1(1)11 i i a l a = (2,3,,i n =

加减消元法解二元一次方程组--教案

8.2.2消元-----二元一次方程组的解法 (第二课时) 油召中学孙丽棉 教学目标: 1、知识技能目标 掌握加减消元法的基本步骤,熟练运用加减消元法解简单的二元一次方程组 2、能力目标: 能够熟练运用加减消元法解二元一次方程组,训练学生的运算技巧,养成检验的习惯。 3、情感态度及价值目标: 通过研究解决问题的方法,培养学生合作交流意识和探究精神,进而体会数学的独特魅力。 教学重点: 用加减法解二元一次方程组。 教学难点: 灵活运用加减消元法的技巧,把“二元”转化为“一元” 教学过程 (一)复习与准备 问题1 :前面我们学习了用代入法解二元一次方程组,同学们,回想一下,用代入法解二元一次方程组的基本思路是什么?其一般步骤有哪些? 学生回顾回答: 基本思路:消元,把二元转化为一元 一般步骤:<1>变——用含有一个未知数的代数式表示另一个未知数,写成y=ax+b或x=ay+b; <2>代——把变形后的方程代入到另一个方程中,消去一个未知数; <3>解——解得出的一元一次方程,求出一个未知数的值;

<4>回代——把求出的未知数的值代回方程,求出另一个未知数的值; <5>联——用“﹛”把求出的未知数的值括起来。 设计意图:通过此活动,即复习巩固了前面所学知识,又为本节课的学习做了必要的铺垫。 (二)引入新课 问题2:前面我们用代入法求出了方程组 x+y=10 2x+y=16 的解,这个方程组的两个方程中,y的系数有什么关系,利用这种关系你能发现新的消元方法吗? 引导学生观察未知数的系数,找出其中的特点。(未知数y的系数相等)根据系数的特点,让学生思考发现新的解方程组的方法:利用等式的性质把两个方程的左右两边分别相加。通过相加以后,学生会发现未知数y被消去了,从而实现了消元的目的,最终解出这个方程组。 通过分析,让学生明了这种方法后,教师规范解题格式,学生对比演习格式。让学生初步掌握加减消元法解方程组的基本过程。 X+y=10 (1) 2x+y=16 (2) 解:(2)-(1) 得X=6 把x=6代入(1)得y=4 所以这个方程组的解是 X=6 Y=4 问题3:怎样解方程组 3x+10y=2.8 15x-10y=8 分析:观察方程组中的两个方程,未知数的y系数相反,都是10,把这两个方程两边分别相加,就可以消去未知数y,同样得到一个一元一次方程。 设计意图:通过简单的两个例题,学生能够直接从题目当中观察后,找出未知数的系数的特点,然后判断用加减法当中的加法还是减法。让学生能够很直接的就得出用加减消元法的情况。也为后面总结归纳加减消元法的基本方法做准

“线性方程组高斯消去法”实验报告(内含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 六、实验结果:

代入消元法解二元一次方程组专题习题

代入消元解二元一次方程组习题 1. 已知-=1x y ,用含有x 的代数式表示y 为:=y ; 用含有y 的代数式表示x 为:x = 。 2. 已知-2=1x y ,用含有x 的代数式表示y 为:=y ; 用含有y 的代数式表示x 为:x = 。 3. 已知4+5=3x y ,用含有x 的代数式表示y 为:=y ; 用含有y 的代数式表示x 为:x = 4. 用代入法解下列方程组: (1) =425y x x y ?? +=? ① ② 解:将①带入②得: 解方程得: 将 代入①得: 所以,原方程组的解为: (2)425x y x y -=?? +=? ① ② 解:由①得: ③ 将 带入 得: 解方程得: 将 代入 得: 所以,原方程组的解为: (3)326431m n m n +=?? -=? ① ② (4) =2-525x y x y ?? +=? ① ② 解:由①得: ③ 将 带入 得: 解方程得: 将 代入 得: 所以,原方程组的解为: (5)23321y x x y =-?? +=? (6)?? ?-=-=+4 23 57y x y x

(7)2528x y x y +=??-=? ① ② (8) 233418 x y x y ?=? ??+=? (9)56 3640x y x y +=?? --=? (10)234443x y x y +=??-=? ① ② 5.用代入法解下列方程 ①、 X=3 ②、 x+2=3y ③、 3x+y=7 Y+x=5 2x=3y 5x-2y=8 2、已知 ,求x,y 的值。 ()0 53222=+-+-+y x y x

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 结果:

相关主题