高斯消去法算法实验报告
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
%½«³£ÊýÏî´Ó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程序)

西京学院数学软件实验任务书实验一实验报告一、实验名称:线性方程组高斯消去法。
二、实验目的:进一步熟悉理解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消去法

计算方法实验报告实验名称:实验(一)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分解法

数值分析上机报告①高斯消去法利用高斯消去法的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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)。