高斯消去法算法实验报告

合集下载

C++实验报告高斯消元法

C++实验报告高斯消元法

高斯肖元法C++上机实验报告学生姓名: 学 号: 专业班级: 实验类型: 综合一 实验项目名称全选主元高斯消去法解线性方程组 二 实验原理设有n 元线性方程组(考虑便于C++程序数组表示,方程的下标从0开始),0000110,1100000110,111101,111,111n n n n n n n n n n a x a x a x b a x a x a x b a x a x a x b ---------+++=⎧⎪+++=⎪⎨⎪⎪+++=⎩写为矩阵形式为Ax=b,其中A 为线性方程组的系数矩阵,x 为列向量,是方程组的解,b 也是列向量.一般来讲,可以假定矩阵A 是非奇异阵。

(n 阶矩阵A 的行列式不为零,即 |A|≠0,则称A 为非奇异矩阵)00010,10111,1,01,11,1n n n n n n a a a a a a A a a a ----⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,011n x x x x -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ ,011n b b b b -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦将系数矩阵A 和向量b 放在一起,形成增广矩阵B :00010,010111,11,01,11,11(,)n n n n n n n a a a b a a a b b A b a a a b -----⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦全选主元消去就在矩阵B 上进行,整个过程分为如下两个步骤: 第一步:消去过程。

对于k 从0开始到n-2结束,进行以下三步。

1. 首先,从系数矩阵A 的k 行k 列开始的子矩阵中选取绝对值最大的元素作为主元素。

例如:11,max 0i j ij k i n k j na a ≤<≤<=≠然后交换B的第k行与第1i行,第k列与第1k列,这样,这个子矩阵中具有最大绝对值的元素被交换到k行k列的位置上.2.其次,进行归一化计算。

计算方法为:/,1,,1/kj kj kkk k kka a a j k nb b a==+-⎧⎪⎨=⎪⎩3.最后进行消去计算:,,1,,1,1,,1 ij ij ik kji i ik ka a a a j i k nb b a b i k n=-=+-⎧⎪⎨=-=+-⎪⎩第二步,回带过程:111,111/,2,,1,0 n n n nni i ij jj ix b ax b a x i n-----=+=⎧⎪⎨=-=-⎪⎩∑三代码的实现整个程序分为5个独立文件,Matrix.h文件中包括矩阵类Matrix的定义,Matrix.cpp文件中包括该类成员函数的实现,LinearEqu.h文件中包括线性方程组类LinearEqu的定义,LinearEqu.cpp文件中包括该类的成员函数实现文件;7-9.cpp文件包括程序的主函数,主函数中定义了一个类LinearEqu的对象,通过这个对象求解一个四元线性方程组。

高斯消去法上机实验报告

高斯消去法上机实验报告

高斯消去法上机实验报告高斯消去法实验报告2+=++=?? (1)+ ?? =??一、课题名称:高斯消去法二、引言为了节省计算量,对约当消去法进行改进三、算法1.先将方程(1)中x1的系数化为1,并从方程组1 的其余方程中消去x1,得x1?0.5x2+1.5x3=0.52?x3=2 (2)2+ 1.5x3 =6.52. 再将方程(2)2中的x2系数化为1,并从方程(2)3中消去x2x1?0.5x2+1.5x3=0.52?0.25x3=0.5 (3)3 =?63. 将方程(3)3回代到方程(3)2中,然后再回代到方程(3)1 最终得到所求的解x1=9, x2=?1, x3=?6,高斯消去法分为消元过程和回代过程两个环节1. 消元过程对k?1,2,?,n?1(1) 选主元,找(2) 如果ik??k,k?1,?,n?使得aik,k?maxaikk?i?n aik,k?0,则矩阵A 奇异,程序结束;否则执行(3)。

a?aikj (3) 如果ik?k,则交换第k行与第ik行对应元素位置,kj,j?k,?,n?1。

(4) 消元,对i?k,?,n,计算lik?aik/akk,对j?k?1,?,n?1,计算aij?aij?likakj.2. 回代过程(1) 若ann?0,则矩阵奇异,程序结束;否则执行(2)。

n??xi??ai,n?1??aijxj?/aiix?an,n?1/ann;j?i?1?? (2) n对i?n?1,?,2,1,计算四、程序设计program mainimplicit noneinteger::k,j,ireal::sinteger,parameter::m=3,n=3real::a(m,n)=(/10,-1,-1,-1,10,-1,-2,-2,5/)real::b(m)=(/7.2,8.3,4.2/)do k=1,ndo j=k+1,na(k,j)=a(k,j)/a(k,k)end dob(k)=b(k)/a(k,k)do i=k+1,ndo j=k+1,na(i,j)=a(i,j)-a(i,k)*a(k,j)end dob(i)=b(i)-a(i,k)*b(k)end doend dodo i=n-1,1,-1s=0do j=i+1,ns=s+a(i,j)*b(j)end dob(i)=b(i)-send dowrite(*,*) b(1),b(2),b(3)end五、结果及讨论分析1.100000 1.200000 1.300000Press any key to continue优点:这种算法是对约当消去法的一种改进,这种改进明显的减少了计算量。

