搜档网
当前位置:搜档网 › 列主元高斯消去法实验报告

列主元高斯消去法实验报告

列主元高斯消去法实验报告
列主元高斯消去法实验报告

实验四:线性方程组数值解法——列主元高斯消去法

目的与要求:

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

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

实验内容:

列主元高斯消去法的编程实现。

算法:

消元:对k=0,2,…,n -2,按下列步骤进行:

● 选主元:找出m ?{k,k+1,…,n -1},使)(,)(,m ax k k i n i k k k m a a ≤≤=

● 若|a m,k |

● 若m ≠k ,交换第k 行与第m 行对应的元素(换行):n k j a a m j

kj ,, =? ● 消元:

对i=k+1,…,n -1,计算l=l ik =a ik /a kk ;

对j=k+1,…,n -1,n ,计算a ij =a ij -l ik *a kj =a ij -l*a kj

回代:

● 若|a nn |

● x n-1=a n-1,n / a n-1, n-1

● 对i = n-2 ,…, 1, 0,计算:ii n i j j ij n i i a x a a x )(11,∑-+=-

=

编程要求:

1)方程组的矩阵系数用二维数组表示,不用指针,且其值要求用输入语句输入。(数组形式的完成,经检查后,有能力的可以改用指针方式)

2)方程组的元数n 要求用输入语句输入。

3)加入中间运算结果的显示,以便于检查程序。

4)列主元解方程组方法写成函数形式。如:void ColPivot(float a[10][11], int n, float x[10])

实验步骤:

1)完成列主元高斯消去法解线性方程组的程序设计及录入、编辑;

#include

#include

#include

#define DETLA 1e-6

#define N 100

void main()

