数值分析实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A(1,1)=6; A(1,2)=1; b(1)=7; elseif i==n A(n,n-1)=8; A(n,n)=6; b(n)=14; else A(i,i-1)=8; A(i,i)=6; A(i,i+1)=1; b(i)=15; end end auto 函数 auto 函数用列主元消去法求解线性代数方程组, 自动选取该列按模最大的元 素作为主元。函数的输入为系数矩阵的阶数 n,输出为方程组的解 x。 %n 为方程阶数 function x=auto(n) [A,b]=matrix(n); c=cond(A); fprintf('矩阵的 2-条件数为:%f',c); %消去过程 for i=1:n-1 %选列主元 index=i; max=A(i,i); for k=i+1:n if (A(k,i)>max) index=k; max=A(k,i); end end %换行 if index~=i temp1=A(index,:); A(index,:)=A(i,:); A(i,:)=temp1; temp2=b(index); b(index)=b(i); b(i)=temp2; end %消元 2)
,1)T 。取 n 10 计算矩阵的条件数。让程序自动选取主
元,结果如何? 2. 现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽 可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模 最大的元素作为主元,结果又如何?分析实验结果。 3. 取矩阵阶数 n 20 或者更大,重复上述实验过程,观察记录并分析不同的问 题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消 去过程中的作用。 4. 选取其他你感兴趣的问题或者随机生成矩阵, 计算其条件数。 重复上述实验, 观察记录并分析实验的结果。
%换行 if index~=i temp1=A(index,:); A(index,:)=A(i,:); A(i,:)=temp1; temp2=b(index); b(index)=b(i); b(i)=temp2; end %消元 for j=i+1:n l(j,i)=A(j,i)/A(i,i); A(j,:)=A(j,:)-l(j,i)*A(i,:); b(j)=b(j)-l(j,i)*b(i); end end elseif mm==0 for i=1:n-1 %选列主元 index=i; min=A(i,i); for k=i+1:n if ((A(k,i)<min)&&(A(k,i)~=0)) index=k; min=A(k,i); end end %换行 if index~=i temp1=A(index,:); A(index,:)=A(i,:); A(i,:)=temp1; temp2=b(index); b(index)=b(i); b(i)=temp2; end %消元 for j=i+1:n l(j,i)=A(j,i)/A(i,i); A(j,:)=A(j,:)-l(j,i)*A(i,:); b(j)=b(j)-l(j,i)*b(i); end end end
数值分析实验报告
实验 3.1 主元的选取与算法的稳定性
问题提出:Gauss 消去法是我们在线性代数中已经熟悉的,但由于计算机的数值 运算是在一个有限的浮点数集合上进行的, 如何才能确保 Gauss 消去法作为数值 算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。 主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。 实验内容:考虑线性方程组
3. 改变矩阵阶数
3.1. 矩阵阶数 n=20 系数矩阵的 2-条件数为 1789671。 取按模最大的元素为主元,解得 x (1,1,
,1)T 。 ,1)T 。
取按模最小的非零元素为主元,解得 x (1,1,
可见矩阵阶数较低的情况下,主元的选取对计算结果基本没有影响,需要继 续增加矩阵阶数。 3.2. 矩阵阶数 n=50 系数矩阵的 2-条件数为 2038952639771568,由于矩阵的阶数较大,不方便 将方程组的解全部列出,以下用 2-范数描述求得的解 x 与精确解 x 的偏差。 取按模最大的元素为主元, x x
4. 其他问题
现在研究一个自定义的病态问题。 考虑线性方程组 Ax b,A Rnn , b Rn
1 5 其中 A n2 5 5n1
5 1 0 0
5n2 5n1 0 0 1 0 0 1
方程的阶数是可变的,通过首先给定解(取各个分量均为 1) ,再计算出右 端项,从而给出确定的问题。 4.1. 实验程序 4.1.1. matrix 函数 matrix 函数用于生成系数矩阵 A 和常数项向量 b。函数的输入为系数矩阵的 阶数 n,输出为系数矩阵 A 和常数项向量 b。 function [A,b]=matrix(n) A=zeros(n); b=zeros(n,1); for i=1:n A(1,i)=1*5^(i-1); A(i,1)=1*5^(i-1); end for i=2:n A(i,i)=1; end x=ones(1,n); b=A*x'; 4.1.2. gauss 函数 gauss 函数用用列主元消去法求解线性代数方程组。 函数的输入为系数矩阵的阶数 n 和 mm, 其中 mm 决定选取按模最大元素为 主元还是按模最小非零元素为主元,若 mm=1,则选取按模最大元素为主元;若 mm=0,则选取按模最小的非零元素为主元。 函数的输出为方程组的解 x。 %n 为方程阶数 %若 mm=1,选最大元素为主元;若 mm=0,选最小元素为主元 function x=gauss(n,mm) [A,b]=matrix(n); A b c=cond(A); fprintf('系数矩阵的 2-条件数为:%f',c); %消去过程 if mm==1 for i=1:n-1 %选列主元 index=i; max=A(i,i); for k=i+1:n if (A(k,i)>max) index=k; max=A(k,i); end end
Ax b ,
A Rnn , b Rn
编制一个能自动选取主元, 又能手动选取主元的求解线性代数方程组的 Gauss 消 去过程。 实验要求: 6 1 7 8 6 1 15 , b 1. 取矩阵 A 8 6 1 15 8 6 14 则方程有解 x (1,1,
2. 手动选主元
2.1. 实验程序 2.1.1. matrix 函数 同 1.1.1 1) manual 函数 manual 函数用列主元消去法求解线性代数方程组,根据程序提示手动选取 主元。函数的输入为系数矩阵的阶数 n,输出为方程组的解 x。 %n 为方程阶数 function x=manual(n) [A,b]=matrix(n); c=cond(A); fprintf('矩阵的 2-条件数为:%f',c); %消去过程 for i=1:n-1 disp('系数矩阵:'); A %选主元 fprintf('第%d 次选主元',i); index=input('\n 请输入所选主元所在的行数:'); while index<i|A(index,i)==0 if index<i fprintf('错误:所选主元所在的行数不能小于%d\n',i); elseif A(index,i)==0 disp('错误:所选主元不能为 0'); end
disp('请重新选择!') index=input('请输入所选主元所在的行数:'); end %换行 if index>i temp1=A(index,:); A(index,:)=A(i,:); A(i,:)=temp1; temp2=b(index); b(index)=b(i); b(i)=temp2; end %消元 l(i)=A(i+1,i)/A(i,i); A(i+1,:)=A(i+1,:)-l(i)*A(i,:); b(i+1)=b(i+1)-l(i)*b(i); end %回代过程 A x=b; x(n)=b(n)/A(n,n); for i=n-1:-1:1 for j=n:-1:i+1 x(i)=x(i)-A(i,j)*x(j); end x(i)=x(i)/A(i,i); end 2.2. 实验结果 取 n 10 ,调用 manual 函数,计算得矩阵的 2-条件数为 1728。 取按模最大的元素作为主元,结果为 x (1,1,1,1,1,1,1,1,1,1)T 。 取按模最小的非零元素作为主元,结果为 x (1,1,1,1,1,1,1,1,1,1)T 。 2.3. 结果分析 观察计算过程中的系数矩阵 A,可以发现每步消去过程中,按模最大的元素 是 8,按模最小的非零元素大于 4。由此可见,尽管矩阵的 2-条件数较大,即问 题的病态较为严重, 但是按模最大的元素和按模最小的非零元素相差不大,所以 选取按模最大的元素作为主元和选取按模最小的非零元素作为主元对解的影响 很小。 在实验要求 4 里, 将举出一个按模最大的元素和按模最小的非零元素相差很 大例子,说明在 Gauss 消去法中,主元的选取对算法的稳定性有显著影响。
l(i)=A(i+1,i)/A(i,i); A(i+1,:)=A(i+1,:)-l(i)*A(i,:); b(i+1)=b(i+1)-l(i)*b(i); end %回代过程 x=b; x(n)=b(n)/A(n,n); for i=n-1:-1:1 for j=n:-1:i+1 x(i)=x(i)-A(i,j)*x(j); end x(i)=x(i)/A(i,i); end 1.2. 实验结果 取 n 10 ,调用 auto 函数,计算得矩阵的 2-条件数为 1728。 方程组的解为 x (1,1,1,1,1,1,1,1,1,1)T 。
wk.baidu.com
%回代过程 x=b; x(n)=b(n)/A(n,n); for i=n-1:-1:1 for j=n:-1:i+1 x(i)=x(i)-A(i,j)*x(j); end x(i)=x(i)/A(i,i); end 4.2. 实验结果 4.2.1. 矩阵阶数 n=10 系数矩阵的 2-条件数为 1993401。 取按模最大的元素为主元,解得 x (1,1,1,1,1,1,1,1,1,1)T 。 取按模最小的非零元素为主元,解得 x (1,1,1,1,1,1,1,1,1,1)T 。 4.2.2. 矩阵阶数 n=12 系数矩阵的 2-条件数为 49834997。 取按模最大的元素为主元,解得 x (1,1,1,1,1,1,1,1,1,1,1,1)T 。 取按模最小的非零元素为主元,解得
实验报告
1. 自动选主元
1.1. 实验程序 1) matrix 函数 matrix 函数用于生成系数矩阵 A 和常数项向量 b。函数的输入为系数矩阵的 阶数 n,输出为系数矩阵 A 和常数项向量 b。 function [A,b]=matrix(n) A=zeros(n); b=zeros(n,1); for i=1:n if i==1
2
0。
2
取按模最小的非零元素为主元, x x 3.3. 矩阵阶数 n=100 系数矩阵的 2-条件数为 2.91e+017。 取按模最大的元素为主元, x x
2
0.0423 。
0.2479 。
2
取按模最小的非零元素为主元, x x
4.7575e+013 。
3.4. 结果分析 由以上结果可见随着矩阵阶数的增加, 2-条件数急剧增大, 病态越来越严重, 用 Gauss 消去法求得的解距离精确解的偏差越来越大。 当问题阶数较低时, 取按模最大的元素为主元和取按模最小的非零元素为主 元,对解几乎没有影响。但是,随着矩阵阶数的增加,两种选取方式对解的影响 逐渐增大。当矩阵阶数为 50 时,取按模最大的元素为主元可以求得精确解,取 按模最小的非零元素为主元可以求得较精确的解。当矩阵的阶数增加到 100 时, 如果取按模最大的元素为主元, 解的误差较小;而如果取按模最小的非零元素为 主元,则算法是不稳定的,完全偏离了精确解。 随着矩阵阶数的继续增加,两种算法将都变的数值不稳定,说明此时 Gauss 消去法已经不能求解该类问题,必须用迭代法来求解。