高斯消去法的实验报告

高斯消去法的实验报告

高斯消去法的实验报告高斯消去法的实验报告引言:高斯消去法是一种用于解线性方程组的常用方法,它通过矩阵的行变换将方程组转化为简化的上三角矩阵,从而求得方程组的解。

本实验旨在通过实际操作,验证高斯消去法的有效性和可靠性。

实验步骤:1. 准备工作:在实验开始前,我们需要准备一个包含n个未知数和n个方程的线性方程组。

这个方程组可以通过手工构造或从实际问题中得到。

2. 构建增广矩阵:将方程组写成增广矩阵的形式,其中矩阵的左边是系数矩阵,右边是常数向量。

通过这样的构建,我们可以将方程组的运算转化为矩阵的运算,更加方便和高效。

3. 主元素选取:在高斯消去法中,我们需要选取主元素来进行消元操作。

主元素的选取可以采用多种策略,如选取绝对值最大的元素或者选取对角线元素。

在本实验中,我们选择选取对角线元素作为主元素。

4. 消元操作:通过行变换,将主元素所在的列下方的元素消为0。

这一步骤需要反复进行,直到得到上三角矩阵。

5. 回代求解:通过回代求解,我们可以得到方程组的解。

回代求解是从最后一行开始,逐步求解未知数的值,直到求解出所有未知数。

实验结果:通过实验,我们得到了以下结论:1. 高斯消去法能够有效地解决线性方程组。

无论方程组的规模如何,高斯消去法都可以将其转化为上三角矩阵,并求解出方程组的解。

2. 高斯消去法的计算复杂度较低。

相比于其他解线性方程组的方法,如迭代法或矩阵求逆法,高斯消去法的计算复杂度较低,适用于大规模的方程组求解。

3. 主元素选取对解的精度有一定影响。

在实验中,我们发现主元素的选取对解的精度有一定的影响。

如果主元素选取不当,可能会导致解的误差较大。

结论:高斯消去法是一种有效且可靠的解线性方程组的方法。

通过本实验,我们验证了高斯消去法的有效性和可靠性。

在实际应用中,我们可以根据具体问题的特点和要求,选择适当的主元素选取策略,以获得更准确的解。

同时,我们也要注意高斯消去法的局限性,如主元素选取对解的精度的影响,以及方程组可能存在无解或多解的情况。

高斯消去法的数值稳定性实验报告

高斯消去法的数值稳定性实验报告
end
end
%½«³£ÊýÏî´ÓAÖзÖÀë
X=A(:,length(A(1,:)));
A=A(:,1:length(A(1,:))-1);
%µÃµ½LÓëU¾ØÕó
fori=1:length(A(:,1))
forj=1:length(A(i,:))
if(i==j)
L(i,j)=1;
U(i,j)=A(i,j);
00-2.83542034035461-0.439277018213440
0000.724838760535495
X2=
5.90739256961544
1.88284104193886
-22.2540722833854
14.5809976298923
(3)beselect.m文件与noselect.m文件
%½«³£ÊýÏî¼Ó½øÈ¥
A(:,length(A(1,:))+1)=Y;
%´ÓÉÏÍùÏÂÑ »·
fori=1:length(A(:,1))
%Ô¤¼ÆËãÿÐеÚÒ»¸öÊý×Ö
fork=i:length(A(:,i))
form=1:i-1
A(k,i) = A(k,i)-A(k,m)*A(m,i);
end
end
end
%¼ÆËãXÖµ
fori=length(X):-1:1
forj=i+1:length(U(i,:))
X(i)=X(i)-U(i,j)*X(j);
end
X(i)=X(i)/U(i,i);
end
end
noselect.m文件:
function[ L,U,X ] = noselect( A,Y )

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

数学实验“线性方程组高斯消去法”实验报告(内含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 bx五、实验内容:function maintest2clcclear allA=[1 3 4;2 4 5;1 4 6];%系数矩阵 b=[1 7 6]'%常数项num=length(b)for k=1:num-1for i=k+1:numif A(k,k)~=0l=A(i,k)/A(k,k); A(i,:)=A(i,:)-A(k,:).*l; b(i)=b(i)-b(k)*l; endendendAb%回代求xx(num)=b(num)/A(num,num);for i=num-1:-1:1sum=0;for j=i+1:numsum=sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);endxEnd六、实验结果:A =1.0000 3.0000 4.0000 0 -2.0000 -3.00000 0 0.5000b =1.00005.00007.5000x =16 -25 15。

计算方法-实验三列主元高斯消去法

计算方法-实验三列主元高斯消去法

计算方法课程设计报告实验三高斯列主元消去法姓名:黄仁化学号:031010151551017班级:计算机科学与技术2004班日期:二○○六年六月十日一、实验目的:1、掌握高斯消去法的基本思路和迭代步骤。

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 ikk 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/ni 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)));C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C;if Aug(p,p)==0'A是奇异阵,方程无惟一解'breakendfor k=p+1:Nm=Aug(k,p)/Aug(p,p);Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1);endend% 这里用到程序函数backsub来进行回代。

