课程名称: 数值分析 班级: 数本(一)班 实验日期: 年 月 日
学 号: 090704020098(81) 姓名: 吴胜 指导教师: 杨一都
实验成绩:
一、实验名称
实验五:线性方程组的数值解法
二、实验目的及要求
1. 让学生掌握用列主元gauss消去法、超松弛迭代法求解线性方程组.
2. 培养Matlab编程与上机调试能力.
三、实验环境
每人一台计算机,要求安装Windows XP操作系统,Microsoft office2003、MATLAB6.5(或7.0).
四、实验内容
1. 编制逐次超松弛迭代(SOR迭代)函数(子程序),并用于求解方程组
取初始向量,迭代控制条件为
请绘制出迭代次数与松弛因子关系的函数曲线,给出最佳松弛因子.SOR迭代的收敛速度是否一定比Gauss-Seidel迭代快?
2. 编制列主元 Gauss 消去法函数(子程序),并用于解
要求输出方程组的解和消元后的增广矩阵. 注:题2必须写实验报告
五、算法描述及实验步骤
Gauss消去法:
功能 解方程组.
输入 , ,.
输出 方程组的解或失败信息.
步1 对执行步2→步4 .
步2 调选列主元模块 .
步3 若,则“消去法失败”,结束 .
步4 对执行步5→步6 .
步5 对执行.
步6 .
步7 .
步8 对执行.
步9 输出.
选列主元模块:
功能 选列主元 .
输入 .
输出 .
步1 ; .
步2 对执行若则; .
步3 若,则交换和,;交换和.
步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.0000
0 1.1667 0.9444 5.1667
0 0 3.1429 9.4286
index =
1
x =
1.0000
2.0000
3.0000
七、总结
由于数在Gauss消去法中有着突出的作用,第k步消元时,要用作除数,如果=0消元会失败,即使主元0,但很小时,舍入误差也会使计算结果面目全非,避免这种缺陷的基本方法就是选主元。
通过选主元,就可避免绝对值小的数作除数,从而避免舍入误差的恶性增长,使得Gauss列主元消去法是解中小规模的线性方程组和某些大型稀疏线性方程组的有效方法。
八、附录(源程序清单)
function [x,index]=Gauss1(A,b)
[n,m]=size(A);x=zeros(n,1); index=1
for k=1:n-1
a_max=0;
for i=k:n
if abs(A(i,k))>a_max
a_max=abs(A(i,k));r=i;
end
end
if a_max<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;
end
for i=k+1:n
m=A(i,k)/A(k,k);
for j=k:n
A(i,j)=A(i,j)-m*A(k,j);
end
b(i)=b(i)-m*b(k);
end
end
if abs(A(n,n))==0
index=0;return;
end
Ab=[A,b]
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
for j=i+1:n
b(i)=b(i)-A(i,j)*x(j);
end
x(i)=b(i)/A(i,i);
end