消元法实验报告1

时间:2024.3.31

西京学院数学软件实验任务书


                                 实验一实验报告  

一、实验名称:线性方程组高斯消去法。

二、实验目的:进一步熟悉理解Guass消元法解法思路,提高matlab编程能力。

三、实验要求:已知线性方程矩阵,利用软件求解线性方程组的解。

四、实验原理

消元过程:

,令乘数,做(消去第i个方程组的)操作×第1个方程+第i个方程(i=2,3,.....n)

则第i个方程变为

这样消去第2,3,。。。,n个方程的变元后。原线性方程组变为:

这样就完成了第1步消元。

回代过程:

在最后的一方程中解出,得:

再将的值代入倒数第二个方程,解出,依次往上反推,即可求出方程组的解:

其通项为

五、实验内容:

function maintest2

clc

clear all

A=[1 3 4;2 4 5;1 4 6];%系数矩阵

b=[1 7 6]'%常数项

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

End

六、实验结果:

A =

    1.0000    3.0000    4.0000

         0   -2.0000   -3.0000

         0         0    0.5000

b =

    1.0000

    5.0000

    7.5000

x =

    16   -25    15


第二篇:消元法实验报告8


西京学院数学软件实验任务书


实验1

线性方程组高斯消去法

高斯顺序消去法是一种古老的求解线性方程组的方法,对于线性方程组,作如下运算不会改变方程组的解:

1) 交换任意两个方程的顺序。

2) 方程中组任一方程乘上一个非零数。

3) 方程组中任一方程加上另一个方程的倍数。

这是高斯消元的理论依据。

实验内容及数据来源

用列主元消去法计算方程组

实验步骤

步骤一:编写列主元消去法的程序。

打开 Editor 编辑器,输入以下语句:

function maintest2

clc

clear all

%num=input('please input the order n=')

%A=zeros(num,num);

%for i=1:num

 %   for j=1:num

  %      A(i,j)=input('');

  %  end

%end

%A

%if det(A)~=0

%for i=1:num

 %       b(i)=input('');

%end

%b=b'

A=[1 2 3;1 3 5;1 3 6];%系数矩阵

b=[2 3 4]'%常数项

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

end

运算结果

A =

     1     2     3

     0     1     2

     0     0     1

b =

     2

     1

     1

x =

     1    -1     1

实验结论

高斯消元能很好的求解线性方程组,和用克莱姆法则求解方程组该算法简单而且计算次数少。但是高斯顺序消元是有缺陷的,它并没有考虑主对角元素相对其他同列元素绝对值很小,有时会导致用绝对值较小的数字做分母而出现较大的数字与较小数字进行相加减运算而被“吞掉”的现象,以至于产出某一未知元较小的误差却引起其他元更大的误差。

实验2

列主元消去法计算线性方程组

高斯顺序消元法最后指出了在逐次消元过程中,如果主对角元素相对其他同列元素绝对值很小,有时会导致用绝对值较小的数字做分母而出现较大的数字与较小数字进行相加减运算而被“吞掉”的现象,以至于产出某一未知元较小的误差却引起其他元更大的误差。

为了使消元过程中见效舍入误差和不至于中断,我们可以不按照自然顺序进行消元。事实上,在第步消元的时候,我们不一定选取作为主元,而从同列中选择绝对值最大的作为主元素,即使

如此我们就得到了列主元消去法。

实验内容及数据来源

用列主元消去法计算方程组

实验步骤

步骤一:编写列主元消去法的程序。

打开 Editor 编辑器,输入以下语句:

function maintest

clc

clear all

n=input('please input the order n=')

A=zeros(n,n);

for i=1:n

    for j=1:n

        A(i,j)=input('');

    end

end

A

if det(A)~=0

for i=1:n

        b(i)=input('');

end

b=b'

zengguang=[A,b]

for k=1:n-1