计算方法实验报告(1)----Gauss消去法

计算方法实验报告(1)----Gauss消去法

计算方法实验报告实验名称:实验(一)Gauss 消去法班级:学生姓名:学号:班级序号:课内序号:指导老师:2018-2019学年第2学期一、实验名称:Gauss消去法二、实验学时: 2学时三、实验目的和要求1、掌握高斯消去法基础原理2、掌握高斯消去法解方程组的步骤3、能用程序语言对Gauss消去法进行编程实现四、实验过程代码及结果1、代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication_Gauss{class Program{//回带求值的过程static void CalcX(double[,] a, double[] x, int n){for (int i = n - 1; i >= 0; i--){double sum = 0;for (int j = i + 1; j < n; j++){sum += a[i, j] * x[j];}x[i] = (a[i, n] - sum) / a[i, i];}}//消元的过程static void CalcA(double[,] a, int n){for (int k = 0; k < n - 1; k++){for (int i = k + 1; i < n; i++){//double Lik = a[i, k] / a[k, k];// for (int j = k ; j <= n; j++)for (int j = n; j >= k; j--){a[i, j] = a[i, j] - a[i, k] / a[k, k] * a[k, j];}//a[i, k] = 0;}//Output}}//输出未知数x的值static void Output(double[] x, int n){for (int i = 0; i < n; i++){Console.WriteLine("x[{0}]={1}", i, x[i]);}}static void Output(double[,] a, int n){for (int i = 0; i < n; i++){//string s="";for (int j = 0; j <= n; j++){//s += string.Format("{0,-4}", a[i, j]);Console.Write("{0,6}", a[i, j]);}Console.WriteLine();}}//输入函数,表示输入一串值作为方程组的系数static void Input(double[,] a, int n){for (int i = 0; i <= n - 1; i++){string s = Console.ReadLine();string[] ss = s.Split(' ');for (int j = 0; j <= n; j++){a[i, j] = Convert.ToDouble(ss[j]);}}}static void Main(string[] args){Console.WriteLine("请输入矩阵的维数:");int n =Convert.ToInt32( Console.ReadLine());double[,] a = new double[n,n+1];Console.WriteLine("请输入矩阵的各个元;");Input(a, n);Console.WriteLine("------A(i,j)----------");Output(a, n);CalcA(a, n);Console.WriteLine("------消元之后A(i,j)----------");Output(a, n);double[] x = new double[n];CalcX(a, x, n);Output(x, n);Console.ReadLine();}}}2、结果:…。

数值分析实验报告---高斯消去法 LU分解法

数值分析实验报告---高斯消去法 LU分解法

数值分析上机报告①高斯消去法利用高斯消去法的matlab程序源代码:A=[10,-7,0,1;-3,2.099999,6,2;5,-1,5,-1;2,1,0,2];b=[8;5.900001;5;1];x=A\bc=det(A)上述程序中A表示计算实习题1中线性方程组的系数矩阵,b表示线性方程组右边的矩阵,x表示线性方程组的解。

C所输出的是系数矩阵A的行列式的值。

程序运行结果:②列主元的高斯消去法利用列主元的高斯消去法matlab程序源代码:首先建立一个gaussMethod.m的文件,用来实现列主元的消去方法。

function x=gaussMethod(A,b)%高斯列主元消去法,要求系数矩阵非奇异的,%n = size(A,1);if abs(det(A))<= 1e-8error('系数矩阵是奇异的');return;end%for k=1:nak = max(abs(A(k:n,k)));index = find(A(:,k)==ak);if length(index) == 0index = find(A(:,k)==-ak);end%交换列主元temp = A(index,:);A(index,:) = A(k,:);A(k,:) = temp;temp = b(index);b(index) = b(k); b(k) = temp;%消元过程for i=k+1:nm=A(i,k)/A(k,k);%消除列元素A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n);b(i)=b(i)-m*b(k);endend%回代过程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);endx=x';end然后调用gaussMethod函数,来实现列主元的高斯消去法。

高斯消去算法实验报告

高斯消去算法实验报告

高斯消去算法实验报告1. 实验背景高斯消去算法,也称为高斯消元法,是一种用于求解线性方程组的常用方法。

通过进行一系列的行变换,将方程组化简为阶梯矩阵,从而得到方程组的解。

本实验旨在使用高斯消去算法,解决给定的线性方程组。

2. 实验过程2.1 算法原理高斯消去算法的基本思想是通过进行行变换,将线性方程组化简为阶梯矩阵。

