数值代数

第一次数值代数上机作业


一.

(1)不选主元的高斯消元法

A=6*eye(84)+diag(8*ones(1,83),-1)+diag(ones(1,83),1);
b=[7;15*ones(82,1);14];

n=length(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
L=tril(A,-1)+eye(n);
U=triu(A);

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);
end
y(1)=y(1)/U(1,1);
x=y

结果:
屏幕快照 2017-03-21 下午8.50.30
屏幕快照 2017-03-21 下午8.50.30

(2)列主元

A=6*eye(84)+diag(8*ones(1,83),-1)+diag(ones(1,83),1);
b=[7;15*ones(82,1);14];
n=length(A);
for k=1:n-1
    [s,t]=max(abs(A(k:n,k)));%求第k列最大值p与位置q
    p=t+k-1;%转化为在A中的坐标
    temp1=A(k,:);%A的k与q行交换
    A(k,:)=A(p,:);
    A(p,:)=temp1;
    temp2=b(k);
    b(k)=b(p);
    b(p)=temp2;
    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
        stop;
    end
end

L=tril(A,-1)+eye(n);
U=triu(A);

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;%y

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);
end
y(1)=y(1)/U(1,1);

x=y

结果:
屏幕快照 2017-03-21 下午8.49.30
屏幕快照 2017-03-21 下午8.49.30

结论:列主元gauss消元法更加精确,且稳定性更好.

二.

(1)平方根法

A=10*eye(100)+diag(ones(1,99),1)+diag(ones(1,99),-1);
b=round(100*rand(100,1));
n=length(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);
U=L';

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);
end
y(1)=y(1)/U(1,1);
x=y;

(2)改进后的算法

A=10*eye(100)+diag(ones(1,99),1)+diag(ones(1,99),-1);
b=round(100*rand(100,1));
n=length(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
L=tril(A);
D=diag(diag(A));
L=L-diag(diag(L))+diag(ones(1,n));
U=D*L';

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);
end
y(1)=y(1)/U(1,1);
x=y;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 9,416评论 1 10
  • 数学是计算机技术的基础,线性代数是机器学习和深度学习的基础,了解数据知识最好的方法我觉得是理解概念,数学不只是上学...
    闯王来了要纳粮阅读 23,145评论 2 48
  • ------北方的冬天很冷不比南方那种温和的天气...... 桂花开了,开满了遥望的城市。每年秋天学校食...
    冷叶草阅读 3,247评论 0 0
  • 不是我冷血,是现实太惨烈 既然已分手,就无需再挽留 虽然留下的多是快乐的回忆 一个歇死底的声音却告诉自己 我不怪你...
    阿木先森阅读 3,328评论 0 3
  • 从松江回来的地铁上~ 往返4个小时的路程,有JJ就不会觉得远,每天都会挤出时间听JJ的歌,中午听着听着就入迷了,摘...
    先生五点半阅读 1,184评论 0 0

友情链接更多精彩内容