
学 生 实 验 报 告
实验课程名称 数值计算
开课实验室 DS1421
学 院 2009 年级 土木 专业班 11班
学 生 姓 名 周波 学 号 ********
开 课 时 间 2010 至 2011 学年第 一 学期
| 总 成 绩 | |
| 教师签名 |
| 名称 | 数值计算 | 实验项目 名 称 | Gauss消元法 | 实验项目类型 | ||||
| 验证 | 演示 | 综合 | 设计 | 其他 | ||||
| 指导 教师 | 何光辉 | 成 绩 | √ | |||||
| 实验目的、实验原理 通过高斯消元法的实践环节,达到加深对高斯消元法理解和培养学生程序设计能力的目的。 逐次消去未知数的系数,将Ax=b化为等价的上三角方程组,然后回代解之,这就是Gauss消元法。 实验内容与步骤 直接建立求解该方程组的M文件Gauss.m如下: %求解例题 %高斯法求解线性方程组Ax=b %A为输入矩阵系数,b为方程组右端系数 %方程组的解保存在x变量中 %先输入方程系数 A=[???]; b=[???]'; [m,n]=size(A); %检查系数正确性 if m~=n error('矩阵A的行数和列数必须相同'); return; end if m~=size(b) error('b的大小必须和A的行数或A的列数相同'); return; end %再检查方程是否存在唯一解 if rank(A)~=rank([A,b]) error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解'); return; end %这里采用增广矩阵行变换的方式求解 c=n+1; A(:,c)=b; %%消元过程 for k=1:n-1 A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); end %%回代结果 x=zeros(length(b),1); x(n)=A(n,c)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k); end %显示计算结果 disp('x='); disp(x); 计算实例、数据、结果、分析 用Gauss消元法解方程组: A=[1 2 3;2 7 5;1 4 9]; b=[1 6 -3]'; 直接运行上面的M文件或在Matlab命令窗口中直接输入Gauss即可得出结果. 在Matlab命令窗口中输入Gauss得出结果如下: >> Gauss x= 2.0000 1.0000 -1.0000 实验中遇到的问题及解决办法 消元过程要求a(ii)≠0,(i=1,2,…,n-1),回代过程则进一步要求a(nn)≠0。 Matlab求解线性方程的几种命令如下(方程组的一般形式可用矩阵和向量表示成: ,但运用下列方法的前提必须保证所求解的方程为恰定方程,即方程组存在唯一的一组解) : 运用求逆思想: 或 ; 左除法,原理上是运用高斯消元法求解,但Matlab在实际执行过程中是通过分解法进行的(即先将矩阵A作分解,再回代计算): ; 用符号矩阵法计算,这种计算方法最接近精确值,但计算速度最慢: 通过将矩阵施行初等行变换化成行简化阶梯形的办法,可以这样实现之: ; . 实验结论 通过高斯消元法的实践环节,我初步了解了使用Matlab求解线性方程组的其中一种方法,熟悉了软件使用流程,理解了Gauss消元法的数学思想和Matlab的程序思想。 教师签名 年 月 日 | ||||||||