具体流程如下:1. 对于每一列,从对角线开始,选取主元(即该列中绝对值最大的元素),并将该主元所在的行与对角线所在的行交换位置。

这样可以避免除法中的误差积累。

2. 通过进行行变换,将主对角线以下的元素全部清零。

具体方法是,对于每一行i,通过消去第i+1行到最后一行的第i列元素,从而将下三角矩阵的元素清零。

3. 倒序遍历每一行,通过行变换,将主对角线以上的元素清零。

具体方法是,消去第i-1行到第1行的第i列元素,从而将上三角矩阵的元素清零。

4. 将矩阵化简为阶梯矩阵。

2.2 实验步骤1. 取得待解线性方程组的系数矩阵A和常数向量b。

2. 将矩阵A和向量b合并为增广矩阵Ab。

3. 通过高斯消去算法,将增广矩阵化简为阶梯矩阵。

4. 根据化简后的阶梯矩阵,求解线性方程组。

3. 实验结果以一个3阶线性方程组为例进行实验,方程组如下:2x + 3y + z = 93x + 2y + 4z = 124x + 3y + 6z = 18按照操作步骤,我们将系数矩阵A和常数向量b合并为增广矩阵Ab:markdownA = [[2, 3, 1],[3, 2, 4],[4, 3, 6]]b = [9, 12, 18]Ab = [[2, 3, 1, 9],[3, 2, 4, 12],[4, 3, 6, 18]]然后,通过高斯消去算法,将增广矩阵Ab化简为阶梯矩阵:markdownAb = [[2, 3, 1, 9],[0, 1.5, 2.5, 6],[0, 0, 0, 0]]根据化简后的阶梯矩阵,我们可以得到方程组的解:x = 1y = 2z = 0因此,该线性方程组的解为x=1,y=2,z=0。

高斯消元实验报告

高斯消元实验报告

实验报告一Gauss消去法求解线性方程组实验一、实验内容分别用顺序Gauss消去法和列选主元gauss消去法求解方程组=二.算法原理对一般的形如的线性方程组,记增广矩阵.Guass消去法包括消元过程和回代过程,消去过程实际上是把通过有限步的初等变换(即把的某行的一个倍数加到另一行或变换的某两行),最终化成上三角阵,图示如下:而回带过程是自下而上求解上三角方程组在消元过程中将扔放在的位置上,具体算法过程(不做行交换的消元):三、变量说明:n 方程组的阶数.A[3][3] 系数矩阵A.B[3] 常数项Bm[3][3] 经过Guass消元法后的系数矩阵i,j,k 随机变动量x[3] 3个变量X1,X2,X3四.程序设计#include<stdio.h>#include<math.h>main(){int n=3,i,j,k=0;doubleA[3][3]={{0.2641,0.1735,0.8642},{0.9411,-0.0175,0.1463},{-0.8641,-0.4243,0.0711}};double B[3]={-0.7521,0.6310,0.2501};double m[3][3];double X[3]={0,0,0};double s;for(k=0;k<=n-1;k++){for(i=k+1;i<n;i++){m[i][k]=A[i][k]/A[k][k];for(j=k+1;j<n;j++)A[i][j]=A[i][j]-m[i][k]*A[k][j];B[i]=B[i]-m[i][k]*B[k];}}for(i=n-1;i>=0;i--){s=0;for(j=i;j<n;j++)s+=A[i][j]*X[j];X[i]=(B[i]-s)/A[i][i];}for(i=0;i<3;i++)printf("%f\n",X[i]);}五.上机结果六.上机体会。

数值分析实验报告---高斯消去法 LU分解法

数值分析实验报告---高斯消去法 LU分解法

数值分析实验报告---高斯消去法 LU分解法实验一:高斯消去法一、实验目的1. 掌握高斯消去法的原理2. 用高斯消去法解线性方程组3. 分析误差二、实验原理高斯消去法(又称为高斯-约旦消去法)是一种利用矩阵消元的方法,将线性方程组化为改进的阶梯形式,从而解出线性方程组的解的方法。

具体而言,高斯消去法将线性方程组的系数矩阵化为一个上三角矩阵,再利用回带法求解线性方程组的解。

三、实验内容1.1、用高斯消去法解线性方程组在具体实验中,我们将使用高斯消去法来解决下述的线性方程组。

5x+2y+z=102x+6y+2z=14x-y+10z=25为了使用高斯消去法来解这个方程组,首先需要将系数矩阵A进行变换,消除A矩阵中第一列中的下角元素,如下所示:1, 2/5, 1/50, 28/5, 18/50, 0, 49/28接着使用回代法来计算该方程组的解。

回代法的过程是从下往上进行的,具体步骤如下:第三个方程的解:z=49/28;第二个方程的解: y=(14-2z-2x)/6;第一个方程的解: x=(10-2y-z)/5。

1.2、分析误差在使用高斯消去法求解线性方程组时,一般会出现截断误差,导致得到的解与真实解之间存在一些误差。

截断误差的大小和矩阵的维数有关。

