Gauss列主元素消去法实验教学文稿
Gauss列主元素消去法实验
Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤; 2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。
通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。
【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。
2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。
要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。
3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。
要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。
4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x(2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。
【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。
实验讲评:实验成绩:评阅教师:200 年 月 日Lab06.Gauss 列主元素消去法实验第一题:1、算法描述:Ⅰ、Gauss 消去法由书上定理5可知 设Ax=b ,其中A ∈R^(n(1)如果()0(1,2,....,1)k kka k n ≠=-,则可通过高斯消去法将Ax=b 约化为等价的 角形线性方程组,且计算公式为:① 消元计算(k=1,2,….,n-1)()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.k k ik ik kk k k k ij ij ik kj k k k iiik k m a a i k n a a m a i j k n b b m b i k n ++==+=-=+=-=+② 回带公式()()()()()1/,()/,1,...,2,1.n n n n nn ni i i i iii j ii j i x b a x ba x a i n =+==-=-∑(2)如果A 为非奇异矩阵,则可通过高斯消去法将方程组Ax=b 约化方程组为上三角矩阵以上消元和回代过程总的乘除法次数为332333nn nn +-≈,加减法次数为32353263nnn n+-≈以上过程就叫高斯消去法。
高斯列组元消去法
Console.WriteLine("高斯消去法方程:");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
Console.Write(a[i, j].ToString() + " ");
Console.WriteLine();
{
s = 0;
for (j = i + 1; j <= n - 1; j++)
s = s + a[i, j] * x[j];
x[i] = (a[i, n] - s) / a[i, i];
}
return x;
}
static void Main(string[] args)
{
//double[,] a=new double[4, 5] { { 10, -7, 0, 1, 8 }, { -3, 2.099999, 6, 2, 5.900001 }, { 5, -1, 5, -1, 5 }, { 2, 1, 0, 2, 1 } };
高斯列组元消去法课程实验报告
课程名称
数值分析
班级
15计本
实验名称
高斯列组元消去法
姓名
学号
实验成绩
实验目的及要求
1.利用MATLAB编写高斯列组元消去法,并测试。
2.调用函数解题
实验环境
Windows 7或以上版本+ VS2010或以上版本
实验内容
调试过程及实验结果
总结
1、实验结果与理论一致;
Gauss列主元消去法实验
<数值计算方法>实验报告1.实验名称实验2 Gauss 列主元消去法2.实验题目用Gauss 列主元消去法求解线性方程组。
0.0011 2.0002 3.0003 1.0001.0001 3.7122 4.6233 2.0002.0001 1.0722 5.6433 3.000x x x x x x x x x ++=⎧⎪-++=⎨⎪-++=⎩3.实验目的加深自己对Gauss 列主元消去法的理解和认识,并且通过做实验或做练习来加强自己Gauss 列主元消去法的掌握,学会并灵活运用Gauss 列主元消去法来求解方程组。
4.基础理论-------Gauss 列主元消去法1.Gauss 列主元消去法的基本思想是:在进行第k (k=1,2,...,n-1)步消元时,从第k 列的kk a 及以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素kk a 的位置上,再进行消元。
2.Gauss 列主元消去法的优点:当kk a (k=1,2,...,n-1)的绝对值很小时,用Gauss 列主元消去法来求解方程组时,可以避免所的数值结果产生较大误差或失真。
5.实验环境实验系统:Win 7实验平台:VisualC++语言6.实验过程写出算法→编写程序→计算结果Gauss 列元消去法的算法Input:方程组未知量的个数n;增广矩阵()()1,2,...,T ij A a A A An ==,其中i=1,2,…,n; j=1,2,…,n+1Output:方程组的解x1,x2,…,xn,或失败信息。
1. for i ←1ton-1 do;2. temp ←|ii a |;3. p ←I;4. for j ←i+1 to n do5. if ||ji a >temp then6. p ←j;8. end9. end10. if temp=0 then11. |return False;12. end13. if p ≠I then14. p A ⇔i A ;//i,p 两行交换15. end//列选主元16. for j ←i+1 to n do17.*j ji i A m A -ji m ←/ji ii a a ;18. j A ←*j ji i A m A -;//消元19. end7.实验结果原方程组的解为:X1=-0.490396 , x2=-0.051035 ,x3=0.3675208.附录程序清单#include<iostream.h> #include"stdio.h"#include"math.h"void main ( ){ int n=3,i,j,k,p;doubleA[10][10]={{0.001,2.000,3.000,1.000},{-1.000,3.712,4.623,2.000},{-2.0 00,1.072,5.643,3.000}},temp,m,x[100];for(i=0;i<n;i++){ //选主元temp=fabs(A[i][i]); p=i;for(k=i+1;k<n;k++)if(fabs(A[k][i])>temp){temp=fabs(A[k][i]); p=k;}if(temp==0){ printf("\n无法求解:");return;}if(p!=i)for(j=0;j<n+1;j++){ temp=A[i][j];A[i][j]=A[p][j];A[p][j]=temp;}//消元for(k=i+1;k<n;k++){ m=A[k][i]/A[i][i];for(j=i+1;j<=n;j++)A[k][j]=A[k][j]-m*A[i][j];}}//回代for(i=n-1;i>=0;i--){x[i]=A[i][n];for(j=i+1;j<n;j++)x[i]=x[i]-A[i][j]*x[j];x[i]=x[i]/A[i][i];}printf("\nx=\n");for(i=0;i<n;i++)printf("%f \n",x[i]);}。
高斯列主元消去法实验报告
《数值计算方法》实验报告专业:年级:学号:姓名:成绩:1.实验名称实验2高斯列主元消去法2. :用Gauss列主消去法求解线性方程组0.001*X1+2.000*X2+3.000*X3=1.000-1.000*X1+3.217*X2+4.623*X3=2.000-2.000*X1+1.072*X2+5.643*X3=3.0003.实验目的a.熟悉运用已学的数值运算方法求解线性方程—Gauss列主消去法;b.加深对计算方法技巧的认识,正确使用计算方法来求解方程;c.培养用计算机来实现科学计算和解决问题的能力。
4.基础理论列主元消去法:a.构造增广矩阵b.找到每列绝对值的最大数;c.行变换;d.消去;e.回代5.实验环境Visual C++语言6.实验过程实现算法的流程图:7.结果分析a.实验结果与理论一致;b.由于数值设置成双精度浮点型,所以初值对计算结果影响不大;c.运用程序能更好的实现计算机与科学计算的统一和协调。
8. 附录程序清单#include<stdio.h>#include<math.h>int main(){int n=3,i,j,k,p;double a[4][4];double b[4];double x[4];double m[4][4];double temp;a[1][1]=0.001; a[1][2]=2.000; a[1][3]=3.000; b[1]=1.000;a[2][1]=-1.000; a[2][2]=3.1712; a[2][3]=2.000; b[2]=2.000;a[3][1]=-2.000; a[3][2]=1.072; a[3][3]=5.643; b[3]=3.000;for(i=1;i<=n-1;i++){temp=a[i][i];p=i;for(j=i+1;j<=n;j++)if(fabs(a[j][i])>temp){temp=a[j][i];p=j;}if(temp==0)return 0;if(p!=i) //换行{for(j=1;j<=n;j++)a[0][j]=a[i][j];for(j=1;j<=n;j++)a[i][j]=a[p][j];for(j=1;j<=n;j++)a[p][j]=a[0][j];b[0]=b[i];b[i]=b[p];b[p]=b[0];}for(j=i+1;j<=n;j++){m[j][i]=a[j][i]/a[i][i];for(k=i;k<=n;k++)a[j][k]=a[j][k]-m[j][i]*a[i][k];}}if(a[n][n]==0)return 0;x[n]=b[n]/a[n][n];for(i=n-1;i>=1;i--)//回代{temp=0;for(j=i+1;j<=n;j++)temp=temp+a[i][j]*x[j];temp=b[i]-temp;x[i]=temp/a[i][i];}for(i=1;i<=n;i++)//输出结果{printf("输出结果为:x[%d]=%lf ",i,x[i]);}printf("\n");return 0;}。
数值分析实验6 (1)
Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤;2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。
通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。
【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。
2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。
要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。
3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。
要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。
4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。
【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。
实验讲评:实验成绩:评阅教师:2011年6 月 30日Lab06.Gauss列主元素消去法实验一算法描述1编写用不选主元的直接三角分解法解线性方程组Ax=b的M文件程序如下function [x,l,u]=malu(A,b)format shortn=length(b);u=zeros(n,n);l=eye(n,n);u(1,:)=A(1,:);l(2:n,1)=A(2:n,1)/u(1,1);for k=2:nu(k,k:n)=A(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k+1:n,k)=(A(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k);endy=zeros(n,1);y(1)=b(1);for k=2:ny(k)=b(k)-l(k,1:k-1)*y(1:k-1);endx=zeros(n,1);x(n)=y(n)/u(n,n);for k=n-1:-1:1x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);end2、Gauss列主元消去法解线性方程组程序如下:function [Determ,x]=magauss2(A,b,flag)%Gauss列主元素消去法解线性方程组Ax=b,A为系数矩阵,b为右端项%若flag=0,不显示中间消去过程,否则显示中间消去过程,默认为0 %输出项Determ为矩阵A的行列式值,x为解向量if nargin<3,flag=0;endDeterm=1;n=length(b);for k=1:(n-1)[ap,p]=max(abs(A(k:n,k)));p=p+k-1;if ap==0printf('divide by zero!');Determ=0;end%换行if p>kt=A(k,:); A(k,:)=A(p,:);A(p,:)=t;t=b(k);b(k)=b(p);b(p)=t;Determ=-Determ;end%消元计算m=A(k+1:n,k)./A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],end %展示消元过程Determ=A(k,k).* Determ;endif A(n,n)==0printf('divide by zero!');Determ=0;end%回代求解x=zeros(n,1);x(n)=b(n)/A(n,n);for i=(n-1):-1:1x(i)=(b(i)-A(i,i+1:n)*x(i+1:n))/A(i,i);endDeterm=A(n,n).* Determ;三计算过程;直接三角分解法(1):A=[3.01 6.03 1.99;1.27 4.16 -1.23;0.987 -4.81 9.34]b=[1;1;1][x1,l1,u1]=malu(A,b);x1l1u1A =3.0100 6.0300 1.99001.2700 4.1600 -1.23000.9870 -4.8100 9.3400b =111x1 =1.0e+003 *1.5926-0.6319-0.4936l1 =1.0000 0 00.4219 1.0000 00.3279 -4.2006 1.0000u1 =3.0100 6.0300 1.99000 1.6158 -2.06960 0 -0.0063>>A=[3.00 6.03 1.99;1.27 4.16 -1.23;0.990 -4.81 9.34] b=[1;1;1][x1,l1,u1]=malu(A,b);x1l1u1A =3.0000 6.0300 1.99001.2700 4.1600 -1.23000.9900 -4.8100 9.3400b =111x1 =119.5273-47.1426-36.8403l1 =1.0000 0 00.4233 1.0000 00.3300 -4.2306 1.0000u1 =3.0000 6.0300 1.99000 1.6073 -2.07240 0 -0.0844>> (2)A=[10,-7,0,1;-3,2.09999,6,2;5,-1,5,-1;2,1,0,2] b=[8;5.900001;5;1][x1,l1,u1]=malu(A,b);x1l1u1A =10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000b =8.00005.90005.00001.0000x1 =0.0000-1.00001.00001.0000l1 =1.0e+005 *0.0000 0 0 0-0.0000 0.0000 0 00.0000 -2.5000 0.0000 00.0000 -2.4000 0.0000 0.0000u1 =1.0e+006 *0.0000 -0.0000 0 0.00000 -0.0000 0.0000 0.00000 0 1.5000 0.57500 0 0 0.0000>> A=[10,-7,0,1;-3,2.1,6,2;5,-1,5,-1;2,1,0,2]b=[8;5.9;5;1][x1,l1,u1]=malu(A,b);x1l1u1A =10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000b =8.00005.90005.00001.0000x1 =NaNNaNNaNNaNl1 =1.0000 0 0 0-0.3000 1.0000 0 00.5000 Inf 1.0000 00.2000 Inf NaN 1.0000u1 =10.0000 -7.0000 0 1.00000 0 6.0000 2.30000 0 -Inf -Inf0 0 0 NaN高斯列主元消去法:(1):A1=[3.01 6.03 1.99;1.27 4.16 -1.23;0.987 -4.81 9.34] b=[1;1;1]condA1=cond(A1)%(1)中A的条件数[Determ1,x1]=magauss2(A1,b,1)A2=[3.00 6.03 1.99;1.27 4.16 -1.23;0.990 -4.81 9.34] b=[1;1;1]condA2=cond(A2)[Determ2,x2]=magauss2(A2,b,1 )运行结果如下A1 =3.0100 6.0300 1.99001.2700 4.1600 -1.23000.9870 -4.8100 9.3400b =111condA1 =3.0697e+004Ab =3.0100 6.0300 1.9900 1.00000 1.6158 -2.0696 0.57810 -6.7873 8.6875 0.6721 Ab =3.0100 6.0300 1.9900 1.00000 -6.7873 8.6875 0.67210 0 -0.0015 0.7381 Determ1 =-0.0305x1 =1.0e+003 *1.5926-0.6319-0.4936A2 =3.0000 6.0300 1.99001.2700 4.1600 -1.23000.9900 -4.8100 9.3400b =111condA2 =2.3028e+003Ab =3.0000 6.0300 1.9900 1.00000 1.6073 -2.0724 0.57670 -6.7999 8.6833 0.6700Ab =3.0000 6.0300 1.9900 1.00000 -6.7999 8.6833 0.67000 0 -0.0200 0.7350Determ2 =-0.4070x2 =119.5273-47.1426-36.8403(2)A1=[10,-7,0,1;-3,2.09999,6,2;5,-1,5,-1;2,1,0,2] b=[8;5.900001;5;1]condA1=cond(A1)%(1)中A的条件数[Determ1,x1]=magauss2(A1,b,1)A2=[10,-7,0,1;-3,2.1,6,2;5,-1,5,-1;2,1,0,2]b=[8;5.9;5;1]condA2=cond(A2)-[Determ2,x2]=magauss2(A2,b,1)A1 =10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000b =8.00005.90005.00001.0000condA1 =5.8745Ab =10.0000 -7.0000 0 1.0000 8.00000 -0.0000 6.0000 2.3000 8.30000 2.5000 5.0000 -1.5000 1.00000 2.4000 0 1.8000 -0.6000 Ab =10.0000 -7.0000 0 1.0000 8.00000 2.5000 5.0000 -1.5000 1.00000 0 6.0000 2.3000 8.30000 0 -4.8000 3.2400 -1.5600 Ab =10.0000 -7.0000 0 1.0000 8.00000 2.5000 5.0000 -1.5000 1.00000 0 6.0000 2.3000 8.30000 0 0 5.0800 5.0800 Determ1 =-762.0009x1 =0.0000-1.00001.00001.0000A2 =10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000b =8.00005.90005.00001.0000condA2 =5.8746Ab =10.0000 -7.0000 0 1.0000 8.00000 0 6.0000 2.3000 8.30000 2.5000 5.0000 -1.5000 1.00000 2.4000 0 1.8000 -0.6000 Ab =10.0000 -7.0000 0 1.0000 8.00000 2.5000 5.0000 -1.5000 1.00000 0 6.0000 2.3000 8.30000 0 -4.8000 3.2400 -1.5600 Ab =10.0000 -7.0000 0 1.0000 8.00000 2.5000 5.0000 -1.5000 1.00000 0 6.0000 2.3000 8.30000 0 0 5.0800 5.0800Determ2 =-762x2 =0.0000-1.00001.00001.0000四算法分析在(1)中;直接三角解法与高斯列主元消去解法的结果是一样的,而经过改变某些值后,其结果还是一样,看不出来那个方法好在(2)中直接三角解法出现结果:五总结通过实验,深入并基本掌握高斯消去法和高斯列主元消去法的步骤,二经过实际问题的求解,感受到高斯列主元消去法的优点,以及算法的不同产生的误差很大,对我们的问题求解有很大的影响。
实验三 编程实现列主元高斯消去法
实验三编程实现列主元高斯消去法1.实验目的:实现高斯主消元法,对计算过程加深理解。
2.实验内容:编写c++程序,实现对角占优方程组的编程求解。
3.实验步骤1、设计方程组的存储为二位数组,最大方程组数为100,第i行j列的元素值代表第i个方程的第j个系数,输入时没有的系数项填0。
2 对于每个方程按主消元法从0~n-1依次消元。
3迭代求解,对于第i个未知数的值,依次迭代i+1~n-1已求出的结果4.实验结果分析:对于除数很小的情况程序不能很好的解决,对于不是对角占优的也不能搜索出主元素,以后在进一步解决上述问题。
#include<iostream>using namespace std;const int MAX=100;double str[MAX][MAX];int main(){while(1){cout<<"输入方程组个数0<n<100"<<endl;int n,m,i,j,k,flag=0;cin>>n;if(n<=0||n>=100)break;cout<<"输入方程组的系数"<<endl;for(i=0;i<n;i++){for(j=0;j<=n;j++){cin>>str[i][j];if(i==j&&str[i][j]==0)flag=1;}}if(flag==1){cout<<"方程组不是对角占优的,此程序不能解决"<<endl;system("pause");return 0;}for(i=0;i<n;i++){for(j=n;j>=i;j--)//对角变一str[i][j]/=str[i][i];for(k=i+1;k<n;k++)//方程消元{double tem=str[k][i]/str[i][i];for(j=i;j<=n;j++){str[k][j]-=str[i][j]*tem;}}}double ans[MAX]={0};ans[n-1]=str[n-1][n];for(i=n-2;i>=0;i--){ans[i]=str[i][n];for(j=n-1;j>i;j--)ans[i]-=str[i][j]*ans[j];}for(i=0;i<n;i++)cout<<"X"<<i+1<<" = "<<ans[i]<<endl;system("pause");}}。
试验四 Gauuss列主元消去法解线性方程组实验报告
for(j=0;j<m+1;j++) scanf("%lf",&ab[i][j]); printf("您输入的系数增广矩阵为:\n"); for(i=0;i<m;i++) { for(j=0;j<=m;j++) printf(" %10.9f",ab[i][j]); printf("\n"); } for(i=0;i<m-1;i++)//i 是行 { Change(ab,m,i); for(k=i+1;k<m;k++) { f=ab[i][i]; g=ab[k][i]; e=-(g/f); for(t=0;t<m+1;t++) { ab[k][t]+=ab[i][t]*e; } } } printf("经行处理后原矩阵变为:\n"); for(k=0;k<m;k++) { for(t=0;t<=m;t++) printf(" %10.9f",ab[k][t]); printf("\n"); } printf("方程组的解为:\n"); ab[2][2]=ab[2][3]/ab[2][2]; ab[1][1]=(ab[1][3]-ab[1][2]*ab[2][2])/ab[1][1]; ab[0][0]=(ab[0][3]-ab[0][2]*ab[2][2]-ab[0][1]*ab[1][1])/ab[0][0]; for(i=0;i<m;i++) printf("x%d=%10.9f\n",i+1,ab[i][i]); }
(完整word版)Gauss消去法Matlab
实验一 用列主元Gauss 消去法求解线性方程组实验目的会使用Matlab 语言编程使用列主元Gauss 消去法求解线性方程组.实验原理1、 列主元Gauss 消去法记线性方程组1112111212222212n n n n nn n n a a a x b a a a x b a a a x b ⎛⎫⎛⎫⎛⎫⎪⎪ ⎪ ⎪⎪ ⎪=⎪⎪ ⎪⎪⎪ ⎪⎝⎭⎝⎭⎝⎭ 为Ax=b, 其中A =111212122212n n n n nn a a a a a a a a a ⎛⎫ ⎪ ⎪ ⎪⎪⎝⎭,x=12n x x x ⎛⎫⎪ ⎪ ⎪⎪⎝⎭, b=12n b b b ⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭, 记其增广矩阵为()(1)(1)(1)1111(1)(1)(1)(1)(1)2122(1)(1)(1)1n nn nnn a a b aa b Ab a a b ⎛⎫ ⎪ ⎪= ⎪ ⎪ ⎪⎝⎭。
设主元(1)11a 0≠,记(1)11(1)11(2,3,,)i i a l i n a =-=,用1i l 乘增广矩阵()(1)(1)A b 的第1行,再分别与第i 行相加,得()(1)(1)(1)(1)111211(1)(1)(2)(2)(2)2222(2)(2)(2)2b 00n nn nnn a a a a a b Ab a a b ⎛⎫ ⎪⎪= ⎪ ⎪ ⎪⎝⎭, 其中(2)(1)(1)1,ij ij i ij a a l a =+ i ,j=2,3,,n(2)(1)(1)11,i i i b b l b =+ i=2,3,,n又设主元(2)(2)i222i2(2)22a 0,l =-a a≠用乘矩阵()(2)(2)A b 的第二行,再与第i 行相加(i=3,4,,n ),得()(1)(1)(1)(1)(1)1112131n 1(2)(2)(2)(2)22232n 2(3)(3)(3)(3)(3)333n3(3)(3)(3)n3nnn b 0b Ab =0b 00b a a a a a a a a a a a ⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭. 经过n-1步消去后,增广矩阵最终变为()=)()( n n b A实验程序function x=gaussc(A ,b ) [n,m ]=size(A); A=[A ,b]; for k=1:n —1for p=k+1:nif abs(A (p ,k))>abs(A(k ,k )) for j=k :n+1 t=A(k,j );A (k,j)=A(p,j ); A(p,j)=t; end endend %搜索主元并交换 for i=k+1:nl=-A(i ,k )/A(k,k); for j=k+1:n+1A (i,j )=A(i ,j )+l*A(k,j); end endend %消去过程结束 x(n)=A (n,n+1)/A (n ,n); for i=n —1:-1:1 s=0;for j=i+1:ns=s+A (i,j)*x(j ); endx (i)=(A (i,n+1)-s )/A (i,i); end实验结果设A=[2,5;4,6],b=[3;4],求解线形方程组Ax=b.实验步骤:1) 先在matlab 里输入上面的程序;2) 然后输入A=[2,5;4,6] b=[3;4]3)再输入x=gaussc(A,b)命令即得出结果.由以上程序可求解得到x=( 0.2500 0。
数值分析高斯顺序消去法、列主元消去法LU分解法
数值分析实验报告(1)学院:信息学院班级:计算机0903班姓名:***学号:********课题一A.问题提出给定下列几个不同类型的线性方程组,请用适当的方法求解线性方程组1、设线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------------------1368243810041202913726422123417911101610352431205362177586832337616244911315120130123122400105635680000121324⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125 x *= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T2、设对称正定阵系数阵线方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----------------------19243360021411035204111443343104221812334161206538114140231212200420424⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡87654321x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---4515229232060 x * = ( 1, -1, 0, 2, 1, -1, 0, 2 )T3、三对角形线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------4100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----5541412621357 x *= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )TB.(1)对上述三个方程组分别用Gauss 顺序消去法与Gauss 列主元消去法;平方根 与改进平方根法;追赶法求解(选择其一) (2)编写算法通用程序(3)在应用Gauss 消去时,尽可能利用相应程序输出系数矩阵的三角分解式C.(1)通过该课题的程序编制,掌握模块化结构程序设计方法 (2)掌握求解各类线性方程组的直接方法,了解各种方法的特点 (3)体会高斯消去法选主元的必要性 实验步骤:(高斯消去法,列主元,LU )1顺序高斯消去法2.LU 分解法3.列主元高斯消去法(如下图)(1)高斯消去法运行结果如下(2)对方程的系数矩阵进行LU分解并求出方程组的解(3)列主元高斯消去法实验体会总结:利用gauss消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。
Gauss列主元消去法
贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级: 实验日期: 年 月 日 学 号: 姓名: 指导教师: 实验成绩:一、实验名称实验五:线性方程组的数值解法二、实验目的及要求1. 让学生掌握用列主元gauss 消去法、超松弛迭代法求解线性方程组.2. 培养Matlab 编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0).四、实验内容1. 编制逐次超松弛迭代(SOR 迭代)函数(子程序),并用于求解方程组⎪⎪⎩⎪⎪⎨⎧=-++=+-+=++-=+++-141414144321432143214321x x x x x x x x x x x x x x x x取初始向量T x )1,1,1,1()0(=,迭代控制条件为 5)1()(1021||||--⨯≤-k k x x 请绘制出迭代次数与松弛因子关系的函数曲线,给出最佳松弛因子.SOR 迭代的收敛速度是否一定比Gauss-Seidel 迭代快?2. 编制列主元 Gauss 消去法函数(子程序),并用于解 ⎪⎩⎪⎨⎧=++-=-+-=+-615318153312321321321x 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 调选列主元模块 .步3 若0=kk a ,则=x “消去法失败”,结束 .步4 对n k k i ,,2,1 ++=执行步5→步6 .步5 对n k k j ,,2,1 ++=执行ij kj kk ik ij a a a a a +⨯-⇐/ .步6 i k kk ik i b b a a b +⨯-⇐/ .步7 nn n n a b x /⇐ .步8 对1,,2,1 --=n n i 执行ii n i j j ij i i a x a b x /)(1∑+=-⇐ .步9 输出T n x x x x ),,,(21 = .选列主元模块:功能 选列主元 .输入 n k k i b n k k j i a i ij ,,1,,;,,1,,, +=+= .输出 n k k i b n k k j i a i ij ,,1,,;,,1,,, +=+= .步1 kk a m ⇐;k l ⇐ .步2 对n k k i ,,2,1 ++=执行若m a ik >则ik a m ⇐;i l ⇐ .步3 若k l ≠,则交换kj a 和lj a ,n k k j ,,1, +=;交换k b 和l b .步4 返回主模块 .六、调试过程及实验结果>> A=[12,-3,3;-18,3,-1;1,1,1];>> b=[15;-15;6];>> x=Gauss1(A,b)Ab =-18.0000 3.0000 -1.0000 -15.00000 1.1667 0.9444 5.16670 0 3.1429 9.4286 index = 1x = 1.0000 2.0000 3.0000七、总结由于数)1(-k kka 在Gauss 消去法中有着突出的作用,第k 步消元时,要用)1(-k kk a 作除数,如果)1(-k kk a =0消元会失败,即使主元)1(-k kk a ≠0,但很小时,舍入误差也会使计算结果面目全非,避免这种缺陷的基本方法就是选主元。
Gauss消去法和列主元消去法
max=abs(C(s,s));big=0;
if det(C(s:n,s:n))==0
disp('此方程无解');
answer=0;
break;
end
for i=s:n
if max<abs(C(i,s))
max=abs(C(i,s));
k=i;
big=1;
else continue
for i=n:(-1):1
X(i,1)=C(i,n+1);
for j=(i+1):n
X(i,1)=X(i,1)-E(i,j)*X(j,1);
end
X(i,1)=X(i,1)/E(i,i);
ห้องสมุดไป่ตู้end
disp('此方程的解为:')
X
end
5、实验结果
请输入未知数系数矩阵A:
A=[2,-1,3;4,2,5;1,2,0]
3、实验原理
高斯列主元消去法
4、实验内容
clc;clear;format short
disp('请输入未知数系数矩阵A:');
A=input('A=');
disp('请输入常数项列向量B:');
B=input('B=');
C=[A,B];
[m,n]=size(A);
s=1;answer=1;P=zeros(1,n);L=zeros(n);I=eye(n);
y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;
break;
实验二:Gauss列主元消去法
实验二:Gauss列主元消去法程序1:Gauss列主元消去法A=input('请输入线性方程组的增广矩阵A=');n=length(A)-1;x=zeros(n,1);aa=zeros(n,1);for j=1:nfor i=1:(n+1)AA(j,i)=abs(A(j,i));endendfor k=1:(n-1)for i=k:naa(i-(k-1))=AA(i,k);endfor i=k:nif AA(i,k)==max(aa)breakendendif AA(i,k)==0breakfprintf('方程组系数矩阵奇异\n');elsefor j=k:(n+1)jh=A(i,j);A(i,j)=A(k,j);A(k,j)=jh;endendfenzi=A(k,k);for j=k:(n+1)A(k,j)=A(k,j)/fenzi;endfor p=(k+1):njj=A(p,k);for j=k:(n+1)A(p,j)=A(p,j)-jj*A(k,j);endendendif k==(n-1)x(n)=A(n,(n+1))/A(n,n);for i=(n-1):(-1):1he=0;for j=(i+1):nhe=he+A(i,j)*x(j);endx(i)=A(i,(n+1))-he;endendx用Gauss列主元消去法解方程组:1.请输入线性方程组的增广矩阵A=[1e-008,2,3,1;-1,3.172,4.623,2;-2,1.072,5. 643,3]x =-0.4653-0.07000.38002.请输入线性方程组的增广矩阵A=[4,-2,4,10;-2,17,10,3;-4,10,9,-7];x =2.94640.6071-0.14293.请输入线性方程组的增广矩阵A=[0.3e-020,1,0.7;1,1,0.9]x =0.20000.7000程序2:不选主元的高斯消去法A=input('请输入线性方程组的增广矩阵A=');n=length(A)-1;x=zeros(n,1);for k=1:(n-1)if A(k,k)==0breakfprintf('方程组不能用普通的高斯消去法解\n');elsefenzi=A(k,k);for j=k:(n+1)A(k,j)=A(k,j)/fenzi;endfor p=(k+1):njj=A(p,k);for j=k:(n+1)A(p,j)=A(p,j)-jj*A(k,j);endendx(n)=A(n,(n+1))/A(n,n);for i=(n-1):(-1):1he=0;for j=(i+1):nhe=he+A(i,j)*x(j);endx(i)=A(i,(n+1))-he;endendendx用不选主元的Gauss消去法解方程组:1.请输入线性方程组的增广矩阵A=[4,-2,4,10;-2,17,10,3;-4,10,9,-7];x =2.94640.6071-0.14292.请输入线性方程组的增广矩阵A=[1e-008,2,3,1;-1,3.172,4.623,2;-2,1.072,5. 643,3];x =-0.4653-0.07000.38003.请输入线性方程组的增广矩阵A=[0.3e-020,1,0.7;1,1,0.9]x =0.7000。
高斯消元法与列主元消去法实验报告
实验报告:Gauss消元法小组成员:李岚岚、邱粉珊、缪晓浓、杨水清学号:0917020040、0917010078、0917010073、0917010112一、实验问题编写两个程序,分别利用Gauss消元法和列主元消去法求解方程组二、分析及其计算过程Gauss顺序消元法:源程序:function [x]=gaussl(A,b)[n1,n2]=size(A);n3=size(b);if n1~=n2|n2~=n3|n1~=n3disp('A的行和列的维数不同!');return;endif det(A)==0disp('系数矩阵A奇异');return;end%消元过程L=eye(n1);for j=2:n1for i=j:n1L(i,j-1)=A(i,j-1)/A(j-1,j-1);A(i,:)=A(i,:)-L(i,j-1)*A(j-1,:);b(i)=b(i)-L(i,j-1)*b(j-1);endend%回代过程x(n1)=b(n1)/A(n1,n1);for t=n1-1:-1:1for k=n1:-1:t+1b(t)=b(t)-A(t,k)*x(k);endx(t)=b(t)/A(t,t);end程序的运行以及结果:>>A=[1 2/3 1/3;9/20 1 11/20;2/3 1/3 1];>>b=[2 2 2];>> [x]=gaussl(A,b)x =1 1 1Gauss列主元消去法:源程序:function [x]=gaussll(A,b) [n1,n2]=size(A);n3=size(b);if n1~=n2|n1~=n3|n2~=n3disp('输入的方程错误!');return;endif det(A)==0disp('系数矩阵A奇异');return;endmax=zeros(n1);for m=1:n1%找主元for i=m:n1if abs(A(i,m))>maxmax=A(i,:);A(i,:)=A(m,:);A(m,:)=max;maxb=b(i);b(i)=b(m);b(m)=maxb;endend%消元过程L=eye(n1);for j=2:n1for i=j:n1L(i,j-1)=A(i,j-1)/A(j-1,j-1);A(i,:)=A(i,:)-L(i,j-1)*A(j-1,:);b(i)=b(i)-L(i,j-1)*b(j-1);endendend%回代过程x(n1)=b(n1)/A(n1,n1);for t=n1-1:-1:1for k=n1:-1:t+1b(t)=b(t)-A(t,k)*x(k);endx(t)=b(t)/A(t,t);end程序的运行以及结果:>>A=[-0.002 2 2;1 0.78125 0;3.996 5.5625 4]; >>b=[0.4 1.3816 7.4178];>>[x]= gaussll(A,b)x =1.9273 -0.6985 0.9004。
Gauss消去法实验报告
a1(10)
x1
.
.
.
a(0) 1n
xn
b1(0)
a (1) 22
x2
.
.
.
a (1) 2n
xn
b2(1)
.
.
a (1) n2
x2
...
a (1) nn
xn
bn(1)
这样就完成了第 1 步消元。
回代过程:
在最后的一方程中解出
xn
,得:
xn
b ( n 1) n
%计算乘子 % 对 k+1~n 项进 行消元 %增广矩阵第 i 行 减去第 k 行的乘子 倍目的是将该矩 阵中的第 k 列中 a(k,k)以下的元 素全部消为零 %回代求解
%此循环用来求 a (j,k)*x(j)由 k+1~n 项的和 %输出最终的解 X
end
x=zeros(n,1);
x(n)=b(n)/a(n,n);
实验二、列主元法解线性方程组
一、实验目的: 1、学习使用 matlab 编写数值计算程序。 2、了解列主元消去法的基本原理和解法思路及相应的编程方法。 3、根据列主元法的原理编写 matlab 程序,并运行出相应的结果,提高 matlab 编程能力。
二、实验原理:
由一般线性方程组在使用 Gauss 消去法求解时,从求解过程中可以清楚地看到,若
a(k 1) kk
0
,必须施以行交换的手续,才能使消去过程继续下去。有时既使
a(k kk
1)
0
,
但其绝对值很小,由于舍入误差的影响,消去过程也会出现不稳定现象。因此,为
计算方法实验报告_列主元高斯消去法
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++) {
解线性方程组的列主元素高斯消去法和lu分解法
数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、算法描述:本次试验采用的是高斯列主元消去法和LU 分解法求解线性方程组的解。
其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A 可逆时,列主元Gauss(高斯)消去法一定能进行到底。
优点:具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。
列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。
注意:省去换列的步骤,每次仅选一列中最大的元。
矩阵的三角分解法是A=LU,L 是下三角阵,U 是上三角阵,Doolittle 分解:L 是单位下三角阵,U 是上三角阵;Crout 分解:L 是下三角阵,U 是单位上三角阵。
矩阵三角分解的条件 是矩阵A 有唯一的Doolittle 分解的充要条件是A 的前n-1顺序主子式非零;矩阵A 有唯一的Crout 分解的充要条件是A 的前n-1顺序主子式非零。
三角分解的实现是通过(1)Doolittle 分解的实现; (2)Doolittle 分解的缺点:条件苛刻,且不具有数值稳定性。
(3)用Doolittle 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x a 、用你熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量x.b 、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x及detA,并与(1)中结果比较。
数值分析实验二(列主元Gauss消去法)
《数值分析》实验报告实验编号:实验二课题名称:列主元Gauss消去法一、算法介绍1、输入矩阵的阶数n,方程组的增广矩阵A;2、对k=0,1,…,n-2,循环:选取列中绝对值最大的元素,将主元所在的行的元素保存在数组temp[n+1]中。
若主元为零,则系数矩阵奇异,计算停止;否则,顺序进行。
如果绝对值最大的元素就在矩阵的对角线上,则进行普通高斯消元法的第一大步,否则将方程组系数换行之后再进行普通高斯消元法的第一大步;3、然后利用回代法求解线性方程组。
二、程序代码#include<iostream>#include<cmath>#include<iomanip>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消元法求解线性方程组***"<<endl;cout<<"请输入矩阵的阶数:"<<endl;cin>>n;double a[n][n+1];double t[n+1];double x[n];memset(a,0,sizeof(a));memset(x,0,sizeof(x));cout<<"请输入方程组的增广矩阵:"<<endl;for(i=0;i<n;i++){for(j=0;j<n+1;j++){cin>>a[i][j];}}for(k=0;k<n-1;k++){max=0;j1=0;for(i=k;i<n;i++){if(fabs(a[i][k])>max){max=fabs(a[i][k]);i1=i;j1=k;}}if(max==0){cout<<"该系数矩阵为奇异矩阵,计算停止"<<endl;flag=1;break;}else{cout<<"第"<<j1+1<<"列中绝对值最大的元素是"<<a[i1][j1]<<",在线性方程组的第"<<i1+1<<"行"<<endl;if(i1!=k){for(j=0;j<=n;j++){t[j]=a[i1][j];a[i1][j]=a[k][j];a[k][j]=t[j];}}for(i=k+1;i<=n-1;i++){m=a[i][k]/a[k][k];for(j=k;j<=n;j++)a[i][j]=a[i][j]-m*a[k][j];for(g=0;g<n;g++){for(h=0;h<n+1;h++)cout<<setiosflags(ios::fixed)<<setprecision(2)<<a[g][h]<<" ";cout<<endl;}cout<<endl;}}}if(flag==0){x[n-1]=a[n-1][n]/a[n-1][n-1] ;double sum=0;for(k=n-2;k>=0;k--){sum=0;for(i=n-1;i>=k;i--)sum+=a[k][i]*x[i];x[k]=(a[k][n]-sum)/a[k][k];}cout<<"该线性方程组的解为:"<<endl;for(i=0;i<n;i++)cout<<"x"<<i+1<<"="<<setiosflags(ios::fixed)<<setprecision(2)<<x[i]<<endl;}system("pause");return 0;}三、运算结果截屏四、算法分析列主元Gauss消元法避免了普通高斯消元法中出现的问题:遇到某个主元为零或者当主元绝对值很小时,计算将会停止或求出的结果将与其实际结果相差很远。
Gauss完全主元素消去法解方程组完全
计算方法实验报告(三)班级:地信10801 序号:姓名:一、实验题目:Gauss完全主元素消去法解方程组二、实验学时: 2学时三、实验目的和要求1、掌握高斯完全主元素消去法基础原理2、掌握高斯完全主元素消去法解方程组的步骤3、能用程序语言对高斯完全主元素消去法进行编程实现四、实验过程代码及结果1.代码#include<stdio.h>#include<iostream.h>#include"math.h"float a[100][101];float x[10];int N; //阶数void shuchu(){for(int i=1;i<=N;i++){for(int j=1;j<=N+1;j++){cout<<a[i][j];cout<<" "<<" ";}cout<<endl;}}void initdata(){cout<<"请输入阶数N:";cin>>N;cout<<endl;cout<<"请输入N*(N+1)个数"<<endl; //输入矩阵中的数for(int i=1;i<=N;i++)for(int j=1;j<=N+1;j++){cin>>a[i][j];}cout<<endl;cout<<"建立的矩阵为:"<<endl; //打印出矩阵shuchu();}void main(){int z[10];int maxi,maxj;initdata();for(int i=1;i<=N;i++)z[i]=i;for(int k=1;k<N;k++){maxi=k;maxj=k;float maxv=abs(a[k][k]);for(i=k;i<=N;i++)for(int j=k;j<=N;j++)if(abs(a[i][j])>maxv){maxv=abs(a[i][j]);maxi=i;maxj=j;}if(maxi!=k) //换行{for(int j=1;j<=N+1;j++){float t=a[k][j];a[k][j]=a[maxi][j];a[maxi][j]=t;}}if(maxj!=k) //换列{for(i=1;i<=N;i++){float t=a[i][k];a[i][k]=a[i][maxj];a[i][maxj]=t;}int t=z[k]; z[k]=z[maxj];z[maxj]=t;}for(int i=k+1;i<=N;i++) //消元{float l=a[i][k]/a[k][k];for(int j=k;j<=N+1;j++){a[i][j]+=-l*a[k][j];}}}//回代for(i=N;i>0;i--){float s=0;for(int j=i+1;j<=N;j++){s+=a[i][j]*x[z[j]];}x[z[i]]=(a[i][N+1]-s)/a[i][i];}cout<<"用完全主元素消去法后的矩阵为:" <<endl; shuchu();for(i=1;i<=N;i++) // 打印出x[i]cout<<"x["<<i<<"]="<<x[i]<<endl;}2.结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
谢谢4 ① 消元计算(k=1,2,….,n-1) ()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.kkikikkkkkkijijikkjkkkiiikkmaaiknaamaijknbbmbikn ② 回带公式 ()()()()()1/,()/,1,...,2,1.nnnnnnniiiiiiijiijixbaxbaxain (2)如果A为非奇异矩阵,则可通过高斯消去法将方程组Ax=b约化方程组为上三角矩阵 以上消元和回代过程总的乘除法次数为332333nnnn,加减法次数为32353263nnnn 以上过程就叫高斯消去法。 Ⅱ、Gauss列主元素消去法 设Ax=b.本算法用A的具有行交换的列主元素消去法,消元结果冲掉A,乘法ikm冲掉ija,计算解x冲掉常数项b,行列式存放在det中。 1、det1 2、对于k=1,2,…,n-1 (1) 按列主元 ,maxikikkinaka (2) 如果,0ikak,则停止(det(A)=0) (3) 如果ki=k则转(4) 换行:1*(*)/*det*det0/ikkkijijikkjniiijjiiikkjinnnnnnnnmaaamabbabambaabba
谢谢10 if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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); if abs(A(n,n))<1e-10 index=0;return; end 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 计算结果如下:
谢谢8 ① 、计算源程序: 计算程序如下: function [x,det,index]=gauss(A,b) A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1;1;1]; [n,m]=size(A); nb=length(b); if n~=m error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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
谢谢3 (2) 15900001.58201215152609999.23107104321xxxx 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss列主元素消去法解,并将两次计算的结果进行比较。 【实验仪器与软件】 1.CPU主频在1GHz以上,内存在128Mb以上的PC; 2.Matlab 6.0及以上版本。 实验讲评: 实验成绩: 评阅教师: 200 年 月 日 Lab06.Gauss列主元素消去法实验 第一题: 1、算法描述: Ⅰ、Gauss消去法由书上定理5可知 设Ax=b,其中A∈R^(n*n) (1)如果()0(1,2,....,1)kkkakn,则可通过高斯消去法将Ax=b约化为等价的 角形线性方程组,且计算公式为:
谢谢9 det=det*A(n,n); if abs(A(n,n))<1e-10 index=0;return; end 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 运行结果如下: ans = 1.0e+003 * 1.5926 -0.6319 -0.4936 >> ②、计算修改后的程序: 计算程序如下: function [x,det,index]=gauss(A,b) A=[3.00,6.03,1.99;1.27,4.16,-1.23;0.990,-4.81,9.34];b=[1;1;1]; [n,m]=size(A); nb=length(b); if n~=m error('The rows and columns of natrix A must be equal !'); return; end
谢谢6 x = SolveUpTriangle(U,y); function y=SolveDownTriangle(L,b) N=size(L); n=N(1); for i=1:n if(i>1) s=L(i,1:(i-1))*y(1:(i-1),1); else s=0; end y(i,1)=(b(i)-s)/L(i,i); end function x=SolveUpTriangle(U,y) N=size(U); n=N(1); for i=n:-1:1 if(i<n) s=U(i,(i+1):n)*x((1+i):n,1); else s=0; end x(i,1)=(y(i)-s)/U(i,i); end 第三题: 编写用Gauss列主元素消去法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b、PA=LU分解的L与U、detA及解向量x,交换顺序。 编写M文件如下: function [x,det,index]=gauss(A,b) [n,m]=size(A); nb=length(b); if n~=m error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1);
Байду номын сангаас
auss列主元素消去
实验
谢谢2 Lab06.Gauss列主元素消去法实验 【实验目的和要求】 1.使学生深入理解并掌握Gauss消去法和Gauss列主元素消去法步骤; 2.通过对Gauss消去法和Gauss列主元素消去法的程序设计,以提高学生程序设计的能力; 3.对具体问题,分别用Gauss消去法和Gauss列主元素消去法求解。通过对结果的分析比较,使学生感受Gauss列主元素消去法优点。 【实验内容】 1.根据Matlab语言特点,描述Gauss消去法和Gauss列主元素消去法步骤。 2.编写用不选主元的直接三角分解法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b,A=LU分解的L与U,detA及解向量x。 3.编写用Gauss列主元素消去法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b、PA=LU分解的L与U、detA及解向量x,交换顺序。 4.给定方程组 (1) 11134.981.4987.023.116.427.199.103.601.3321xxx
谢谢7 for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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); if abs(A(n,n))<1e-10 index=0;return; end 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 第四题: Ⅰ、运用Gauss列主元素消去法解上述程序计算矩阵: ⑴、计算第一个矩阵
谢谢5 (4) 消元计算对于 i=k+1,…,n ① ikaikm=ika/kka ② 对于j=k+1,…,n *ijijikkjaama ③ *iiikkbbmb (5) det*detkka 3、如果0nna,则计算停止(det(A)=0) 4、回代求解 (1)/nnnnbba (2)对于i=n-1,…,2,1 1(*)/niiijjiijibbaba 5、det*detnna 第二题: 编写用不选主元的直接三角分解法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b,A=LU分解的L与U,detA及解向量x。 编写M文件如下: function [x,L,U]=Doolittle(A,b) N = size(A); n = N(1); L = eye(n,n); U = zeros(n,n); U(1,1:n) = A(1,1:n); L(1:n,1) = A(1:n,1)/U(1,1); for k=2:n for i=k:n U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i) end for j=(k+1):n L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k) end end y = SolveDownTriangle(L,b);