|
数值计算程序大放送-矩阵运算
////////////////////////////////////////////////////////////// //实矩阵相乘 //计算矩阵A(m*n)和B(n*k)的乘积,结果保存在C(m*k)中 //a-长度为m*n的数组 //b-长度为n*k的数组 //c-长度为m*k的数组,存放结果 void damul(double a[],double b[],int m,int n,int k,double c[]); ////////////////////////////////////////////////////////////// //计算矩阵A(m*n)的转置矩阵AT(n*m)和B(m*k)的乘积,结果保存在C(n*k)中 //添加的函数,非原书程序 //a-长度为m*n的数组 //b-长度为m*k的数组 //c-长度为n*k的数组,存放结果 void ATdotB(double a[],double b[],int m,int n,int k,double c[]); ////////////////////////////////////////////////////////////// //计算矩阵A(m*n)和B(k*n)的转置矩阵BT(n*k)的乘积,结果保存在C(m*k)中 //添加的函数,非原书程序 //a-长度为m*n的数组 //b-长度为k*n的数组 //c-长度为m*k的数组,存放结果 void AdotBT(double a[],double b[],int m,int n,int k,double c[]); ////////////////////////////////////////////////////////////// //实矩阵求逆 //全选主元高斯-约当法 //a-长度为n*n的数组, n*n矩阵 //n 矩阵的维数 int dcinv(double a[],int n); ////////////////////////////////////////////////////////////// //对称正定矩阵求逆 //a-长度为n*n的数组, n*n矩阵 //n 矩阵的维数 int desgj(double a[],int n); ////////////////////////////////////////////////////////////// //托伯利兹(Toeplitz)矩阵求逆的特兰持(Trench)方法 //t-长度为n的数组,存放n阶T型矩阵中的上三角元素t0,t1,t2...tn-1 //tt-长度为n的数组,从tt[1]开始依次存放tt[1]...tt[n-1] //n-矩阵的阶数 //b-长度为n*n的数组,返回时存放逆矩阵 int dftrn(double t[],double tt[],int n,double b[]); ////////////////////////////////////////////////////////////// //求矩阵的行列式值 //全选主元高斯消去法 //a-长度为n*n的数组 //n-矩阵的阶数 double dhdet(double a[],int n); ////////////////////////////////////////////////////////////// //对称正定矩阵的乔里斯基(Cholesky)分解与行列式求值 //返回值小于0表示程序工作失败,还输出"fail"; //返回值大于0表示正常返回 //a-长度为n*n的数组,存放正定矩阵, // 返回时下三角部分存放分解后的下三角矩阵L,其余元素为0 //n-正定矩阵的阶数 //det-指向双精度实型变量的指针,返回时该指针指向的变量存放行列式的值 int dicll(double a[],int n,double *det); ////////////////////////////////////////////////////////////// //矩阵的三角分解(LU) //其中下三角阵L的主对角元素为1。 //a-长度为N*N的矩阵,返回时为L+U-I //n-矩阵的阶数 //l-返回下三角矩阵 //u-返回上三角矩阵 int djlu(double a[],int n,double l[],double u[]); ////////////////////////////////////////////////////////////// //实数矩阵的QR分解法 //用Householder变换对一般m*n阶的实数矩阵进行QR分解 //a-长度为m*n的一维数组,返回时其左上三角部分存放上三角矩阵R //m-矩阵的行数 //n-矩阵的列数 //q-长度为m*m的矩阵,返回时存放正交矩阵Q int dkqr(double a[],int m,int n,double q[]); ////////////////////////////////////////////////////////////// //奇异值分解法求广义逆 //本函数返回值小于0表示在奇异值分解过程, //中迭代值超过了60次还未满足精度要求.
上一篇:从猎人和猎狗的关系中看到的企业管理进步
下一篇:浙江台州互联网行业浅析--问题篇
|