数学软件课程设计
题目 班级 数学081班 姓名 潘珊珊
实验目的
用Matlab语言实现Jacobi迭代算法、Gauss-Seidel迭代算法和逐次超松弛迭代法,求解一般的线性代数方程组问题。
实验内容
一、Jacobi迭代算法:
程序如下:
function y=jacobi(A,b,x0,r)
D=diag(diag(A));
U=triu(A,1);
L=tril(A,-1);
B=-D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=r&n
x0=y;
y=B*x0+f;
n=n+1;
end
fprintf('方程组的解 y=');
y
fprintf('\n');
fprintf('迭代次数 n=',y);
n
二、Gauss-Seidel迭代算法:
程序如下:
function y=gaussseidel(A,b,x0)
D=diag(diag(A));
U=-triu(A,1);
L=-tril(A,-1);
G=(D-L)\U;
f=(D-L)\b;
y=G*x0+f;
n=1;
while norm(y-x0)>=1.0e-6&n
x0=y;
y=G*x0+f;
n=n+1;
end
fprintf('方程组的解y=');
y
fprintf('迭代次数n=',y);
n
三、松弛法:
程序如下:
function y=sor(A,b,w,x0) D=diag(diag(A));
U=triu(A,1);
L=tril(A,-1);
lw=(D-w*L)\((1-w)*D+w*U); f=(D-w*L)\b*w;
y=lw*x0+f;
n=1;
while norm(y-x0)>=1.0e-6&n
y=lw*x0+f;
n=n+1;
end
fprintf('方程组的解 y='); y
fprintf('\n');
fprintf('迭代次数 n=',y); n
实验结果
一、Jacobi迭代算法:
A=[4 1 1;1 4 2;2 2 8];
b=[2;3;4];
x0=[0;0;0];
a(A,b,x0,0.001)
方程组的解 y=
y =
0.2940
0.5292
0.2940
迭代次数 n=
n =
14
ans =
0.5292
0.2940
二、Gauss-Seidel迭代算法:
A=[4 1 1;1 4 2;2 2 8]; >> b=[2;3;4];
>> x0=[0;0;0];
>> gauss(A,b,x0)
方程组的解y=
y =
0.2941
0.5294
0.2941
迭代次数n=
n =
10
ans =
0.2941
0.5294
0.2941
三、松弛法:
A=[1 2 3;2 1 3;1 2 6]; >> b=[1;2;3];
>> x0=[0;0;0];
>> sor(A,b,1.1,x0)
方程组的解 y=
y =
1.0e+308 *
1.7796
Inf
Inf
迭代次数 n=
n =
320
ans =
1.0e+308 *
1.7796
Inf
Inf
数学软件课程设计
题目 班级 数学081班 姓名 潘珊珊
实验目的
用Matlab语言实现Jacobi迭代算法、Gauss-Seidel迭代算法和逐次超松弛迭代法,求解一般的线性代数方程组问题。
实验内容
一、Jacobi迭代算法:
程序如下:
function y=jacobi(A,b,x0,r)
D=diag(diag(A));
U=triu(A,1);
L=tril(A,-1);
B=-D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=r&n
x0=y;
y=B*x0+f;
n=n+1;
end
fprintf('方程组的解 y=');
y
fprintf('\n');
fprintf('迭代次数 n=',y);
n
二、Gauss-Seidel迭代算法:
程序如下:
function y=gaussseidel(A,b,x0)
D=diag(diag(A));
U=-triu(A,1);
L=-tril(A,-1);
G=(D-L)\U;
f=(D-L)\b;
y=G*x0+f;
n=1;
while norm(y-x0)>=1.0e-6&n
x0=y;
y=G*x0+f;
n=n+1;
end
fprintf('方程组的解y=');
y
fprintf('迭代次数n=',y);
n
三、松弛法:
程序如下:
function y=sor(A,b,w,x0) D=diag(diag(A));
U=triu(A,1);
L=tril(A,-1);
lw=(D-w*L)\((1-w)*D+w*U); f=(D-w*L)\b*w;
y=lw*x0+f;
n=1;
while norm(y-x0)>=1.0e-6&n
y=lw*x0+f;
n=n+1;
end
fprintf('方程组的解 y='); y
fprintf('\n');
fprintf('迭代次数 n=',y); n
实验结果
一、Jacobi迭代算法:
A=[4 1 1;1 4 2;2 2 8];
b=[2;3;4];
x0=[0;0;0];
a(A,b,x0,0.001)
方程组的解 y=
y =
0.2940
0.5292
0.2940
迭代次数 n=
n =
14
ans =
0.5292
0.2940
二、Gauss-Seidel迭代算法:
A=[4 1 1;1 4 2;2 2 8]; >> b=[2;3;4];
>> x0=[0;0;0];
>> gauss(A,b,x0)
方程组的解y=
y =
0.2941
0.5294
0.2941
迭代次数n=
n =
10
ans =
0.2941
0.5294
0.2941
三、松弛法:
A=[1 2 3;2 1 3;1 2 6]; >> b=[1;2;3];
>> x0=[0;0;0];
>> sor(A,b,1.1,x0)
方程组的解 y=
y =
1.0e+308 *
1.7796
Inf
Inf
迭代次数 n=
n =
320
ans =
1.0e+308 *
1.7796
Inf
Inf