为了估计截断误差,我们使用矩阵B来生成误差,在具体实验中,我们将使用下面的矩阵:我们来计算该矩阵的行列式,如果方程组有唯一解,则行列性不为0。

本例中,行列式的值是 -1,因此方程组有唯一解。

然后我们计算真实解和高斯消去法得到的解之间的误差,具体公式如下所示:误差 = 真实解的范数 - 高斯消去法得到的解的范数其中,范数的定义如下:||x||1=max{|xi|}; ||x||2=sqrt{(|x1|^2 + |x2|^2 + ... + |xn|^2)}四、实验步骤1、将高斯消去法的每一个步骤翻译成代码,并保存为一个独立的函数。

2、将代码上传至 Python 交互式环境,并使用高斯消去法来解线性方程组。

实验三 高斯消去法

实验三  高斯消去法

实验三 高斯消去法一、实验目的(1)熟悉求解线性方程组的有关理论和方法; (2)能编程实现列主元高斯消去法; (4) 根据不同类型的方程组,选择合适的数值方法。

二、实验内容用选主元高斯消去求方程组⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.7210321321321x x x x x x x x x三、算法基本原理 A. nn m nn n m nn n nb b b b b a a a a A ...)1(.........)1(..................||111111111-=-=== ;B. 消元结果直接存储在系数矩阵中;C. 当消元过程发生两行对调的情况为偶数次时,行列式值为对角线乘积,否则为对角线乘积的相反数。

四、算法设计与实现列主元高斯消去法:列主元;0||max ||≠=≤≤ik ni k lk a a 消元)...,,1,()()()1()()()1(n k j i bm b b a m a a k k ik k i k i k kj ik k ij k ij +=⎩⎨⎧-=-=++ 回代)1...,,()(1)()(n i a x a b x i ii n i j j i ij i ii =-=∑+=图4.2列主元的约当消去约当消去)...,,1(//)()()1()()()1(n k j a b b a a a k kk k k k k k kk k kj k kj +=⎩⎨⎧==++ )...,,1,..1,1..1()()()1()()()1(n k j n k k i b a b b a a a a k k ik k i k i k kj ik k ij k ij +=+-=⎩⎨⎧-=-=++ 关键点://选主元素for(k=0;k<n-1;k++){max=a[k][k];max_i=k;for(i=k+1;i<n;i++)if(fabs(a[i][k])>fabs(max)){max=a[i][k];max_i=i;}if(max==0)break;if(max_i!=k)//交换两行for(j=k;j<n+1;j++){t=a[k][j];a[k][j]=a[max_i][j];a[max_i][j]=t;}for(i=k+1;i<n;i++){a[i][k]=a[i][k]/-a[k][k];for(j=k+1;j<n+1;j++)a[i][j]=a[i][j]+a[i][k]*a[k][j];}//消元}for(k=n-1;k>=0;k--){sum=0;for(j=k+1;j<n;j++)sum=sum+a[k][j]*x[j];x[k]=(a[k][n]-sum)/a[k][k];}//回代五、计算用例的参考输出六、源代码Gauss.h#include<iostream>#include<cmath>using namespace std;#define MAX 50void input(double a[MAX][MAX+1],int n){cout<<"输入原方程组的增广矩阵"<<endl;for(int i=0;i<n;i++)for(int j=0;j<n+1;j++)cin>>a[i][j];}void output(double x[],int n){cout<<"Gauss消去法得到的原方程组的解为"<<endl;for(int k=0;k<n;k++)cout<<x[k]<<" ";}GaussXiaoqu.cpp#include"Gauss.h"int main(){double a[MAX][MAX+1],x[MAX],sum,max,t;int n,i,j,k,max_i;cout<<"输入原方程组的阶"<<endl;cin>>n;input(a,n);for(k=0;k<n-1;k++)//选主元素{max=a[k][k];max_i=k;for(i=k+1;i<n;i++)if(fabs(a[i][k])>fabs(max)){max=a[i][k];max_i=i;}if(max==0)break;if(max_i!=k)//交换两行for(j=k;j<n+1;j++){t=a[k][j];a[k][j]=a[max_i][j];a[max_i][j]=t;}for(i=k+1;i<n;i++){a[i][k]=a[i][k]/-a[k][k];for(j=k+1;j<n+1;j++)a[i][j]=a[i][j]+a[i][k]*a[k][j];}//消元}if(max==0)cout<<"原方程组无解"<<endl;else{for(k=n-1;k>=0;k--){sum=0;for(j=k+1;j<n;j++)sum=sum+a[k][j]*x[j];x[k]=(a[k][n]-sum)/a[k][k];}//回代output(x,n);cout<<endl;}return 0;}。

高斯消去实验报告分析

高斯消去实验报告分析

一、实验背景高斯消去法(Gaussian Elimination)是线性代数中解决线性方程组的重要方法之一。

它通过初等行变换将系数矩阵化为行阶梯形矩阵,从而求解线性方程组。

本实验旨在通过编写程序实现顺序高斯消去法和列主元高斯消去法,并对比分析两种方法的计算效率和精度。

二、实验目的1. 理解高斯消去法的原理和步骤。

2. 编写程序实现顺序高斯消去法和列主元高斯消去法。

3. 比较两种方法的计算效率和精度。

4. 分析高斯消去法的适用范围和局限性。

三、实验内容1. 顺序高斯消去法- 实现顺序高斯消去法,将系数矩阵化为行阶梯形矩阵。

- 求解线性方程组,得到未知数的解。

2. 列主元高斯消去法- 实现列主元高斯消去法,将系数矩阵化为行阶梯形矩阵。

- 求解线性方程组,得到未知数的解。

3. 比较两种方法- 对比两种方法的计算效率和精度。

- 分析两种方法的优缺点。

四、实验步骤1. 编写程序- 使用C/C++、Python等编程语言编写顺序高斯消去法和列主元高斯消去法程序。

- 程序应包含以下功能:- 输入线性方程组的系数矩阵和常数项。

- 实现顺序高斯消去法和列主元高斯消去法。

- 输出求解结果。

2. 测试程序- 使用一组已知线性方程组测试程序的正确性。

- 验证求解结果与精确解是否一致。

3. 比较分析- 使用不同的线性方程组测试两种方法的计算效率和精度。

- 比较两种方法的运行时间、解的精度和误差。

五、实验结果与分析1. 顺序高斯消去法- 计算效率:顺序高斯消去法的时间复杂度为O(n^3),其中n为方程组中未知数的个数。

- 精度:顺序高斯消去法可能会受到舍入误差的影响,导致求解结果与精确解存在一定的误差。

2. 列主元高斯消去法- 计算效率:列主元高斯消去法的时间复杂度同样为O(n^3),但通过选择主元,可以减少舍入误差,提高求解精度。

- 精度:列主元高斯消去法具有更高的精度,求解结果与精确解更接近。

3. 比较分析- 顺序高斯消去法和列主元高斯消去法在计算效率上基本相同,但列主元高斯消去法具有更高的精度。

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

列主元高斯消去法实验报告
a[i][j]=a[i][j]-l*a[k][j];
}
}
printf("高斯消去:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n+1;j++)
printf("%f",a[i][j]);
printf("\n");
}
if(fabs(a[n-1][n-1])<DETLA)
{
printf("A奇异,break \n");
int i,j,n,k,m;
printf("确定一个初元数:n=");
scanf("%d",&n);
printf("输入数组:a[%d][%d]\n",n,n+1);
for(i=0;i<n;i++)
{
for(j=0;j<n+1;j++)
scanf("%f",&a[i][j]);
}
printf("得到数组:\n");
若m≠k,交换第k行与第m行对应的元素(换行):
消元:
对i=k+1,…,n-1,计算l=lik=aik/akk;
对j=k+1,…,n-1,n,计算aij=aij-lik*akj=aij-l*akj
回代:
若|ann|<DELTA,则A奇异,结束程序,否则继续
xn-1=an-1,n/ an-1, n-1
对i=n-2 ,…, 1, 0,计算:
编程要求:
1)方程组的矩阵系数用二维数组表示,不用指针,且其值要求用输入语句输入。(数组形式的完成,经检查后,有能力的可以改用指针方式)