{

float a[N][N],b,l,x[N],s=0;

int i,j,n,k,m;

printf("确定一个初元数:n=");

scanf("%d",&n);

printf("输入数组:a[%d][%d]\n",n,n+1);

for(i=0;i

{

for(j=0;j

scanf("%f",&a[i][j]);

}

printf("得到数组:\n");

for(i=0;i

{

for(j=0;j

printf(" %f",a[i][j]);

printf("\n");

}

for(k=0;k

{

m=k;

for(i=k+1;i

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

m=i;

if(fabs(a[m][k])

{

printf("A奇异,break \n");

exit(0);

}

if(m!=k)

for(j=k;j

{

b=a[k][j];a[k][j]=a[m][j];a[m][j]=b;

}

for(i=k+1;i

{

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

for(j=k+1;j

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

}

}

printf("高斯消去:\n");

for(i=0;i

{

for(j=0;j

printf(" %f",a[i][j]);

printf("\n");

}

if(fabs(a[n-1][n-1])

{

printf("A奇异,break \n");

exit(0);

}

x[n-1]=a[n-1][n]/a[n-1][n-1];

for(i=n-2;i>=0;i--)

{

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

s=s+a[i][j]*x[j];

x[i]=(a[i][n]-s)/a[i][i];

s=0;

}

printf("回代结果为:\n");

for(i=0;i

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

}

2)完成程序的编译和链接,并进行修改;

3)用书上P52例2的例子对程序进行验证,并进行修改;

4)用完成的程序解算习题中的题目。

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

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

贵州师范大学数学与计算机科学学院学生实验报告 课程名称:数值分析班级:数本(一)班实验日期:年月日 学号: 0098(81)姓名:吴胜指导教师:杨一都 实验成绩:一、实验名称 实验五:线性方程组的数值解法 二、实验目的及要求 1. 让学生掌握用列主元gauss消去法、超松弛迭代法求解线性方程组. 2. 培养Matlab编程与上机调试能力. 三、实验环境 每人一台计算机,要求安装Windows XP操作系统,Microsoft office2003、(或. 四、实验内容 1. 编制逐次超松弛迭代(SOR迭代)函数(子程序),并用于求解方程组

???????=-++=+-+=++-=+++-1 4141414432143214 3214321x x x x x x x x x x x x x x x x 取初始向量T x )1,1,1,1()0(=,迭代控制条件为 5)1()(102 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 =或失败信息. 步1 对1,,2,1-=n k 执行步2→步4 . 步2 调选列主元模块 .

利用高斯列主元消去法求如下线性方程组的解

%利用高斯列主元消去法求如下线性方程组的解 clear all; A=[3 -2 1 -1;4 0 -1 2;0 0 2 3;0 0 0 5]; b=[8;-3;11;15]; function [X,XA] = UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 N=size(A); n=N(1); index=0; for i=1:(n-1) me=max(abs(A(1:n,i)));%选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb;%交换主行 for j=(i+1):n if(a(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m;

end; X=UpTriangleFun(A,b); XA=A; ----------------------------------------------------------------------------------------------------------------------------- % 函数定义 function [X,XA]= UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 [N,M]=size(A); %N=sizes(A); n=N; index=0; for i=1:(n-1) me=max(abs(A(1:n,i))); %选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb; %交换主行 for j=(i+1):n if(A(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m; end; end;

Guass列主元消去法及其应用

一、实验目的与要求 了解Guass列主元消去法及其应用,掌握利用Guass列主元消去法解方程,解决实际问题 二、模型求解 0.x+0.4y+0.3z+60000=x 0.3x+0.1y+0.2z+30000=y 0.2x+0.1y+0.2z+50000=z 三、源代码: #include #include #include #define N 20 #define EPS 1.0e-4 double a[N][N],b[N],c[N][N],d[N][N];

void swap(double &a,double &b)//换行 { double temp; temp=a; a=b; a=temp; } void gauss(double a[][N],double b[N],int n)//gauss求解 { int i,j,k,l; double temp,m; for(k=0;k<=n-2;k++) { temp=fabs(a[k][k]); //选主元 l=k; for(i=k+1;itemp))//fabs为取绝对值函数。包含在头文件math.h中 {

temp=fabs(a[i][k]); l=i; } } if(fabs(a[l][k])

高斯消去法算法实验报告

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

实验高斯消去法算法 一、实验性质设计 二、实验学时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

列主元消去法

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

消元法实验报告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、 培养编程与上机调试能力。 二、高斯列主元消去法的基本思路与计算步骤: 设有方程组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];

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 目的与要求 (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;

数值计算方法实验报告一gass列主元消去法解线性方程组

实验课程名称计算机数值方法 实验项目名称Guass列主元素消去法 年级 专业 学生姓名 学号 理学院 实验时间:2012 年月日

学生实验室守则 一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。 二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。 三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。 四、实验必须服从教师的安排和指导,认真按规程操作,未经教师允许不得擅自动用仪器设备,特别是与本实验无关的仪器设备和设施,如擅自动用或违反操作规程造成损坏,应按规定赔偿,严重者给予纪律处分。 五、实验中要节约水、电、气及其它消耗材料。 六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。 七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。 八、实验完毕,应清理好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。 九、无故不参加实验者,应写出检查,提出申请并缴纳相应的实验费及材料消耗费,经批准后,方可补做。 十、自选实验,应事先预约,拟订出实验方案,经实验室主任同意后,在指导教师或实验技术人员的指导下进行。 十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。

完整版高斯消元法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);

列主元消去法解方程组实验报告

实验名称:列主元消去法解方程组 1引言 我们知道,高斯消去法是一个古老的解线性方程组的方法。而在用高斯消去法解Ax=b 时,其中设A为非奇异矩阵,可能出现a kk)0的情况,这时必须进行带行交换的高斯消去法。但在实际计算中即使a kk)0但其绝对值很小时,用a;:〉作除数,会导致中间结果矩阵A(k)元素数量级严重增长和舍入误差的扩散,使得最后的结果不可靠。因此,小主元可能导致计算的失败,我们应该避免采用绝对值很小的主元素。为此,我们在高斯消去法的每一步应该在系数矩阵或消元后的低阶矩阵中选取绝对值最大的元素作为主元素,保持乘数1,以便减少计算过程中舍入误差对计算解的影响。 一种方式是完全主元消去法,这种消去法是在每次选主元时,选择a(二k max a j k)0 kJ k k in」 k j n 为主元素。这种方法是解低阶稠密矩阵方程组的有效方法,但这种方法在选取主元时要花费一定的计算机时间。实际计算中我们常采用部分选主元的的消去法。列主元消去法即在每次 选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算 2实验目的和要求 运用matlab编写一个.m文件,要求用列主元消去法求解方程组(实现PA=L) 111111 2 11111 3 2 1111 4 3 2 1 1 1 5 4 3 2 1 1 6 5 4 3 2 1 7 6 5 4 3 2 要求输出以下内容: (1) 计算解x; x. 117 1x28 1x310 1x413 1x517 1 x6 22 128 x 7

(2) L,U ; (3) 整形数组IP (i ) (i=1,2,…,n-1 )(记录主行信息) 3算法原理与流程图 (1) 算法原理 设有线性方程组Ax=b,其中设A为非奇异矩阵。方程组的增广矩阵为 an a12L L a1n M bi a21a22L L a2n M b2 [代口 M M M M a i1 M M M M a n1a n2L L a nn M b n 第1步(k=1):首先在A的第一列中选取绝对值最大的元素a^,作为第一步的主元素3in max 耳!0,然后交换(A,b)的第1行与第i1行元素,再进行消元计算。 1 1 i n 设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组A(k)x b(k) J1) c ⑴ an ai2 L a(k)a1(n)M ⑵ L (2)⑵ M a22a2k a2n b2() O M M M [A,b] [A(k),b(k)]a kk)L a kk)M.(k)bk a k k)u a k k)1,n M(k) d 1 M M M M a nk)L a(k)叫 n M 第k步计算如下: 对于k=1,2,…,n-1 (1)按列选主元:即确定ik使 时max无0

列主元消去法MATLAB程序

列主元消去法MATLAB程序: function [RA,RB,n,X]=liezhu(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('??×¢òa£oòò?aRA~=RB£??ùò?′?·?3ì×é?T?a.') return end if RA==RB if RA==n disp('??×¢òa£oòò?aRA=RB=n£??ùò?′?·?3ì×éóD?¨ò??a.') 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('??×¢òa£oòò?aRA=RB

列主元消除法,M文件 a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48]; b=[0.05;1.03;-0.53]; [RA,RB,n,X]=liezhu(a,b) 运行结果;

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

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

高斯列主元消元法解线性方程组 一、题目:用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)回代求解 ???? ????????? ??-==∑+=) (1) ()()() (i ii n i j j i ij i i i n nn n n n a x a b x a b x () 1,,2,1 --=n n i

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)

高斯消元法解线性方程组

高斯消元法解线性方程组 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

相关主题