• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 政府报告 > 正文

    数值线性代数第二版徐树方高立张平文上机习题第一章实验报告(供参考)x

    时间:2020-09-28 16:21:47 来源:勤学考试网 本文已影响 勤学考试网手机站

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    上机习题

    1?先用你所熟悉的的计算机语言将不选主元和列主元 Gauss消去法编写成通用的子程序;

    后用你编写的程序求解 84阶方程组;最后将你的计算结果与方程的精确解进行比较,并就 此谈谈你对Gauss消去法的看法。

    Sol:

    先用matlab将不选主元和列主元 Gauss消去法编写成通用的子程序,得到 L,U,P

    不选主元Gauss消去法:L,U GaussLA(A)得到L,U满足A LU

    列主元 Gauss消去法:L,U ,P GaussCol(A)得到 L,U , P 满足 PA LU

    用前代法解Ly b or Pb,得y

    用回代法解Ux y,得x

    求解程序为x Gauss代b,L,U,P ( P可缺省,缺省时默认为单位矩阵)

    计算脚本为ex1_1

    代码

    %!法(计算三角分解:Gauss消去法)

    fun ctio n [L,U]=GaussLA(A)

    n=len gth(A);

    for k=1:n-1

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

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

    end

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    U=triu(A);

    L=tril(A);

    L=L-diag(diag(L))+diag( on es(1, n));

    end

    %!法计算列主元三角分解:列主元 Gauss消去法)

    fun ctio n [L,U,P]=GaussCol(A)

    n=len gth(A);

    for k=1:n-1

    [s,t]=max(abs(A (k:n, k)));

    p=t+k-1;

    temp=A(k,1: n);

    A(k,1: n)=A(p,1: n);

    A(p,1: n)=temp;

    u(k)=p;

    if A(k,k)~=0

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

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

    else

    break ;

    end

    end

    L=tril(A);U=triu(A);L=L-diag(diag(L))+diag(o nes(1, n));

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    P=eye( n);

    for i=1:n-1

    temp=P(i,:);

    P(i,:)=P(u(i),:);

    P(u(i),:)=temp;

    end

    end

    %高斯消去法解线性方程组

    fun ctio n x=Gauss(A,b,L,U,P)

    if nargin<5

    P=eye(le ngth(A));

    end

    n=len gth(A);

    b=P*b;

    for j=1:n-1

    b(j)=b(j)/L(j,j);

    b(j+1: n)=b(j+1: n)-b(j)*L(j+1: n,j);

    end

    b(n )=b( n)/L( n,n);

    y=b;

    for j=n:-1:2

    y(j)=y(j)/U(j,j);

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    y(1:j-1)=y(1:j-1)-y(j)*U(1:j-1,j);

    end

    y(1)=y(1)/U(1,1);

    x=y;

    end ex1_1

    clc;clear;

    %第一题

    A=6*eye(84)+diag(8*o nes(1,83),-1)+diag(o nes(1,83),1);

    b=[7;15*o nes(82,1);14];

    %不选主元Gauss消去法

    [L,U]=GaussLA(A); x1_1=Gauss(A,b,L,U);

    %列主元Gauss消去法

    [L,U,P]=GaussCol(A);

    x1_2=Gauss(A,b,L,U,P);

    'o-' );title( 'Gauss');'.-' );title( 'PGauss');'*-' );title('

    'o-' );title( 'Gauss');

    '.-' );title( 'PGauss');

    '*-' );title('精确解');

    subplot(1,3,1);plot(1:84,x1_1,

    subplot(1,3,2);plot(1:84,x1_2,

    subplot(1,3,3);plot(1:84,o nes(1,84),

    结果为(其中Gauss表示不选主元的Gauss消去法,PGauss表示列主元Gauss 消去法,精确解为1, ,1184): \ /

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    由图,显然列主元消去法与精确解更为接近, 大,且不如列主元消去法稳定。不选主元的Gauss消去法误差比列主元消去法Gauss消去法重点在于

    由图,显然列主元消去法与精确解更为接近, 大,且不如列主元消去法稳定。

    不选主元的Gauss消去法误差比列主元消去法

    Gauss消去法重点在于 A的分解过程,无论

    A如何分解,后面两步的运算过程不变。

    2?先用你所熟悉的的计算机语言将平方根法和改进的平方根法编写成通用的子程序; 然后用

    你编写的程序求解对称正定方程组 Ax=b。

    Sol:

    先用matlab将平方根法和改进的平方根法编写成通用的子程序,得到 L, (D):

    平方根法:L=Cholesky(A)

    改进的平方根法:[L,D]=LDLt(A)

    求解得Ly b

    求解得 LTx y or DLTx y

    求解程序为x=Gauss(A,b,L,U,P)( U LT or U DLT,P此时缺省,缺省时默认为单

    位矩阵)

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    (3)计算脚本为ex1_2

    代码

    %|法(计算 Cholesky分解:平方根法)

    fun ctio n L=Cholesky(A)

    n=len gth(A);

    for k=1:n

    A(k,k)=sqrt(A(k,k));

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

    for j=k+1:n

    A(j: n,j)=A(j: n,j)-A(j: n,k)*A(j,k);

    end

    end

    L=tril(A);

    end

    %十算LDL '分解:改进的平方根法

    fun ctio n [L,D]=LDLt(A)

    n=len gth(A);

    for j=1:n

    for i=1:n

    v(i,1)=A(j,i)*A(i,i);

    end

    A(j,j)=A(j,j)-A(j,1:j-1)*v(1:j-1,1);

    A(j+1: n,j)=(A(j+1: n,j)-A(j+1: n,1:j-1)*v(1:j-1,1))/A(j,j);

    百度文库-

    百度文库-让每个人平等地提升自我

    end PAGE

    end

    PAGE #

    end

    L=tril(A);

    D=diag(diag(A));

    L=L-diag(diag(L))+diag( on es(1, n)); end

    %高斯消去法解线性方程组

    fun ctio n x=Gauss(A,b,L,U,P)

    if nargin<5

    P=eye(le ngth(A));

    end

    n=len gth(A);

    b=P*b;

    for j=1:n-1

    b(j)=b(j)/L(j,j);

    b(j+1: n)=b(j+1: n)-b(j)*L(j+1: n,j);

    end

    b(n )=b( n)/L( n,n);

    y=b;

    for j=n:-1:2

    y(j)=y(j)/U(j,j);

    y(1:j-1)=y(1:j-1)-y(j)*U(1:j-1,j);

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    y(1)=y(1)/U(1,1);

    x=y;

    end /

    ex1_2

    嘟二题

    嘟一问

    A=10*eye(100)+diag(o nes(1,99),-1)+diag(o nes(1,99),1);

    b=ro un d(100*ra nd(100,1));

    那方根法

    L=Cholesky(A);

    x1_2_1_ 仁Gauss(A,b,L,L');

    液进的平方根法

    [L,D]=LDLt(A);

    x1_2_1_2=Gauss(A,b,L,D*L');

    嘟二问

    A=hilb(40);

    b=sum(A);

    b=b'; \

    那方根法

    L=Cholesky(A);

    x1_2_2_1=Gauss(A,b,L,L');

    液进的平方根法

    [L,D]=LDLt(A);

    x1_2_2_2=Gauss(A,b,L,D*L');

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    结果分别为

    x1_2_1_1 =

    百度文库-

    百度文库-让每个人平等地提升自我

    \z PAGE

    \z

    PAGE #

    百度文库-

    百度文库-让每个人平等地提升自我

    \z PAGE

    \z

    PAGE #

    百度文库-

    百度文库-让每个人平等地提升自我

    \z PAGE

    \z

    PAGE #

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    x1_2_1_2 =

    百度文库-

    百度文库-让每个人平等地提升自我

    \z PAGE

    \z

    PAGE #

    百度文库-

    百度文库-让每个人平等地提升自我

    \z PAGE

    \z

    PAGE #

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    x1_2_2_1 =

    百度文库-

    百度文库-让每个人平等地提升自我

    PAGE

    PAGE #

    +07 *

    百度文库-

    百度文库-让每个人平等地提升自我

    1818

    1818

    x1_2_2_2 =

    百度文库-

    百度文库-让每个人平等地提升自我

    \z1919

    \z

    1919

    百度文库-

    百度文库-让每个人平等地提升自我

    2020

    2020

    然后评价各个方法的优Gauss消去法3?用第1题的程序求解第2

    然后评价各个方法的优

    Gauss消去法

    Sol:

    Gauss表示不选主元的Gauss消去法,PGauss表示列主元

    计算脚本为:

    嘟三题

    嘟一问

    A=10*eye(100)+diag(o nes(1,99),-1)+diag(o nes(1,99),1);

    b=ro un d(100*ra nd(100,1));

    %F选主元Gauss消去法

    [L,U]=GaussLA(A);

    x1_3_1_ 仁Gauss(A,b,L,U);

    %^主元Gauss消去法

    [L,U,P]=GaussCol(A);

    x1_3_1_2=Gauss(A,b,L,U,P);

    嘟二问

    A=hilb(40);

    百度文库-

    百度文库-让每个人平等地提升自我

    b=sum(A);

    b=b:

    %不选主元Gauss消去法

    [L,U]=GaussLA(A); x1_3_2_1=Gauss(A,b,L,U);

    %列主元Gauss消去法

    [L,U,P]=GaussCol(A);

    x1_3_2_2=Gauss(A,b,L,U,P);

    ex1_2;

    y1=1:100;y2=1:40;

    subplot(4,2,1);plot(y1,x1_2_1_1);title(

    '平方根法1');

    subplot(4,2,2);plot(y1,x1_2_1_2);title(

    '改进的平方根法1');

    subplot(4,2,3);plot(y1,x1_3_1_1);title(

    'Gauss1');

    subplot(4,2,4);plot(y1,x1_3_1_2);title(

    'PGauss1');

    subplot(4,2,5);plot(y2,x1_2_2_1);title(

    '平方根法2');

    subplot(4,2,6);plot(y2,x1_2_2_2);title(

    '改进的平方根法 2');

    subplot(4,2,7);plot(y2,x1_3_2_1);title(

    'Gauss2');

    2121

    平方根法1

    10

    20

    30

    40

    50

    60

    90

    10

    5

    0

    -5

    0

    10

    5

    0

    -5

    0 10

    改进的平方根法1

    20 30 40 50 60 70 80

    90

    Gaussl

    10

    5

    0

    -5

    0

    5

    0

    -5

    0

    200

    100

    PGauss1

    100

    10

    20

    30 40 50 60 70 80 90 100

    10

    /平方根法2

    7

    10

    15

    20

    Gauss2

    25

    30 35 40

    10

    -5

    5

    0

    0 10 20 \ 30 40 50 60 70 80

    90

    改进的平方根法2

    100

    0 5

    10

    15

    20

    PGauss2

    25

    30 35

    40

    -200

    0

    1

    1

    1

    1

    1 I J \ J

    1

    0

    L

    I

    I

    I ■<

    ■ r \

    1J

    | X

    jf ~

    V

    1 i

    r

    r

    [

    r

    -500

    r

    r

    [

    [

    5

    10

    15 20 25 30

    35

    40

    0

    5

    10 15

    20 25 30 35

    0

    500

    40

    subplot(4,2,8);plot(y2,x1_3_2_2);title( 'PGauss2');

    平方根法和改进的平法根法计算量更小,计算过程稳定,但使用范围窄;

    不选主元和列主元的 Gauss消去法计算量较大,但适用范围广。

    例题考虑对称正定线性方程组 Ax=b,其中向量b是随机生成的,其元素是服从区间 [0,1]上

    均匀分布的随机数,矩阵 A LLT,这里L是随机生成的一个下三角矩阵,其元素是服从区

    间[1,2]上均匀分布的随机数。

    对n=10, 20,...,500分别应用 Gauss消去法、列主元Gauss消去法和Cholesky分解法求解该

    方程组,画出它们所用的 CPU时间,其中"Gauss"表示Gauss消去法、“ PGausg表示列主

    元Gauss消去法,“ Cholesky"表示Cholesky分解法。

    Sol:

    经试验知,对应课本上图所示的 Cholesky分解法应为改进后的 Cholesky分解法即LDLT分

    解。

    2222

    百度文库-

    百度文库-让每个人平等地提升自我

    end2323

    end

    2323

    此处所用的CPU时间利用cputime测量。

    计算脚本为eg1_3_2

    clc;clear; /

    for i=1:50;

    n=i*10;

    b=ra nd(n ,1);

    L=tril(u nifrnd(1,2, n,n));

    A=L*L:

    t1(i)=cputime;

    [L1,U1]=GaussLA(A);

    x1= Gauss(A,b,L1,U1);

    t1(i)=cputime-t1(i);

    t2(i)=cputime;

    [L2,U2,P2]=GaussCol(A); x2=Gauss(A,b,L2,U2,P2); t2(i)=cputime-t2(i);

    t3(i)=cputime;

    L3=LDLt(A);

    x3=Gauss(A,b,L3 ,L 3');

    t3(i)=cputime-t3(i);

    百度文库-

    百度文库-让每个人平等地提升自我

    2424

    2424

    N=10:10:500;

    plot(N,t1, 'o-' ,N,t2, '.-' ,N,t3, '*-');

    legend( 'Gauss' , 'PGauss' , 'Cholesky');

    结果为

    1.5

    0.5

    50

    350

    150 200

    250 300

    ————Gauss ,,

    —*— PGauss

    Cholesky

    -

    fl _

    ?

    *

    H0

    ?

    * *

    #

    *

    a

    肩机战就!卄卩;V;.t

    100

    500

    400 450

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问