视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
线性方程组迭代解法
2025-09-26 16:26:36 责编:小OO
文档
实验六:线性方程组迭代解法         

1)实验目的

•熟悉Matlab编程;

•学习线性方程组迭代解法的程序设计算法

2)实验题目

1.研究解线性方程组Ax=b迭代法收敛速度。A为20阶五对角距阵 

要求:

(1)选取不同的初始向量x0 及右端向量b,给定迭代误差要求,用雅可比迭代和高斯-赛德尔迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。

(2)用SOR迭代法求解上述方程组,松弛系数ω取1< ω <2的不同值,在                         

时停止迭代.记录迭代次数,分析计算结果并得出你的结论。

2.给出线性方程组,其中系数矩阵为希尔伯特矩阵:

, 

假设若取分别用雅可比迭代法及SOR迭代()求解,比较计算结果。

3)实验原理与理论基础

1.雅克比(Jacobi)迭代法算法设计:

      ①输入矩阵a与右端向量b及初值x(1,i);

      ②按公式计算得

                   

2.高斯――赛得尔迭代法算法设计:

1. 输入矩阵a与右端向量b及初值x(1,i).

      2.     (i = 1, 2,…, n)

  3.超松驰法算法设计:

①输入矩阵a与右端向量b及初值x(1,i)。 

②,

4)实验内容

第一题实验程序:

1.雅克比迭代法:

function []=yakebi(e)

%输入矩阵a与右端向量b。

for i=1:20

    a(i,i)=3;

end

for i=3:20

    for j=i-2

        a(i,j)=-1/4;

        a(j,i)=-1/4;

    end

end

for i=2:20

    for j=i-1

        a(i,j)=-1/2;

        a(j,i)=-1/2;

    end

end

b=[2.2 1.7 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.7 2.2];

k=1;

n=length(a);

for i=1:n

    x(1,i)=1;%数组中没有第0行。

end

while k>=1

    for i=1:n

        m=0;

         %此步也可以用ifj~=i条件判定一下。

        for j=1:(i-1)

             m=m+a(i,j)*x(k,j);

        end

        for j=(i+1):n

             m=m+a(i,j)*x(k,j);

        end

        x(k+1,i)=(b(i)-m)/a(i,i);

    end

    l=0;

    %判定满足条件使循环停止迭代。

    for i=1:n

        l=l+abs(x(k+1,i)-x(k,i));

    end

    if l        break

    end

     k=k+1;

end

%输出所有的x的值。

  x(k+1,:)

k   

2.高斯—赛德尔迭代法:

function []=gaoshisaideer(e)

for i=1:20

    a(i,i)=3;

end

for i=3:20

    for j=i-2

        a(i,j)=-1/4;

        a(j,i)=-1/4;

    end

end

for i=2:20

    for j=i-1

        a(i,j)=-1/2;

        a(j,i)=-1/2;

    end

end

b=[2.2 1.7 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.7 2.2];

k=1;

n=length(a);

for i=1:n

    x(1,i)=0;%数组中没有第0行。

end

while k>=1

    for i=1:n

       p=0;q=0; 

        for j=1:(i-1)

             p=p+a(i,j)*x(k+1,j);

        end

        for j=(i+1):n

             q=q+a(i,j)*x(k,j);

        end

        x(k+1,i)=(b(i)-q-p)/a(i,i);

    end

    l=0;

    %判定满足条件使循环停止迭代。

    for i=1:n

        l=l+abs(x(k+1,i)-x(k,i));

    end

    if l        break

    end

     k=k+1;

end

%输出所有的x的值。

  x(k+1,:)

k

3.SOR迭代法程序:

function []=caosongci(e,w)

for i=1:20

    a(i,i)=3;

end

for i=3:20

    for j=i-2

        a(i,j)=-1/4;

        a(j,i)=-1/4;

    end

end

for i=2:20

    for j=i-1

        a(i,j)=-1/2;

        a(j,i)=-1/2;

    end

end

b=[2.2 1.7 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.7 2.2];

k=1;

n=length(a);

for i=1:n

    x(1,i)=0;%数组中没有第0行。

end

while k>=1

       if w>=2||w<=1

           '请重新输入w的值,w在1与2之间';

            break

        end

    for i=1:n

       p=0;q=0; 

        for j=1:(i-1)

             p=p+a(i,j)*x(k+1,j);

        end

        for j=i:n

             q=q+a(i,j)*x(k,j);

        end

        x(k+1,i)=x(k,i)+w*(b(i)-q-p)/a(i,i);

    end

    l=0;

    %判定满足条件使循环停止迭代。

    for i=1:n

        l=l+abs(x(k+1,i)-x(k,i));

    end

    if l        break

    end

     k=k+1;

end

%输出所有的x的值。

  x(k+1,:)

k

第二题实验程序:

1.雅克比迭代法:

function X = p211_1_JJ(n)

Hn = GET_Hn(n);

b = GET_b(n);

temp = 0;

X0 = zeros(1, n);

X_old = zeros(1, n);

X_new = zeros(1, n);

disp('Now Jacobi method!');

disp('Start with the vector that (0, 0, 0, ...)^T');

for i = 1:n

            for k = 1:n

                X_old = X_new;

                temp = 0;

                for j = 1:n

                    if(j ~= i)

                        temp = temp + Hn(i, j) * X_old(j);

                    end

                end

                X_new(i) = (b(i) - temp) / Hn(i, i);

            end

end

X = X_new;

end

2.SOR迭代法:

function X = p211_1_SOR(n, w)