%  %取出各列绝对值最大的放在上面作为主元

     [Y,j]=max(abs(zengguang(k:n,k)));

            C=zengguang(k,:);

            zengguang(k,:)= zengguang(j+k-1,:);

            zengguang(j+k-1,:)=C;

%高斯消元

    for i=k+1:n

         m= zengguang(i,k)/ zengguang(k,k);

                zengguang(i,k:n+1)= zengguang(i,k:n+1)-m* zengguang(k,k:n+1);

        end

       

    end

end

%回代求x

      b=zengguang(1:n,n+1);

        A=zengguang(1:n,1:n);

      x(n)=b(n)/A(n,n);

for i=n-1:-1:1

    sum=0;

    for j=i+1:n

        sum=sum+A(i,j)*x(j);

    end

    x(i)=(b(i)-sum)/A(i,i);

end

x

end

把文件以maintest.m为文件名保存。

步骤二:解方程。在命令窗口输入:

please input the order n=3

并且输入系数矩阵

A =

     1     2     3

     1     3     5

     1     3     6

输入常数项为

b =

     2

     3

     4

得到增广矩阵为:

zengguang =

     1     2     3     2

     1     3     5     3

     1     3     6     4

运行结果得到

x =

     1    -1     1

实验结论

把向量计算得到的解向量代入原方程,可以发现符合的还是比较好的。这说明了列主元消去法计算这一类方程的有效性。事实上,对于普通Gauss消去法的修正,还可以有行主元消去法,全主元消去法。但是全主元消去法相对于行、列主元消去法的工作量要大的多。所以列主元消去法是解线性方程组实用的方法之一。

实验3

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

全主元消去法是对于一般的矩阵,每一步都要处理的矩阵中选取绝对值最大的元素最为主元,从而使高斯消去具有更好的数值稳定性的方法。

实验内容及数据来源

用高斯全主元消去法计算方程组

实验步骤

步骤一:编写求上三角矩阵线性方程组的函数。

打开 Editor 编辑器,输入以下语句:

function x=SolveUpTriangle(A,b)

%求上三角系数矩阵的线性方程组Ax=b的解

%线性方程组的系数矩阵:A

%线性方程组中的常数向量:b

%线性方程组的解:x

N=size(A);

n=N(1);

for i=n:-1:1

    if (i<n)

        s=A(i,(i+1):n)*x((i+1):n,1);

    else

        s=0;

    end

    x(i,1)=(b(i)-s)/A(i,i);

end

把文件以SolveUpTriangle.m为文件名保存。

步骤二:编写高斯全主元消去的算法。

打开 Editor 编辑器,输入以下语句:

clc

clear all

%利用高斯全主元消去法求AX=b方程组的解

A=[3 2 0 0;1 4 2 0;0 1 2 1;0 0 -1 1]

b=[5 7 2 -2]'

N=size(A);

n = N(1);

index_l = 0;

index_r = 0;

order = 1:n;  %记录未知数顺序的向量

for i=1:(n-1)

    me = max(max(abs(A(i:n,i:n))))  %选取全主元

    for k=i:n

        for r=i:n

            if(abs(A(k,r))==me)

                index_l = k;

                index_r = r;      %保存主元所在的行和列

                k=n;

                break;

            end

        end

    end

     temp = A(i,1:n);

     A(i,1:n) =  A(index_l,1:n);

     A(index_l,1:n) = temp;

     bb = b(index_l);

     b(index_l)=b(i);

     b(i) = bb;                  %交换主行

     temp = A(1:n,i);

     A(1:n,i) = A(1:n,index_r);

     A(1:n,index_r) = temp;       %交换主列

     pos = order(i);

     order(i) = order(index_r);

     order(index_r) = pos;        %主列的交换会造成未知数顺序的变化       

    

     for j=(i+1):n

        if(A(i,i)==0)

            disp('对角元素为0!');

            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

x=SolveUpTriangle(A,b); %调用上三角系数矩阵求线性方程组的函数

y=zeros(n,1);

