实验2 解线性方程组实验(1)
成绩 |
实验类型:●验证性实验 ○综合性实验 ○设计性实验
实验目的:进一步熟练掌握用Jacobi迭代法和Gauss-Seidel法解线性方程组的算法,提高编程能力和解算线性方程组问题的实践技能。
实验内容:(1)取初值性x(0)=(0,0,0,0)T, 精度要求ε=10-6,用Jacobi迭代法解线性方程组
(2)取初值性x(0)=(0,0,0,0)T, 精度要求ε=10-6,用Gaoss-Seidel迭代法解线性方程组
实验原理:Jacobi迭代算法,Gaoss-Seidel迭代算法
实验说明:编写程序计算并输出中间结果;再要求分别用Jacobi迭代算法,Gaoss-Seidel迭代算法手工解算线性方程组,并验证计算机程序迭代计算的前两步近似解向量X(1),X(2)与手工迭代计算的前两步近似解向量X(1),X(2)是否一致,并给出验证结论。必须提交A4规格的纸质手工书写手工计算的过程内容(只要求手写迭代计算的前两步X(1),X(2))和计算机程序计算输出的中间结果和最终结果。
实验步骤
1 要求上机实验前先编写出程序代码
2 编辑录入程序
3 调试程序并记录调试过程中出现的问题及修改程序的过程
4 经反复调试后,运行程序并验证程序运行是否正确。
5 记录运行时的输入和输出。
实验报告:根据实验情况和结果撰写并递交实验报告。
实验总结(学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。)
程序代码
电子报告word文件命名规则:专业班级-学号后两位-实验X-姓名.doc, 如信息123班学号为201212030315的郭海涛同学实验2报告word文件命名则应是:信息123-15-实验2-郭海涛.doc, 其中 .doc是Word文件扩展名。特别提醒:电子报告文件命名不规范的报告将不予接收。
实验报告:
1、雅可比迭代
function [x,y] = Jacobi(n, A ,b)
%y = zeros(1000,1);
eps = 1.0e-6;
D = diag(diag(A));
L = -tril(A, -1);
U = -triu(A, 1);
B = D\(L+U);
f = D\b;
count = 1;
x0 = zeros(n,1);
x = B*x0 + f;
tic;
while norm(x-x0)> eps
x0 = x;
%y(count) = norm(x-A\b);
x = B*x0 + f;
count = count + 1;
if count > 2000
disp('error:该矩阵不收敛');
return;
end
>> A=[14 4 4 4;4 14 4 4;4 4 14 4;4 4 4 14]
A =
14 4 4 4
4 14 4 4
4 4 14 4
4 4 4 14
>> b=[-4;16;36;56]
b =
-4
16
36
56
>> x=majacobi(A,b,x0,ep,N)
k=94
x =
-2.0000
0.0000
2.0000
4.0000
2、高斯迭代
function x= Gauss_Seidel(n, A ,b)
eps = 1.0e-6;
D = diag(diag(A));
L = -tril(A, -1);
U = -triu(A, 1);
B = (D - L)\U;
f = (D - L)\b;
count = 1;
x0 = zeros(n,1);
x = B*x0 + f;
tic;
while norm(x-x0) > eps
x0 = x;
x = B*x0 + f;
count = count + 1;
if count > 2000
disp('error:¸Ã¾ØÕó²»ÊÕÁ²');
return;
end
end
disp(count);
end
>> A=[6 -2 -1 -1;-2 12 -1 -1;-1 -1 6 -2;-1 -1 -1 12]
A =
6 -2 -1 -1
-2 12 -1 -1
-1 -1 6 -2
-1 -1 -1 12
>> b=[-16;6;8;54]
b =
-16
6
8
54
>> n=4
n =
4
>> x= Gauss_Seidel(n, A ,b)
13
x =
-1.0782
0.9553
2.8897
4.7306
实验总结:通过本次实验我学会了雅可比迭代算法和高斯迭代算法,可以使用这两个算法来解线性方程组;掌握了MATLAB中的rand函数、diag函数、orth函数tril函数和triu函数;训练了关于迭代函数的用法;发现了自己在编写程序时仍然有很多问题,使用这些函数时存在的一些问题;在今后的学习中我编写代码的能力和使用函数的能力有待提高。