Hn = GET_Hn(n);

b = GET_b(n);

temp01 = 0;

temp02 = 0;

X0 = zeros(1, n);

X_old = zeros(1, n);

X_new = zeros(1, n);

disp('Now Successive Over Relaxtion method!');

disp('Start with the vector that (0, 0, 0, ...)^T');

for i = 1:n

    for k = 1:n

        X_old = X_new;

        temp01 = 0;

        temp02 = 0;

        for j = 1:n

if(j < i)

                temp01 = temp01 + Hn(i, j) * X_new(j);

            end

if(j > i)

                temp02 = temp02 + Hn(i, j) * X_old(j);

            end

        end

    end

    X_new(i) = w * (b(i) - temp01 -  temp02) / Hn(i, i) + X_old(i);

end

X = X_new;

end

5)实验结果 

第一题实验结果:

1.雅克比迭代法:

输入:

>> b=[2.2 1.7 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.7 2.2];

yakebi(0.00001)

结果:

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    12

2.高斯—赛德尔迭代法:

此时初值全取1;

输入:

>> b=[2.2 1.7 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.7 2.2];

>> gaoshisaideer(0.00001)

结果:ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

14

此时初值全取1;

输入:

>> b=[2.5 1.9 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.9 2.5];

gaoshisaideer(0.00001)

结果:

ans =

  Columns 1 through 12

    1.0969    1.0707    1.0219    1.0103    1.0039    1.0016    1.0006    1.0003    1.0001    1.0001    1.0001    1.0001

  Columns 13 through 20

    1.0003    1.0006    1.0016    1.0039    1.0103    1.0219    1.0707    1.0969

k =

    14

3.SOR迭代法:

>> caosongci(0.00001,1.1)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    11

>> caosongci(0.00001,1.2)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    12

>> caosongci(0.00001,1.3)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    15

>> caosongci(0.00001,1.4)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    19

>> caosongci(0.00001,1.5)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    25

>> caosongci(0.00001,1.6)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    34

>> caosongci(0.00001,1.7)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    47

>> caosongci(0.00001,1.8)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

    73

>> caosongci(0.00001,1.9)

ans =

  Columns 1 through 12

    0.9793    0.9787    0.9941    0.9970    0.99    0.9995    0.9998    0.9999    1.0000    1.0000    1.0000    1.0000

  Columns 13 through 20

    0.9999    0.9998    0.9995    0.99    0.9970    0.9941    0.9787    0.9793

k =

   150

第二题实验结果:

1.雅克比迭代法:

>> p211_1_JJ(6)

        Now Jacobi method!

Start with the vector that (0, 0, 0, ...)^T

ans =

            2.4500    1.1036    0.6265    0.4060    0.2831    0.2071

     >> p211_1_JJ(8)

        Now Jacobi method!

Start with the vector that (0, 0, 0, ...)^T

ans =

2.7179    1.4101    0.8524    0.5809    0.4221    0.3198    0.2497    0.1995

>> p211_1_JJ(10)

Now Jacobi method!

Start with the vector that (0, 0, 0, ...)^T

ans =

  Columns 1 through 9 

    2.9290    1.6662    1.0517    0.7423    0.5554    0.4315    0.3445    0.2807    0.2325

  Column 10 

0.1951

2.SOR迭代法:

n=6, ω=1,1.25,1.5的时候

>> p211_1_SOR(6, 1)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

    2.4500    1.1036    0.6265    0.4060    0.2831    0.2071

>> p211_1_SOR(6, 1.25)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

    3.0625    0.2310    0.8704    0.33    0.3141    0.2097

>> p211_1_SOR(6, 1.5)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

    3.6750   -1.1009    2.0106   -0.3994    0.7670   -0.0384

与n=8, ω=1,1.25,1.5的时候

>> p211_1_SOR(8, 1)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

2.7179    1.4101    0.8524    0.5809    0.4221    0.3198    0.2497    0.1995

>> p211_1_SOR(8, 1.25)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

3.3973    0.4887    1.08    0.5062    0.4501    0.3203    0.2573    0.2042

>> p211_1_SOR(8, 1.5)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

4.0768   -0.9424    2.2923   -0.2753    0.9252    0.0578    0.4071    0.1275

与n=10, ω=1,1.25,1.5的时候

>> p211_1_SOR(10, 1)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

  Columns 1 through 9 

2.9290    1.6662    1.0517    0.7423    0.5554    0.4315    0.3445    0.2807    0.2325

  Column 10 

    0.1951

>> p211_1_SOR(10, 1.25)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

  Columns 1 through 9 

3.6612    0.7098    1.2835    0.6617    0.5807    0.4299    0.3506    0.2844    0.2363

  Column 10 

    0.1984

>> p211_1_SOR(10, 1.5)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

  Columns 1 through 9 

4.3935   -0.7958    2.5326   -0.1523    1.0720    0.1565    0.5050    0.2041    0.2819

  Column 10 

    0.1766

6)实验结果分析与小结

本次实习主要是学会应用雅克比迭代法、高斯—赛德尔迭代法、SOR迭代法三种迭代法,并且了解三种迭代法的性质以及迭代精度等。 

第一题中取的b对于雅克比迭代法、高斯――赛得尔迭代法都是收敛的,对于相同的初值与右端向量明显可以看出高斯――赛得尔迭代法比雅克比迭代法快。由第二题可得出对于SOR迭代方法选择不同的松弛因子,收敛次数大大不同,而当松弛因子为1.1时,在同等条件下迭代最快。下载本文

显示全文
专题