高斯消元法_实验报告(两篇)

高斯消元法_实验报告(两篇)

引言概述:本实验报告是关于高斯消元法的实验,主要研究了高斯消元法在解决线性方程组中的应用。

高斯消元法是一种用于求解线性方程组的重要方法,通过矩阵运算将线性方程组转化为简化的上三角矩阵,从而得到方程组的解。

本实验从理论和实际实验两个方面进行了探讨,并针对高斯消元法的优缺点进行了总结。

正文内容:一、高斯消元法的基本原理1.将线性方程组化为增广矩阵形式;2.通过行变换将增广矩阵转化为上三角矩阵;3.从最后一行开始,逐行回代求解未知数;4.得到方程组的解。

二、高斯消元法的详细步骤1.初始化:将线性方程组转化为增广矩阵形式;2.主元选取:选取当前列中绝对值最大的元素作为主元,通过行交换将主元移到当前行的对角线位置;3.消元过程:利用主元将当前列下方的元素消为零;4.上三角矩阵:重复执行主元选取和消元过程,直到将增广矩阵转化为上三角矩阵;5.回代求解:从最后一行开始,逐行回代求解未知数。

三、高斯消元法的优点1.算法简单:高斯消元法的步骤清晰明确,易于实现;2.稳定性好:高斯消元法可以稳定地求解非奇异矩阵的线性方程组;3.适用范围广:高斯消元法可以用于求解任意大小的线性方程组。

