文档库 最新最全的文档下载
当前位置:文档库 › 数值分析线性方程组的雅可比和高斯迭代法实验

数值分析线性方程组的雅可比和高斯迭代法实验

实验报告

专业:数学与应用数学(师范)

年级:09级班级:as09101 学号:as0910135 姓名:曾晓冰

一、实验目的

1.掌握用迭代法求解线性方程组的基本思想和计算步骤;

2.能熟练地写出Jacobi迭代法的迭代格式的分量形式,并能比较它们各自的特点及误差估计;

3.理解迭代法的基本原理及特点,并掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代格式的分量形式、矩阵形式及其各自的特点;

4.掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代算法的MATLAB程序实现方法,及了解松弛因子对SOR迭代的影响;

5.用SOR迭代法求解线性方程组时,超松弛因子ω的取值大小会对方程组的解造成影响,目的就是能够探索超松弛因子ω怎样对解造成影响,通过这个实验我们可以了解ω的大致取值范围。

二、实验题目

题目1、解线性方程组的迭代法

书本P33 (Ⅱ)上机实验2.1(1)

利用算法2.1(Jacobi迭代法),编制Mathlab程序,求线性方程组

(1)

1

2

3

4 144444 4144416 4414436 4441756

x

x

x

x

-

??

????

?

? ?

?

? ?

=

?

? ?

?

? ? ? ?

?

????

??

题目2、解线性方程组的直接法

书本P59 (Ⅱ)上机实验3.1(2)

3.1利用算法3.1(顺序Gauss消去法),编制Mathlab程序,求线性方程组

(2)

1

2

3

4

10.4 1.2 2.2 1.910.54

1.511.2 3.5

2.522.47

2.1 1.59.6 1.818.27 1.6 4.5 1.412.829.93

x

x

x

x

??

????

?

? ?

-

?

? ?

=

?

? ?

-

?

? ? ? ?

?

????

??

三、实验原理

题目1:运用了Jacobi 迭代算法思想:

Jacobi 的迭代格式:

(1)1()1()k K x D D A X D b +--=-+

1. 取初始点x(0),精度要求ε,最大迭代次数N ,置k :=0;

2. 由n 1i ),x a -

(b x n i j 1,j (k)

j j i i 11)(k i

,,?==∑≠=+ii a ,计算出x (k+1); 3. 若

ε≤-∞+)

()1(k k x x ,则停算,输出x(k+1)作为方程组的近

似解; 4. 若k=N ,则停算,输出迭代失败信息;否则置k :=k+1,转步2。

题目2:运用了Gauss-Seidel 迭代算法思想:

Gauss-Seidel 迭代的计算格式:

1(1)(1)()11

1()i n k k k i i i j j i j j j j i i j x b a x a x a -++==+=--∑∑ 1.输入矩阵A ,右端向量b ,初始点x(0),精度要求ε,最大迭代次数N ,置k:=0;

2.计算

nn

n ii i a x n i a xi a ???? ??=-?=???

? ??-=???

? ??=∑∑∑∑==+==1-n 1j (0)j nj n 1-i 1j n 1j (0)j ij j ij i 11n 2j (0)j 1j 11x a -b ,

1,,2,x a x a -b ,

x a -b x

3.

ε≤-∞)

0(x x ,则停算,输出x 作为方程组的近似解; 4. 若k=N ,则停算,输出迭代失败信息;否则置x (0):=x ,k:=k+1,

转步骤2。

四、实验内容

1、实验步骤

题目1、(1)打开matlab 软件,在matlab 命令窗口执行程序,并在命令窗口编

写程序,运行程序(见附录一),记录结果(见实验结果1.1)。

题目2、(1)打开matlab 软件,在matlab 命令窗口执行程序,并在命令窗口编

写程序,运行程序(见附录二),记录结果(见实验结果1.2)。

五、实验结果

1.1

1.2

六、实验结果分析

1、由实验结果1.1可以知道书本上机实验题2.1(1)解得的结果为x=(-2 0 2 4)’,由k=96知道方程组的迭代次数为96次,没有超出设定的迭代次数的上限。

2、由实验结果1.2可以知道书本上机实验题3.1(2)解得的结果为x=(1.1877 -2.1199 -2.4319 3.2011)’。

附录一:

% 第1题程序

·%建立M文件,并编写以下程序

function x=majacobi(A,b,x0,ep,N)

n=length(b);

if nargin<5,N=500;end

if nargin<4,ep=1e-6;end

if nargin<3,x0=zeros(n,1);end

x=zeros(n,1); k=0;

while k

for i=1:n

x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i);

end

if norm(x-x0,inf)

x0=x;k=k+1;

end

if k==N,Warning('已达到迭代次数上限');end

disp(['k= ',num2str(k)])

%在命令窗口编写以下程序

>> A=[14 4 4 4;4 14 4 4;4 4 14 4;4 4 4 14];

>> b=[-4 16 36 56]';

>> x=majacobi(A,b)

k= 94

附录二:

·%建立M文件,并编写以下程序

%magauss.m

function x=magauss(A,b,flag)

if nargin<3,flag=0;end

n=length(b);

for k=1:(n-1)

m=A(k+1:n,k)/A(k,k);

A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);

b(k+1:n)=b(k+1:n)-m*b(k);

A(k+1:n,k)=zeros(n-k,1);

if flag~=0, Ab=[A,b], end

end

x=zeros(n,1);

x(n)=b(n)/A(n,n);

for k=n-1:-1:1

x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);

end

%在命令窗口编写以下程序

>> A=[10.4 1.2 2.2 1.9;1.5 11.2 3.5 2.5;2.1 1.5 9.6 1.8;1.6 4.5 1.4 12.8];

>> b=[10.54 -22.47 -18.27 29.93]';

>> x=magauss(A1,b1);x1'

(此报告版权归本人所有,任何单位或个人不得以任何形式传播、盗版此报告,否则将追究其法律责任)

相关文档
相关文档 最新文档