需要两份东西1﹑实验程序:输入﹑输出﹑注释2﹑实验报告:问题描述﹑方法描述﹑方案设计﹑结果分析﹑结论谢谢,麻烦写的详细些实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性)问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。
实验内容:考虑线性方程组n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。
实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。
取n=10计算矩阵的条件数。
让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。
每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。
若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
1)首先编写gauss消元法代码;输入为矩阵A,向量b,精度ptol,输出为方程组的解x。
程序如下function [ out ] = gausle( A,b,flag,ptol )%UNTITLED 高斯消元法可选择的主元消去法% A n x n 矩阵% b n x 1% flag 标志主元为自动选取还是手动选取,% 0,自动(对角为主元)1,选取最小模为主元,% 2,选取模最大,(误差最小)3 ,次最小的模为主元% ptol 精度% out 输出值,为nx1的解Ax=b的解%%if nargin<4,ptol=50*eps;end[m,n]=size(A);if m~=n,error('A不是方阵');endout=zeros(n,1);% 预先设定解的维数nb=n+1;Ab=[A,b]; %扩维矩阵% disp('开始用扩维阵计算');% disp(Ab);RA=rank(A);RB=rank(Ab);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnend% 消元过程for i=1:n-1 ;i;if flag==0;pivot=Ab(i,i);ri=i;elseif flag==1;% 按照每列模最小的选取[pivot,min_index]=min(abs(A(i:n,i)));ri=i+min_index-1;elseif flag==2;% 按照模最大的选取[pivot,max_index]=max(abs(A(i:n,i)));ri=i+max_index-1;elseif flag==3 %方程最小非0数tA=A;[pivot,min_index]=min(abs(tA(i:n,i)));while pivot==0;tA(min_index+i-1,i)=inf;[pivot,min_index]=min(abs(tA(i:n,i)));endri=i+min_index-1;endif (pivot==0)||(pivot<ptol) ;warning('系数矩阵奇异!!');return;endif ri~=i; % 交换行tmp=A(i,:);A(i,:)=A(ri,:);A(ri,:)=tmp;t=b(i);b(i)=b(ri);b(ri)=t;endfor kk=i+1:nL(kk,i)=A(kk,i)/A(i,i);A(kk,i+1:n)=A(kk,i+1:n)-L(kk,i)*A(i,i+1:n);b(kk)=b(kk)-L(kk,i)*b(i);endendif A(n,n)==0warning('系数矩阵奇异!!');return;end% % 回代求解x=zeros(n,1)';for k=n:-1:1% k% A(k,k+1:n)% x(k+1:n)if k==nx(n)=b(n)/A(n,n);elsex(k)=(b(k)-sum( A(k,k+1:n).*x(k+1:n) ) )/(A(k,k));endendout=x';end主程序为N=10时,方程解为1.00001.00001.00001.00001.00001.00001.00001.00001.00001.0000A 的条件数如下:1-条件数 2.5575e+0032-条件数 1.7276e+003无穷 条件数2.5575e+003代码在 里,运行计算即可。