上三角形中位线逆定理阵求逆

矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(源代码)-免费论文
欢迎来到网学网学习,获得大量论文和程序!
矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(源代码)
请下载论文,论文或程序为矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(源代码).doc或矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(源代码).rar格式,只上传部分目录查看,如果需要此论文或,请点击-下载论文,下载需要资料或是论文。矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(),因文件夹或是目录太多,只读取部分文件显示,需要就下载参考,如果没有目录表示矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(源代码)为单文件程序或是文件。请点击下面"下载"链接下载!。目录名称:矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、qr分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法(源代码)包括 - 44 文件数, 0 目录数.
..\Comm.inl
..\EigenvalueVector.h
..\EigenvalueVector.inl
..\Extremum.h
..\Extremum.inl
..\FittingApproximation.h
..\FittingApproximation.inl
..\GeneralizedInversionSingularValue.cpp
..\Integral.h
相关热词:
【】【】【】【】【】juzhenjs 各类矩阵的数值计算,如求逆、QR分解、三角 等,比较全面的。 Algorithm 数学
182万源代码下载-
&文件名称: juzhenjs
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 2023 KB
&&上传时间:
&&下载次数: 34
&&提 供 者:
&详细说明:各类矩阵的数值计算,如求逆、QR分解、三角分解等,比较全面的。-Various types of matrix numerical calculation, such as inverse, QR decomposition, triangular decomposition, more comprehensive.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&Chapter2\MatrixCalculator\Complex.cpp&&........\................\Complex.h&&........\................\Debug\Complex.obj&&........\................\.....\Matrix.obj&&........\................\.....\MatrixCalculator.exe&&........\................\.....\MatrixCalculator.ilk&&........\................\.....\MatrixCalculator.obj&&........\................\.....\MatrixCalculator.pch&&........\................\.....\MatrixCalculator.pdb&&........\................\.....\MatrixCalculator.res&&........\................\.....\MatrixCalculatorDlg.obj&&........\................\.....\StdAfx.obj&&........\................\.....\vc60.idb&&........\................\.....\vc60.pdb&&........\................\Matrix.cpp&&........\................\Matrix.h&&........\................\MatrixCalculator.aps&&........\................\MatrixCalculator.clw&&........\................\MatrixCalculator.cpp&&........\................\MatrixCalculator.dsp&&........\................\MatrixCalculator.dsw&&........\................\MatrixCalculator.h&&........\................\MatrixCalculator.ncb&&........\................\MatrixCalculator.opt&&........\................\MatrixCalculator.plg&&........\................\MatrixCalculator.rc&&........\................\MatrixCalculatorDlg.cpp&&........\................\MatrixCalculatorDlg.h&&........\................\ReadMe.txt&&........\................\res\MatrixCalculator.ico&&........\................\...\MatrixCalculator.rc2&&........\................\resource.h&&........\................\StdAfx.cpp&&........\................\StdAfx.h&&........\................\Debug&&........\................\res&&........\MatrixCalculator&&Chapter2
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - 清华大学徐士良的常用算法程序集第四版,用C++语言描述的,对于常写算法的人很有帮助。
void QR(double *a, double *d, int n) 矩阵的QR分解
假设数组an*n在内存中按行优先次序存放,此函数使用HouseHolder变换将其就地进行QR分解。
d为输出参数,d[0,n)存放QR分解的上三角矩阵对角线元素。
&[] - 采用CG法求解稀疏不对称的Ax=b
&[] - QR分解的c语言程序,可以嵌入matlab使用
&[] - 详细说明:矩阵的转置、行列式、秩,逆矩阵求法,矩阵的三角分解、QR分解,对称正定矩阵的乔里斯基分解及行列式值,奇异值分解,广义逆的奇异值分解,矩阵特征值与特征向量的各种计算方法-(all kinds of computational method of transposition of matrix
&[] - QR分解的编码,可以直观的看到编码的过程
&[] - QR分解-householder reflection
&[] - 用QR分解来求矩阵的全部特征值
包括:QR分解,矩阵转置,;矩阵求逆,矩阵相乘,最后迭代得出特征值
&[] - 三种求矩阵特征值的matlab实现:乘幂法、QR算法、yaccbi法求特征值
&[] - 一些矩阵运算的C代码实现:矩阵一般运算,以及求逆,QR分解,householder变化,LDU, LU分解怎么证明 上三角矩阵的逆矩阵依旧是上三角矩阵。。。。_数学吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:295,063贴子:
怎么证明 上三角矩阵的逆矩阵依旧是上三角矩阵。。。。收藏
或者能证明 EKEK-1......E2E1是上三角矩阵也行
反证很简单
对阶数用归纳法,首先一阶上三角矩阵就是一阶矩阵,成立。如果n=k已经成立,对阶数n=k+1的上三角矩阵P=[a,x;0,A],其中A是一个可逆的k阶上三角矩阵,a是一个数,不是0,x是n维行向量,且A的逆矩阵是B。令Q=[1/a,-Ax/a;0,B],验算可知PQ=QP=E(k+1),说明n=k+1时也成立。
——来自 Surface RT (爱贴吧HD)
不管怎么想都很显然。方法1:考虑伴随矩阵。方法2:若初等行变换把A变为I,那么它把I变为A^(-1),而把上三角矩阵变为I是一件非常简单的事情。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或线性代数复习与矩阵求逆_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
23页免费84页免费79页免费59页免费22页免费5页免费53页5下载券136页1下载券64页1下载券64页2下载券
喜欢此文档的还喜欢1页免费4页免费1页免费3页免费28页免费
线性代数复习与矩阵求逆|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢n阶多项式拟合与n阶矩阵求逆的C语言实现 - jiaqiqiu的日志 -
电子工程世界-论坛 -
n阶多项式拟合与n阶矩阵求逆的C语言实现
已有 1955 次阅读 10:19
/*********************************************************************************&该程序实现对n维输入x,n维输出y,给出n阶多项式拟合系数,功能和matlab中polyfit(x,y,n)类似, &&涉及知识有QR分解、AX=Y的最小二乘问题、上三角矩阵求逆问题。其中QR分解采用施密特正交法,&AX=Y的最小二乘问题以下类似这样一个问题:3维空间中一个向量,和x、y平面中的哪个向量的欧式距离最小?这个问题就很形象了,答案也很简单,即该向量在
x、y平面的投影向量。所以AX=Y的最小二乘解与此类似,在此不多说了。上三角矩阵求逆这个是有公式的,下面提到的一篇论文里给出了,不过我推导了一下,发现几处打印错误。*********************************************************************************/#include "stdafx.h"#include "stdlib.h"&#include "string.h"&#include "math.h"&&static double * qr_fraction(double *a, int m, int n, double **q);//QR分解static double * up_tria_inv_n_ord(double *t,int n);//n阶上三角矩阵求逆static double * array_mut(double *A, double *x, int m, int n);//m * n型,矩阵乘以向量static double * array_trans_mut(double *A, double *x, int m, int n);//m * n型 矩阵转置乘以向量static double * polyfit(double *x, double *y, int len,int order);//根据待拟合向量,给出拟合的order阶多项式系数static double polyval(double *coef, int order, double x);//多项式带入数值进行插值运算static double *matrix_trans_mul(double *A, double *B,int order);static double *inv(double *A, int order);//
order&阶矩阵求逆int main(){ double x[10] = {1,2,3,4,5,6,7,8,9,10}; double y[10] = {1,3,7,8,5,3.5,1,-2.5,-8,-16}; double *coef = NULL; int i = 0; /* 拟合多项式 f(t) = coef[0]*t^3 + coef[1]*t^2 + coef[2]*t^1 + coef[3] & */ coef = polyfit(x, y, sizeof(x)/sizeof(x[0]), 5);//5阶多项式拟合 //以下结果与matlab拟合的结果一致& & & & printf("coef[0-5] = %lf %lf %lf %lf&%lf &%lf\n",coef[0],coef[1],coef[2],coef[3],coef[4],coef[5]); & & double yy = polyval(coef, 5, 11); free(coef);//polyfit 返回的是堆内存 double A[4][4] = {{1,2,3,4},{2,3,4,7},{1,1,0,11},{-1,7,0,11}}; double *INV_A = inv(&A[0][0], 4); for(i = 0; i & 4; i++) {
printf("%lf &%lf &%lf &%lf\n",INV_A[4*i+0],INV_A[4*i+1],INV_A[4*i+2],INV_A[4*i+3]);& } return 0;}/**************************************************************************//*****************************************************************************double * qr_fraction(double *a, int m, int n, double **q)参数: a为待分解m*n矩阵,q用来回传Q阵返回:R阵 & 满足a = QR说明:算法采用施密特正交法,参考《高等数值算法与应用(三)》****************************************************************************/static double * qr_fraction(double *a, int m, int n, double **q)//m &= n,列满秩{ int i = 0; int j = 0; int k = 0; & & & & & & && //调用malloc()必须自己free(),不然多次调用就会内存泄露的 double *Q = (double *)malloc(sizeof(double)*m*n); //Qm*n& & double *R = (double *)malloc(sizeof(double)*n*n); //Rn*n memset(R,0,sizeof(double)*n*n); for(i = 0; i & i++) & //A矩阵共n列 {
double tmp = 0;
for(j = 0; j & j++)//求A矩阵各列的模,m个元素平方和,再开方
tmp += a[n*j + i]*a[n*j + i]; & // &i = 0时, a[0] a[n] a[2*n] ... a[(m-1)*n]
tmp = sqrt(tmp);//得到矩阵列的模
R[i*n + i] =//R[i][i] 即R矩阵的对角元
/////////////////////////////
//第一列的模得到后,就可以得到归一化的Q1(Q的第一列)
for(j = 0; j & j++)//求A矩阵各列的模,m个元素平方和,再开方
Q[n*j + i] = a[n*j + i] / & // &i = 0时, a[0] a[n] a[2*n] ... a[(m-1)*n]
for(j = i + 1; j & j++)//
for(k = 0; k & k++) & & //R[i][j] = &qi, aj& qi与aj内积 Q的j列,A的k列
{& & & & & & & & tmp += Q[n*k + i] * a[n*k + j];
R[n*i + j] = & //得到R[i][j]
for(k = 0; k & k++) & &&
{& & & & & & & & a[n*k + j] = a[n*k + j] - Q[n*k + i] * R[n*i + j];//a[k][j] = a[k][j] - Q[k][i] * R[i][j]
} } *q = Q; return R;
}/*****************************************************************************static double * up_tria_inv_n_ord(double *t,int n)参数: t指向n * n上三角阵返回: 指向逆矩阵的指针说明:上三角阵求逆具体算法见论文《三角矩阵求逆的一种方法》,不过论文里面有一个地方印刷错误,具体地方是:& & & a[i][j] = -1/t[j][j] * (t[j][j] + sum() , &应该为a[i][j] = -1/t[j][j] * (t[i][j] + sum() ),****************************************************************************/static double * up_tria_inv_n_ord(double *t,int n){ int i = 0; int j = 0; int k = 0; int m = 0; double tmp = 0; //调用malloc()必须自己free(),不然多次调用就会内存泄露的 double *a = (double *)malloc(sizeof(double)*n*n); //an*n& & double *inv = (double *)malloc(sizeof(double)*n*n); //Rn*n memset(a,0,sizeof(double)*n*n); memset(inv,0,sizeof(double)*n*n); for(i = 0; i & i++) {
inv[i*n + i] = 1/t[i*n + i];//即inv[i][i] = 1/t[i][i]; } for(i = 0; i & n - 1; i++)//n - 1项,ai(i+1) &(i = 1,n - 1) {
a[i*n + i + 1] = -inv[(i+1)*n + i + 1] * t[i*n + i + 1];//即inv[i][i] = 1/a[i][i]; } m = 2; while(m & n)//这部分需要认真考虑,先算什么,再算什么 {
for(i = 0,j = i + i & n - 2; i++)//n - 2项
for(k = i + 1; k & k++)
tmp += a[i*n + k] * t[k*n + j];
a[i*n + j] = -inv[j*n + j] * (t[i*n + j] + tmp);//即inv[i][i] = 1/a[i][i];
m++; } for(i = 0; i & n - 1; i++) {
for(j = i + 1; j & j++)
inv[i*n + j] = inv[i*n + i] * a[i*n + j];
} } free(a);
}/*****************************************************************************double * array_mut(double *A, double *x, int len)参数: A指向m*n矩阵,x指向向量,len为向量长度返回:指针,指向向量y = Ax****************************************************************************///static double * array_mut(double *A, double *x, int m, int n)//m * n型//{// static double y[POLYFIT_NUM] = {0}; //不会超过1000个点拟合一个点的// for(int i = 0; i & i++)// {//
y[i] = 0; & & & &//这条不能少!多次调用就有问题,static的后遗症//
for(int j = 0; j & j++)//
& y[i] += A[n*i + j] * x[j];&//
}// }// & &// //}static double * array_mut(double *A, double *x, int m, int n)//m * n型{& & double *y = (double *)malloc(sizeof(double)*m); //不会超过1000个点拟合一个点的 for(int i = 0; i & i++) {
y[i] = 0; & & &&
for(int j = 0; j & j++)
& y[i] += A[n*i + j] * x[j];&
} }& && }/*****************************************************************************double * array_trans_mut(double *A, double *x, int len)参数: A指向m*n矩阵,x指向向量,len为向量长度返回:指针,指向向量y = A^T * x &即A的转置乘以x向量****************************************************************************///static double * array_trans_mut(double *A, double *x, int m, int n)//m * n型//{// static double y[POLYFIT_NUM] = {0}; //// for(int i = 0; i & i++) //n*m * n// {//
y[i] = 0;//
for(int j = 0; j & j++)//
& y[i] += A[n*j + i] * x[j]; //多次调用就有问题,static的后遗症//
}// }// & &// //}static double * array_trans_mut(double *A, double *x, int m, int n)//m * n型{ double *y = (double *)malloc(sizeof(double)*n);& for(int i = 0; i & i++) //n*m * n {
for(int j = 0; j & j++)
& y[i] += A[n*j + i] * x[j];&
} }& && }/*****************************************************************************void polyfit(double *x, double *y, int len, int order)参数: x,y为待拟合的向量,len为向量长度,order为多项式阶(次)数返回:coef为order阶多项式系数****************************************************************************/static double * polyfit(double *x, double *y, int len, int order){& && int i = 0; int j = 0; int colum = order + 1; double *coef = NULL; double *A = (double *)malloc(sizeof(double)*len*colum); //A len 行 order + 1列,polyfit里的V矩阵 double *Q = NULL; double *R = NULL; double *inv_R = NULL; //以下代码生成A矩阵,A其实为范德蒙行列式,最后一列为 1 for(i = 0; i & i++) //i对应行 {
A[i*colum + colum - 1] = 1.0;& } for(j = colum - 2 ; j & -1; j--) //j对应列 0 -- 2 列& {
for(i = 0; i & i++) //i对应行
A[i*colum + j] = x[i] * A[i*colum + j + 1];&
} }//至此,A矩阵生成完毕 R = qr_fraction(A, len, colum, &Q); inv_R = up_tria_inv_n_ord(R,colum); //返回的是堆内存
& & & & & & & & & & & & & & & & & & & &//free(R)就出错啦! //参数p计算公式为:p = R^(-1) * Q^T * y //故需先计算Q^T * y double *yy = array_trans_mut(Q, y, len, colum); coef = array_mut(inv_R, yy, colum, colum); //coef = array_mut(inv_R, y, colum, colum); free(yy); free(inv_R); free(Q); free(R); free(A); }static double polyval(double *coef, int order, double x){ int i = 0; double sum = 0; for(i = 0; i & order + 1; i++) {
sum += coef[i] * pow(x, order - i); } }/*****************************************************************************&A*B的转置****************************************************************************/static double *matrix_trans_mul(double *A, double *B,int order){ double *result = (double *)malloc(sizeof(double) * order * order); int i = 0; int j = 0; int k = 0; double tmp = 0; for(i = 0; i & i++) {
for(j = 0; j & j++)
for(k = 0; k & k++)
//*(result + i*order + j) = (*(A + i*order + k)) * (*(B + j*order + k));
tmp += (*(A + i*order + k)) * (*(B + j*order + k));
*(result + i*order + j) =
} }/*****************************************************************************&n阶矩阵求逆****************************************************************************/static double *inv(double *A, int order){ //double *INV = (double *)malloc(sizeof(double) * order * order); double *Q = NULL; double *R = NULL; double *INV_R = NULL; double *INV_A = NULL; R = qr_fraction(A, order, order, &Q); INV_R = up_tria_inv_n_ord(R, order); INV_A = matrix_trans_mul(INV_R, Q, order); free(Q); free(R); free(INV_R); return INV_A;}
作者的其他最新日志
评论 ( 个评论)
Powered by

我要回帖

更多关于 三角矩阵的逆矩阵 的文章

 

随机推荐