四、高斯消元法的缺点1.数值稳定性问题:当矩阵的主元非常小的时候,高斯消元法可能造成数值不稳定性,导致计算误差增大;2.增加计算时间和空间:高斯消元法的计算复杂度较高,当矩阵规模较大时,计算时间和内存消耗也会相应增加;3.对特殊矩阵的适应性不强:高斯消元法在处理具有稀疏矩阵或者特殊结构矩阵时,效率不高。

五、实验结果及分析1.通过实验验证了高斯消元法的正确性和有效性;2.分析了在一些特殊情况下,高斯消元法可能会遇到的问题;3.对使用高斯消元法解决线性方程组的实际应用进行了探讨;4.对高斯消元法与其他求解线性方程组的方法进行了比较分析;5.提出了可能的改进方向,以提升高斯消元法的效率和稳定性。

总结:本实验报告基于高斯消元法的原理和步骤,详细阐述了高斯消元法在解决线性方程组中的应用。

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

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

选列主元的高斯消去法实验报告令狐烈一,实验目的:(1)掌握gauss消去法的基本算法思想和学会编写其MATLAB代码。

(2)掌握选列主元的gauss消去法的基本算法思想和学会编写其MATLAB代码。

(3)分析选列主元的gauss消去法相比于gauss消去法的优点。

(4)对选列主元的gauss消去法和gauss消去法进行误差分析二,实验原理对于非奇异矩阵A,求解线性方程组Ax=b可以使用gauss消去法进行。

但是,gauss消去法要求系数矩阵A的顺序主子式非奇异。

为此做出改进:每次消元之前,首先选出第i列(i<=k)中最大的作为列主元,这样,就能保证消元乘数不仅不被系数矩阵A的顺序主子式非奇异的限制,还这样就能有效的防止误差的传播与放大。

算法:(1)对增广矩阵[a b]进行第i次消元,首先选取列主元a(i,k)=Max|a(I,i:n),交换第i行与第k行;(2)以列主元进行消元,计算公式为a(k,i)= a(k,i)/a(i,i); (k=i+1:n)a(k,j)=a(k,j)-a(k,i)*a(i,j); (j=i:n)(3)回代法计算结果,计算公式为:x(n)=b(n)/a(n,n);x(p)=[b(p)-∑a(p,j)x(j)]/a(p,p) (j=p+1:n)注:gauss(a,b)为选取列主元gauss消去法,gauss2(a,b)为gauss消去法。

三,实验MATLAB程序代码实验的MATLAB程序代码如下四,实验结果与分析1,两种算法对系数矩阵的顺序主子式奇异线性方程的效果分析实验结果(如图一)对于顺序主子式奇异的系数矩阵,使用gauss消去法(gauss2(a,b))不能解出,而使用选列主元的gauss消去法(gauss(a,b))能够解出。

主要是选列主元的gauss消去法每次都选出最大的列主元,从而保证了每次用作除数的a(I,i)≠0.图一:两种算法对系数矩阵的顺序主子式奇异线性方程的效果2,两种算法对舍入误差的放大效应分析用随机生成函数random('Normal',1,7,10,10)生成10*10矩阵,分别gauss消去法和选列主元的高斯消去法解出,并用公式er(x)=||x−x∗||||x||≤cond(a)∗||r||||b||估计其误差,结果如下图。

计算方法实验报告_列主元高斯消去法

