计算方法数值分析C语言源程序1.pdf
《计算方法数值分析C语言源程序1.pdf》由会员分享,可在线阅读,更多相关《计算方法数值分析C语言源程序1.pdf(110页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 1 1 章章 线性方程组的直接算法线性方程组的直接算法求解线性方程组的直接算法是基于矩阵分解的算法。常见的矩阵分解有两种:矩阵的三角分解矩阵的三角就是把一个矩阵分解成两个三角形矩阵的乘积。比如:简单的三角分解:简单的三角分解:上三角矩阵。列主元三角分解列主元三角分解:,这里,是初等置换阵,是单,这里,是单位下三角矩阵,是位下三角矩阵且各元素的模不超过 1,是上三角矩阵。全主元三角分解全主元三角分解:,这里,是初等置换阵,是单位下三角矩阵且元素的模不超过,矩阵的正交三角分解是上三角矩阵。正交化三角化就是把一个矩阵分解成一个正交矩阵和一个上三角矩阵的乘积即,这里是正交矩阵,是上三角矩阵1.1
2、1.1 矩阵的三角分解矩阵的三角分解1.1.11.1.1 功能功能把实矩阵积即该算法适用于各阶顺序主子式不等于的矩阵分解成单位下三角形矩阵和上三角形矩阵的乘1.1.21.1.2 算法概述算法概述所谓三角分解就是把其中是单位下三角矩阵,上三角矩阵。阶方阵作如下分解当时,构造 Gauss 变换则以此类推,只要对角线上的元素样做下去。直到将其化为上三角矩阵为止。即有,便可以一直这其中,且从而有而且综上所述,我们可以将间上两个矩阵因子继续存储在原矩阵的存储空的主对角线上的不予存储算法 5.3(计算三角分解:Gauss 消去法)1.1.31.1.3 算法程序算法程序1.1.3.1.11.1.3.1.1
3、参数说明参数说明*a n 阶矩阵;n 矩阵的阶;1.1.3.1.21.1.3.1.2 程序程序bool GaussLU(double*a,int n)/n 阶矩阵的 LU 分解for(int k=0;kn-1;k+)if(akk=0)return false;for(int i=k+1;in;i+)aik/=akk;for(int j=k+1;jn;j+)aij-=aik*akj;return true;1.1.41.1.4 例题例题求矩阵1 2 3 41 4 9 161 8 27 64的三角分解,结果如下:1 2 3 41 2 6 121 3 6 241 7 6 241.21.2 列主元三角
4、分解列主元三角分解1.2.11.2.1 功能功能用矩阵的列主元三角分解,分解矩阵:,这里过 1,是初等置换阵,是单位下三角矩阵且各元素的模不超是上三角矩阵。1.2.21.2.2 算法概述算法概述列主元三角分解法和普通三角分解法基本上类似,所不同的是在构造Gauss 变换前,先在对应列中选择绝对值最大的元素(称为列主元),然后实施初等行交换将该元素调整到矩阵对角线上。例如第步变换叙述如下:选主元:确定使行和第;行上的元素互换位置。即行交换:将矩阵的第实施 Gauss 变换:通过初行变换,将列主对角线以下的元素消为零即算法 5.2(计算三角分解:列主元 Gauss 消去法)1.2.31.2.3 程
5、序设计程序设计1.2.3.11.2.3.1 参数说明参数说明*a:n 阶矩阵;*p:记忆分解过程中进行的行交换;n:矩阵的阶1.2.3.21.2.3.2 程序程序int RowGaussLU(double*a,int*p,int n)/n阶矩阵的列主元 LU 分解int i,j,k;double max;for(i=0;in;i+)pi=i;for(i=0;in-1;i+)max=aii;pi=i;for(j=i+1;jfabs(max)max=aji;pi=j;if(max=0)return i-1;else if(pi!=i)for(j=0;jn;j+)swap(aij,apij);for
6、(j=i+1;jn;j+)aji/=aii;for(j=i+1;jn;j+)for(k=i+1;kn;k+)ajk-=aik*aji;if(an-1n-1=0)return n-1;elsereturn n;1.2.41.2.4 例题例题用列主元高期分解矩阵结果,P=(0,3,2,3)1.31.3 全主元三角分解全主元三角分解1.3.11.3.1 功能功能将矩阵进行如下三角分解,其中:是初等置换阵,单位下三角阵(各元素绝对值不超过),上三角阵1.3.21.3.2 算法概述算法概述全主元三角分解法和普通三角分解法基本上类似,所不同的是在构造Gauss 变换前,先在对应列中选择绝对值最大的元素(称
7、为列主元),然后实施初等行交换将该元素调整到矩阵对角线上。例如第步变换叙述如下:选主元:确定,使;行列交换:将矩阵的第第行和第行上的元素互换位置,再将第列和列上的元素互换。即;实施 Gauss 变换:通过初行变换,将列主对角线以下的元素消为零即算法 5.2(计算三角分解:列主元 Gauss 消去法)1.3.31.3.3 算法程序算法程序1.3.3.11.3.3.1 参数说明参数说明*a:待分解的目标矩阵,也是结果存储的实体*P:保存行主元行交换次序*q:保存主元列交换次序;n:矩阵的阶1.3.3.21.3.3.2 程序程序int AllGaussLU(double*a,int*p,int*q,
8、int n)/n阶矩阵的全主元LU 分解int i,j,k;double max;for(i=0;in;i+)pi=qi=i;for(i=0;in-1;i+)max=aii;pi=i;qi=i;for(j=i;jn;j+)for(k=i;kfabs(max)max=ajk;pi=j;qi=k;if(max=0)return i-1;if(pi!=i)for(j=0;jn;j+)swap(aij,apij);if(qi!=i)for(j=0;jn;j+)swap(aji,ajqi);for(j=i+1;jn;j+)aji/=aii;for(j=i+1;jn;j+)for(k=i+1;kn;k+)
9、ajk-=aik*aji;if(an-1n-1=0)return n-1;elsereturn n;1.3.41.3.4 例题例题用全主元三角分解矩阵1 2 3 41 4 9 161 8 29 641 16 81 256系数矩阵分解为256 81 1 160.25 6.75 0.75 40.015625 0.256944 0.791667 0.7222220.0625 0.583333 0.631579 0.210526全主元选取信息:行信息 P:3 2 3 3列信息 Q:3 2 3 31.41.4 对称正定对称正定 CholeskyCholesky 分解分解1.4.11.4.1 功能功能将对
10、称正定矩阵能作以下分解:,其中为下三角形矩阵,为的转置。1.4.21.4.2 算法概述算法概述,以列为序从左到右,用待定系数法,则确定:的元素(可由下列公式另一方面,则算法如下:的元素(也可由 Gauss 消去法的思想逐列得到,1.4.31.4.3 算法程序算法程序1.4.3.11.4.3.1参数说明参数说明*a:对称正定矩阵,算法结束后下三角部分保存 Cholesky 因子;n:矩阵的阶1.4.3.21.4.3.2 程序程序void CholeskyLL(double*a,int n)/n 阶对称正定矩阵的 LL 分解int i,j,k;for(k=0;kn;k+)akk=sqrt(akk)
11、;for(i=k+1;in;i+)aik/=akk;for(j=k+1;jn;j+)for(i=j;in;i+)aij-=aik*ajk;1.4.41.4.4 例题例题对称正定矩阵:,Cholesky 因子1.51.5 改进的改进的 CholeskyCholesky 三角分解三角分解1.5.11.5.1 功能功能该算法将阶实对称正定矩阵分解为:,其中为单位下三角形矩阵,是对角矩阵,为的转置。1.5.21.5.2 算法概述算法概述设,以列为序从左到右,用待定系数法,则的元素的元素(以及对角矩阵可由下列公式确定:1.5.31.5.3 算法程序算法程序1.5.3.11.5.3.1参数说明参数说明*a
12、:对称正定矩阵,算法结束后下三角部分保存 Cholesky 因子;n:矩阵的阶1.5.3.21.5.3.2程序程序void CholeskyLDL(double*a,int n)/n 阶对称正定矩阵的 LDL 分解double*v=new doublen;for(int j=0;jn;j+)for(int i=0;ij;i+)vi=aji*aii;for(i=0;ij;i+)ajj-=aji*vi;for(i=j+1;in;i+)for(int k=0;kj;k+)aij-=aik*vk;aij/=ajj;delete v;1.5.41.5.4 例题例题对称正定矩阵:,分解结果:1.61.6
13、下三角形方程组下三角形方程组1.6.11.6.1 功能功能该算法用来求解下三角形方程组。它又称为前代法。1.6.21.6.2 算法概述算法概述求解上三角形方程组的前代法,我们通常采用顺序消元法实现。具体地,从其增广矩阵依次沿下述步骤进行:第 1 步:消去后个方程中的,即其中,。第 2 步:再消去后个方程中的,即其中,直到第,。步:消去第个方程中的,即其中,第步:计算。到此我们得到与原上三角方程组同解的对角形方程组,其增广矩阵为其解是显然的,即。1.6.31.6.3 算法分析算法分析算法 5_1(前代法:解上三角方程组)当系数矩阵是单位下三角矩阵时,算法简化为beginfor k=1:n-1fo
14、r i=k+1:nb(i)=b(i)-a(i,k)b(k)endendend1.6.41.6.4 程序设计程序设计/前代法void Lower(double*a,double*b,int n)for(int i=0;in-1;i+)bi/=aii;for(int j=i+1;jn;j+)bj-=bi*aji;bn-1/=an-1n-1;/单位下三角方程组前代法void UnitLow(double*a,double*b,int n)for(int i=0;in;i+)for(int j=i+1;j0;i-)bi/=aii;for(int j=0;j=0;i-)for(int j=0;ji;j+
15、)bj-=bi*aji;1.81.8 高斯消消法高斯消消法1.8.11.8.1 功能功能该算法用于求解简单的线性方程组其中系数矩阵须满足顺序主子式不等于零。1.8.21.8.2 算法概述算法概述1.8.2.11.8.2.1 算法基于系数矩阵的三角分解。算法基于系数矩阵的三角分解。算法计算步骤如下:将作三角分解:;求解下三角方程组:;求解上三角方程组:1.8.31.8.3 算法程序算法程序1.8.3.11.8.3.1 参数说明参数说明*a:n 阶矩阵;*b:常数项;n:矩阵的阶1.8.3.21.8.3.2 程序程序bool Gauss(double*a,double*b,int n)If(Gau
16、ssLU(a,n)UnitLow(a,b,n);Uper(a,b,n);Return true;elsereturn false;1.8.41.8.4 例题例题用高期消去法解线性方程组系数矩阵的三角分解,结果如下:1 2 3 41 2 6 121 3 6 241 7 6 24下三角方程组的解:(2,8,18,34)上三角方程组的解(即原方程组的解):(-1,1,-1,1)1.91.9 解三对角型方程组的追赶法解三对角型方程组的追赶法1.9.11.9.1 功能功能本过程用以求解三对角型方程组:(1)1.9.21.9.2 方法概要方法概要首先对 A 作下列分解:(2)其中矩阵和的形式如下:,而和的
17、元素由下列关系式确定:()进而解方程组()就等价于解方程组:(4)(5)其计算公式如下:(6)(7)(6)式为“追”的过程,(7)式为“赶”的过程,故称该法为追赶法。1.9.31.9.3 程序设计程序设计1.9.3.11.9.3.1 参数说明参数说明*a 存储三对角矩阵。a0:上次对角线。*b 右端向量;方程组的阶下次对角线;a1:主对角线;a2:1.9.3.2 C1.9.3.2 C 程序程序void Pursuit(double*a,double*b,int n)/追赶法double w;int k;w=a10;b0/=a10;for(k=0;k=0;k-)bk=bk-a1k*bk+1;1.
18、9.41.9.4 例题例题求解三对角型方程组:计算结果。1.101.10 列主元高斯消去法列主元高斯消去法1.10.11.10.1 功能功能用列主元高斯消去法求解线性方程组1.10.21.10.2 算法概述算法概述算法基于列主元三角分解 计算步骤如下:用列主元三角分解法(算法 5_2)对系数矩阵进行列主元三角分解:即对向量进行行调整:;求解单位下三角方程组:;求解上三角方程组:。1.10.31.10.3 程序设计程序设计1.10.3.11.10.3.1 参数说明参数说明*a:n 阶矩阵;*b:常数项;n:矩阵的阶1.10.3.21.10.3.2程序程序bool RowGauss(double*
19、a,double*b,int n)/列主元高斯消去法int*p=new intn;if(RowGaussLU(a,p,n)n)return false;for(int i=0;in-1;i+)if(pi!=i)double t=bi;bi=bpi;bpi=t;UnitLow(a,b,n);Uper(a,b,n);return true;1.10.41.10.4 例题例题用列主元高期消去法解线性方程组系数矩阵分解为:,其中,;的解为:=(2,188,-38.5714,2.18182);的解,即原方程组的解:(-1,1,-1,1)。1.111.11 全主元高斯消去法全主元高斯消去法1.11.11.
20、11.1 功能功能用全主元 Gauss 消去法求解线性方程组1.11.21.11.2 算法概述算法概述算法基于全主元三角分解计算步骤如下:用列主元三角分解法(算法 5_2)对系数矩阵进行列主元三角分解:即对向量进行行调整:;求解单位下三角方程组:;求解上三角方程组:;调整解向量:。1.11.31.11.3 算法程序算法程序1.11.3.11.11.3.1 参数说明参数说明*a:系数矩阵并保存全主元三角分解结果;*b:常数向量;n:方程的阶1.11.3.21.11.3.2 程序程序bool AllGauss(double*a,double*b,int n)/全主元高斯消去法int*p=new i
21、ntn;int*q=new intn;if(AllGaussLU(a,p,q,n)n)return false;for(int i=0;i=0;i-)if(qi!=i)double t=bi;bi=bqi;bqi=t;return true;1.11.41.11.4 例题例题用全主元高期消去法解线性方程组系数矩阵分解为256 81 1 160.25 6.75 0.75 40.015625 0.256944 0.791667 0.7222220.0625 0.583333 0.631579 0.210526全主元选取信息:行信息 P:3 2 3 3列信息 Q:3 2 3 3向量调整后:P的解:的
22、解:列调整:1.121.12 对称正定方程组的平方根法对称正定方程组的平方根法1.12.11.12.1 功能功能平方根法用于求解对称正定线性方程组其中为阶实对称正定矩阵。1.12.21.12.2 算法概述算法概述解正定方程组不需要选主元,这是由对称正定矩阵的性质所决定的。求解正定方程组的具体计划如下:将系数矩阵 A 作 Cholesky 分解:调用 Cholesky LL(a,n);调用求解下三角方程组的前代法,求解:调用 Lower(a,n);调用求角上三角方程组的回代法求解Uper(a,n);:先求 A 的转置,再调用1.12.31.12.3 程序程序void Cholesky(doubl
23、e*a,double*b,int n)Cholesky LL(a,n);Lower(a,b,n);for(int i=0;in;i+)for(int j=i+1;jn;j+)aij=aji;Uper(a,b,n);1.12.41.12.4 例题例题求解正定方程组计算结果:Cholesky 因子:,方程组的解向量为:1.131.13 改进平方根法改进平方根法1.13.11.13.1 功能功能平方根法用于求解对称正定线性方程组其中为阶实对称正定矩阵。1.13.21.13.2 算法概述算法概述解正定方程组不需要选主元,这是由对称正定矩阵的性质所决定的。求解正定方程组的具体计划如下:将系数矩阵 A 作
24、改进 Cholesky 分解:调用 Cholesky LDL(a,n);调用求解下三角方程组的前代法,求解:调用 Lower(a,n);求解对角方程组:调用求角上三角方程组的回代法求解Uper(a,n);:先求 A 的转置,再调用1.13.31.13.3 算法程序算法程序void CholeskyD(double*a,double*b,int n)/正定方程组的平方根算法 2CholeskyLDL(a,n);UnitLow(a,b,n);for(int i=0;in;i+)bi/=aii;for(int j=i+1;jn;j+)aij=aji;UnitUp(a,b,n);1.13.41.13.
25、4 例题例题求解正定方程组计算结果:,第第 2 2 章章 最小二乘问题的解法最小二乘问题的解法2.12.1 正则化算法正则化算法2.1.12.1.1 功能功能通过解法方程组的解求得方程组的最小二乘解。2.1.22.1.2 算法概述算法概述算法思想基于下面的定理:定理定理是的最小二乘解当且仅当。算法 1(正则化法:求解的最小二乘解)2.1.3 C2.1.3 C 程序程序参数说明:*a:的列满秩矩阵;b:维向量;x:维解向量。void LeastSquares(double*a,double*b,double*x,int m,int n)double*c=new double*n;for(int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 数值 分析 语言 源程序
限制150内