for i=1:n

    for j=1:n

        if(order(j)==i)

            y(i)=x(j);

        end

    end

end                      %恢复未知数原来的顺序

x=y;

XA = A;

x

把文件以GaussQuanzhuyuan.m为文件名保存。

运行上面这段程序得到计算结果:

A =

    4.0000    1.0000    2.0000         0

         0    2.5000   -1.0000         0

         0         0    1.4000    1.0000

         0         0         0    1.7143

b =

    7.0000

    1.5000

    0.4000

   -1.7143

x =

    1.0000

    1.0000

    1.0000

   -1.0000

实验结论

虽然全主元消去法的求解结果更加可靠,高斯消去具有更好的数值稳定性。但是由于全选主元每步消耗的时间更多,而且要进行列交换,那么所求未知量x1,x2,……xn的顺序就会被打乱,因此,时间应用中一般使用列主元消去法。

更多相关推荐:
算法实验报告

算法设计与分析实验报告班级姓名学号年月日目录实验一二分查找程序实现03页实验二棋盘覆盖问题分治法08页实验三01背包问题的动态规划算法设计11页实验四背包问题的贪心算法14页实验五最小重量机器设计问题回溯法17...

算法设计实验报告

算法设计课程报告课题名称算法设计与实现课题负责人名学号张樱紫0743111317同组成员名单角色无指导教师左劼评阅成绩评阅意见提交报告时间20xx年12月23日课程名称算法设计学生姓名张樱紫学生学号074311...

中南大学--算法实验报告

中南大学--算法实验报告,内容附图。

遗传算法实验报告

遗传算法实验报告姓名:**学号:**一、实验目的:熟悉和掌握遗传算法的运行机制和求解的基本方法。遗传算法是一种基于空间搜索的算法,它通过自然选择、遗传、变异等操作以及达尔文的适者生存的理论,模拟自然进化过程来寻…

算法设计实验报告

1hanoi塔packagesyyimportjavautilpublicclassHanoipublicstaticvoidmoveintnintaintbSystemoutprintlnquot把第quot...

算法实验报告

算法导论实验报告实验一快速排序1问题描述实现对数组的普通快速排序与随机快速排序2算法原理设要排序的数组是A0AN1首先选取一个数据普通快排选择的是最后一个元素随记快排是随机选择一个元素作为关键数据然后将所有比它...

算法分析与设计实验报告

排序问题求解实验日志实验题目排序问题求解实验目的1以排序分类问题为例掌握分治法的基本设计策略2熟练掌握一般插入排序算法的实现3熟练掌握快速排序算法的实现4理解常见的算法经验分析方法实验要求1生成实验数据要求编写...

算法设计与分析实验报告三

贵州师范大学数学与计算机科学学院实验报告课程名称算法设计与分析班级13计本实验日期学号115703020xx2姓名吴道镁指导教师熊祥光成绩一实验名称贪心算法最优装载问题二实验目的及要求1掌握贪心算法的基本思想2...

粒子群算法实验报告

专业班号组别指导老师姓名同组者实验日期第十四周第3次实验四实验内容1首先编写通用代码粒子群测试各个函数的主代码写出来对于不同的测试函数只需要调用相应的测试函数即可将各个函数做成m的文件matlab源代码程序如下...

算法实验报告(完美版)

实验报告实验一一实验名称二分搜索法二实验目的编写程序实现用二分法在一有序序列中查找一个数三实验内容1程序源代码includeltstdiohgtintResearchintaintxintnintleft0ri...

分治算法实验报告

本科学生综合性实验报告姓名刘春云学号0103918专业软件工程班级103实验项目名称二分搜索问题的分治算法实验指导教师及职称赵晓平开课学期20xx至20xx学年3学期上课时间20xx年2月18日学生实验报告1一...

算法实验报告一

算法设计与分析课程实验报告专业计算机科学与技术班级学号姓名日期20xx年10月18日23

算法实验报告(32篇)