计算方法实验报告_列主元高斯消去法
double row_first; //行首元素 //主对角元素单位化 for(int i=0;i<n;i++) {
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++) {

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

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

数值分析实验报告之高斯列主消元法一、实验目的:清楚高斯列主元消去法与高斯主元素消去法的区别,以及它提出的必要性;掌握高斯列主元消去法的原理及推导过程,会用其解简单的线性方程组。

二、实验内容:用高斯列主元消去法解方程组⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--643.5072.1000.2623.4712.3000.1000.3000.2001.0⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡321x x x =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡000.3000.2000.1 三、实验原理:在采用高斯消去法解方程组时,小主元可能产生麻烦,即用其做除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最终使得计算的解不可靠。

故应避免采用绝对值小的主元素。

在消元之前,选择一个绝对值最大的元素作为主元,用其做除数来进行消元,这样就具有较好的数值稳定性。

这就是选主元消去法。

下面详细说明列主元素消去法。

第一步:在Ax=b 即)1()1(b x A =的系数矩阵)1(A 的第一列元素中选择一个绝对值最大的元素,不妨设为)1(1l a 。

对调)1(1j a 和)1(lj a 及)1(1b 和)1(l b (j=1,2,……,n ,1≤l ≤n)。

以)1(1l a 作为新的)1(11a 进行消元(消去对调后的第2~n 个方程中的1x )。

第k 步:(1≤k ≤n-1)设第k-1步消元过程完成,得到)()(k k b x A =,检查)(k A 中第k 列的后n-k+1个元素)(k kk a ,)(1k k k a +,…,)(k nk a ,从中选出绝对值最大者,不妨设是)(k pk a ,称它为第k 列主元素。

若p=k ,则取)(k kk a 做除数直接进行消元。

若p ≠k,则将第p 个方程与第k 个方程对调,使)(k pk a 成为新的)(k kk a ,然后以其作为除数进行消元,继续这一过程,直至得到等价的三角形方程组)()(n n b x A =,下一阶段的回代过程不变。

折半查找 插入排序 高斯消去法实验报告

折半查找 插入排序 高斯消去法实验报告

算法设计与分析基础应用数学学院二零一六年六月实验三折半查找插入排序和高斯消去法一、实验性质由算法伪代码设计java代码二、实验学时3学时三、实验目的1、理解折半查找的算法过程,并设计相应的java程序。

2、理解插入排序的算法过程,并设计相应的java程序。

3、理解高斯消去法的算法过程,并设计相应的java程序。

四、实验要求实验一、折半查找:由用户在输入要查询的数字,经运行程序,实现非递归的折半查找,并输出用户所查数字所在位置。

实验二、插入排序:由用户输入一串数字(7个),按照提示要求输入。

经插入排序,将用户输入数字进行排序输出,并可以给出出入排序过程。

实验三、高斯消去法:给定一个方程组的系数矩阵及一个解向量,通过高斯消去法,将矩阵变为上三角矩阵,从而快速求出矩阵所在方程的解。

五、实验内容实验一、折半查找:1、实现非递归的折半查找。

2、输入:一个升序数组a[],和一个需要查找的数组k。

3、输出:一个数组k元素的下标,如果没有查找到,则提示用户。

实验二、插入排序:1、用插入排序对给定的数字进行排序。

2、输入:n个可以排序元素构成的数组a[];3、输出:非降序的依次输出排列数组a[]。

实验三、高斯消去法:1、对一个方程组的系数矩阵a[][],应用高斯消元法。

2、用该方程组右边的值构成的向量b来扩展矩阵。

3、输出:一个可以代替a[][]的上三角等阶矩阵图,相应的右边的值位于最后一列。

实验报告实验一折半查找:Java代码:package cn;import java.util.Scanner;public class ZheBan {public static void main(String[] args){int []a={3,14,27,31,39,42,55,70,74,81,85,93,98};Scanner can = new Scanner(System.in);System.out.println("请输入要查找的数字:");int k=can.nextInt();int l=0,r=a.length;while(l<=r){int m;m=(l+r)/2;if(k==a[m]){System.out.print("您查找的数字在第"+(m+1)+"位");break;}else if(k<a[m]){r=m-1;}else {l=m+1;}}if(l>r){System.out.print("未找到您要查找的数字。

高斯消去法解方程组

高斯消去法解方程组
//方便的vector容器实现了整行系数的交换
TmpDouble = b[j];
b[j] = b[TmpInt];
b[TmpInt] = TmpDouble;
}
//---------------------------------------------------
//输出变换后的增广矩阵
cout<<"The matrix A & vector b after executing:\n";
0.00000.00000.0000-0.19181.8619
解向量x = [14.3555 -2.48181 -6.64963 -9.70752]
选主元:
增广矩阵A =
0.8420.15690.17480.98410.9838
0.00000.6973-0.0951-0.11800.0471
0.00000.0000-0.84090.48060.9268
tmp.clear();//清空临时向量。由vector容器性质不得不这么做
}
}
void getb(int n)
{
double a;// a number in b
cout<<"Please input the vector b:"<<endl;
for (int i=0;i<n;i++)
{
cin>>a;
0.00000.00000.00000.1204-1.1690
解向量x = [14.3555 -2.48181 -6.64963 -9.70752]
(2)
不选主元:
增广矩阵A =
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析基础
实验报告
应用数学学院
二零一六年六月
实验高斯消去法算法
一、实验性质设计
二、实验学时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 <n; i++) {
for (int j = 0; j <n; j++) {
A[i][j] = sd.nextDouble();
}
}
System.out.println("请输入方程组等号右边的数字:");
Scanner as = new Scanner(System.in); for (int i = 0; i <n; i++) {
B[i] = as.nextDouble();
}
}
void yunSuan() {
for (k = 0; k<= n - 2; k++) {
for (int i = k + 1; i <= n - 1; i++) {
ss = A[i][k] / A[k][k];
for (j = k + 1; j<n; j++) {
A[i][j] = A[i][j] - A[k][j] * ss;
}
B[i] = B[i] - ss * B[k];
}
}
System.out.println("解得X的值为:");
X[n - 1] = B[n - 1] / A[n - 1][n - 1];
System.out.println("x"+ t+ "="+ X[n- 1]);
for (int i = n - 2; i >= 0; i--) {
t = i + 1;
sum = B[i];
for (j = i + 1; j<= n - 1; j++) {
sum = sum - A[i][j] * X[j];
}
X[i] = sum / A[i][i];
System.out.println("A" + t + "=" + X[i]);
}
}
}
Ⅲ、运行结果显示:
图(1)。

相关文档
最新文档