高斯消去法算法实验报告
- 格式:docx
- 大小:108.79 KB
- 文档页数:5
高斯肖元法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. 主元素选取对解的精度有一定影响。
在实验中,我们发现主元素的选取对解的精度有一定的影响。
如果主元素选取不当,可能会导致解的误差较大。
结论:高斯消去法是一种有效且可靠的解线性方程组的方法。
通过本实验,我们验证了高斯消去法的有效性和可靠性。
在实际应用中,我们可以根据具体问题的特点和要求,选择适当的主元素选取策略,以获得更准确的解。
同时,我们也要注意高斯消去法的局限性,如主元素选取对解的精度的影响,以及方程组可能存在无解或多解的情况。
西京学院数学软件实验任务书实验一实验报告一、实验名称:线性方程组高斯消去法。
二、实验目的:进一步熟悉理解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来进行回代。
计算方法实验报告实验名称:实验(一)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、结果:…。
数值分析上机报告①高斯消去法利用高斯消去法的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]);}五.上机结果六.上机体会。
算法设计与分析基础
实验报告
应用数学学院
二零一六年六月
实验高斯消去法算法
一、实验性质设计
二、实验学时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)。