实验一解线性方程组的消元法.docx
《实验一解线性方程组的消元法.docx》由会员分享,可在线阅读,更多相关《实验一解线性方程组的消元法.docx(15页珍藏版)》请在冰豆网上搜索。
实验一解线性方程组的消元法
佛山科学技术学院
实验报告
课程名称数值分析
实验项目解线性方程组的消元法
专业班级12信息与计算科学姓名李焕雄学号2012254114
指导教师黄国顺成绩日期月日
一.实验目的
1、掌握程序的录入和matlab的使用和操作;
2、了解影响线性方程组解的精度的因素——方法与问题的性态。
3、学会Matlab提供的“\”的求解线性方程组。
二.实验要求
1、按照题目要求完成实验内容;
2、写出相应的Matlab程序;
3、给出实验结果(可以用表格展示实验结果);
4、分析和讨论实验结果并提出可能的优化实验。
5、写出实验报告。
三.实验步骤
1、用调试好的程序解决如下问题:
用Gauss列主元素消去法求
的解,其中
a)
,
b)
,
2、调用matlab中的“\”解上述算例
3、分别用上述程序和matlab中的“\”求线性方程组
当
时的数值解,求解精度为
四.实验结果
用Gauss列主元素消去法求
的解
a)
,
方程的解如下所示:
b)
,
方程的解如下所示:
调用matlab中的“\”解上述算例
a)
,
结果如下所示:
b)
,
结果如下所示:
将每种情形的两个结果进行表格对比,如:
n=10时:
GAUSS列主元素消去法求得的x
算符“\”求得的x
n=20时:
GAUSS列主元素消去法求得的x
算符“\”求得的x
1.0e+011*
-0.0000
0.0000
-0.0001
0.0003
0.0031
-0.0484
0.2722
-0.8017
1.2795
-1.0022
0.5123
-1.2174
1.6283
1.0728
-4.4451
4.2400
-2.0630
1.0230
-0.6406
0.1870
det=
-1.5680e-195
index=
1
n=30时:
GAUSS列主元素消去法求得的x
算符“\”求得的x
1.0e+011*
-0.0000
0.0000
-0.0004
0.0046
-0.0236
0.0036
0.5197
-2.5411
5.7098
-6.6892
4.9696
-6.1670
7.4791
-0.0187
-4.6497
-2.5152
4.0175
-1.9990
7.3409
-4.2950
-0.7613
-4.0744
2.5774
-1.0095
8.0474
-8.9604
5.4848
-4.4931
2.4792
-0.4359
det=
0
index=
1
1.0e+011*
-0.0000
0.0000
-0.0003
0.0041
-0.0308
0.1212
-0.2157
-0.0621
0.9925
-1.8839
2.1480
-2.3723
1.4024
1.8047
-3.1732
1.9467
-1.8441
0.5439
0.6650
0.9839
0.4927
-2.2828
0.9781
-2.0193
2.0842
-1.1819
2.4548
-0.7191
-1.7914
0.9543
五.讨论分析
GAUSS列主元素消去法求得的x和用算符“\”求得的x的结果在解精度为
且n=10的情况下是一样的,但是在n=20或者n=30的情况下得出的结果确实不一样的!
六.改进实验建议
目前能力不足,还没能看出什么很好的解决方法,不过我相信自己往后能够做得更好!
源程序代码
function[x,det,index]=Gauss(A,b)
%ÇóÏßÐÔ·½³Ì×éµÄÁÐÖ÷ÔªGaussÏûÈ¥·¨£¬ÆäÖÐ
%A---方程组矩阵
%b---方程组右端
%x---方程组的解
%det---方程组行列式
%index---index=0表示求解失败,index=1表示求解成功¦
[n,m]=size(A);nb=length(b);
ifn~=m
error('TherowsandcolumnsofmatrixAmustbeequal!
');
return;
end
ifm~=nb
error('ThecolumnsofAmustbeequalthedimensionofb!
');
return;
end
index=1;det=1;x=zeros(n,1);
fork=1:
n-1
%选主元
a_max=0;
fori=k:
n
ifabs(A(i,k))>a_max
a_max=abs(A(i,k));r=i;
end
end
ifa_max<1e-20
index=0;
return;
end
%交换两行
ifr>k
forj=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
%消元过程
fori=k+1:
n
m=A(i,k)/A(k,k);
forj=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);
%回代过程
ifabs(A(n,n))<1e-20
index=0;
return;
end
fork=n:
-1:
1
forj=k+1:
n
b(k)=b(k)-A(k,j)*x(j);
end
x(k)=b(k)/A(k,k);
end
以下程序只做参考,别对号入座。
1、a=[1,2,3;4,5,6;7,8,0];b=[1,1,1]';
>>[a,det,index]=gauss(a,b)
a=-6.999999999999999
3.000000000000000
1.999999999999999
2.000000000000000
det=4
index=1
2、
a=[2.000,-2.000,3.000,-3.000;0.5000,2.000,-0.5000,1.5000;0.5000,0,2.5000,4.5000;0.5000,0,0.2000,-0.4000];b=[-14,6,4,4]';
>>[x,det,index]=gauss(a,b)
x=25.161290322580637
-16.612903225806445
-22.129032258064509
10.387096774193546
det=6.200000000000001
index=1
3、用“\”解上述算例。
x=a\b
x=
25.161290322580637
-16.612903225806445
-22.129032258064509
10.387096774193546
(4)h=hilb(10);
>>b=1:
10;
>>b=b';
>>x=h\b
x=
1.0e+008*
-0.0000
0.0010
-0.0233
0.2330
-1.2106
3.5940
-6.3221
6.5102
-3.6227
0.8405
%用Gauss消元法计算结果。
[x,det,index]=Gauss(h,b)
x=
1.0e+008*
-0.0000
0.0010
-0.0233
0.2330
-1.2107
3.5942
-6.3225
6.5106
-3.6228
0.8406
det=2.1644e-053
%n=20时的计算结果
h=hilb(20);
b=1:
20;
b=b’;
x=h\b
x=1.0e+011*
-0.0000
0.0000
-0.0002
0.0031
-0.0186
0.0417
0.0882
-0.7609
1.8918
-2.2165
1.4532
-2.1529
4.0656
-1.5508
-4.6865
5.3767
0.2748
-3.5146
2.1100
-0.4039
%用Gauss消元法计算结果
[x,det,index]=Gauss(h,b)
x=1.0e+011*
-0.0000
0.0000
-0.0001
0.0003
0.0031
-0.0484
0.2722
-0.8017
1.2795
-1.0022
0.5123
-1.2174
1.6283
1.0728
-4.4451
4.2400
-2.0630
1.0230
-0.6406
0.1870
det=-1.5680e-195